From 5e272bf21c663a5f0b02fce5abd4a8a6c097c2a6 Mon Sep 17 00:00:00 2001 From: weikengchen Date: Fri, 17 Apr 2026 13:04:19 +0800 Subject: [PATCH 1/3] swap window icon to ImagineFun logo on imaginefun.net servers Add DockIconHandler that replaces the OS window icon (macOS Dock, Windows taskbar, Linux titlebar) while connected to *.imaginefun.net, restoring the vanilla icon on disconnect. macOS goes through Cocoa because GLFW's setWindowIcon is documented as a no-op there; other platforms use glfwSetWindowIcon directly. References to org.lwjgl.system.macosx.* are kept inside the macOS-only methods so class init stays lazy on non-Mac JVMs. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../net/imaginefun/ImagineFunUtilsClient.java | 10 + .../windowicon/DockIconHandler.java | 220 ++++++++++++++++++ .../assets/imaginefunutils/dock-icon.png | Bin 0 -> 66595 bytes 3 files changed, 230 insertions(+) create mode 100644 src/client/java/net/imaginefun/windowicon/DockIconHandler.java create mode 100644 src/main/resources/assets/imaginefunutils/dock-icon.png diff --git a/src/client/java/net/imaginefun/ImagineFunUtilsClient.java b/src/client/java/net/imaginefun/ImagineFunUtilsClient.java index 0847851..0f36aa5 100644 --- a/src/client/java/net/imaginefun/ImagineFunUtilsClient.java +++ b/src/client/java/net/imaginefun/ImagineFunUtilsClient.java @@ -8,6 +8,8 @@ import net.imaginefun.networking.ClientCustomPacketListenerImpl; import net.imaginefun.networking.HandshakePayload; import net.imaginefun.servers.ServerListPopulator; +import net.imaginefun.windowicon.DockIconHandler; +import net.minecraft.client.multiplayer.ServerData; public class ImagineFunUtilsClient implements ClientModInitializer { @@ -24,8 +26,16 @@ public void onInitializeClient() { .map(mod -> mod.getMetadata().getVersion().getFriendlyString()) .orElse("unknown"); ClientPlayNetworking.send(new HandshakePayload(version)); + + ServerData server = client.getCurrentServer(); + if (server != null && server.ip != null + && server.ip.toLowerCase().endsWith(".imaginefun.net")) { + DockIconHandler.apply(); + } }); + ClientPlayConnectionEvents.DISCONNECT.register((handler, client) -> DockIconHandler.reset()); + } public ClientCustomPacketListener getClientCustomPacketListener() { diff --git a/src/client/java/net/imaginefun/windowicon/DockIconHandler.java b/src/client/java/net/imaginefun/windowicon/DockIconHandler.java new file mode 100644 index 0000000..4424a31 --- /dev/null +++ b/src/client/java/net/imaginefun/windowicon/DockIconHandler.java @@ -0,0 +1,220 @@ +package net.imaginefun.windowicon; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; + +import org.lwjgl.glfw.GLFW; +import org.lwjgl.glfw.GLFWImage; +import org.lwjgl.system.JNI; +import org.lwjgl.system.MemoryStack; +import org.lwjgl.system.MemoryUtil; +import org.lwjgl.system.macosx.ObjCRuntime; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.mojang.blaze3d.platform.IconSet; +import com.mojang.blaze3d.platform.NativeImage; + +import net.minecraft.SharedConstants; +import net.minecraft.client.Minecraft; + +/** + * Replaces the OS window icon (macOS Dock, Windows taskbar, Linux titlebar) with the + * ImagineFun logo while connected to an ImagineFun server, and restores the vanilla + * icon on disconnect. + * + *

Two code paths because GLFW's {@code glfwSetWindowIcon} is documented as a no-op on + * macOS — Cocoa requires {@code [NSApplication setApplicationIconImage:]} via the + * Objective-C runtime. + * + *

Must be called after the GLFW window exists; calling during + * {@code onInitializeClient} is too early because window creation overwrites the icon. + */ +public final class DockIconHandler { + + private static final Logger LOGGER = LoggerFactory.getLogger("ImagineFunDockIcon"); + private static final String ICON_RESOURCE = "/assets/imaginefunutils/dock-icon.png"; + + private enum Os { MAC, WIN_OR_LINUX, OTHER } + + private static final Os OS; + static { + String os = System.getProperty("os.name", "").toLowerCase(); + if (os.contains("mac") || os.contains("darwin")) { + OS = Os.MAC; + } else if (os.contains("win") || os.contains("linux")) { + OS = Os.WIN_OR_LINUX; + } else { + OS = Os.OTHER; + } + } + + private static boolean applied = false; + private static long savedMacIcon = 0; + + private DockIconHandler() {} + + public static void apply() { + if (applied) return; + switch (OS) { + case MAC -> applyMac(); + case WIN_OR_LINUX -> applyGlfw(); + case OTHER -> {} + } + } + + public static void reset() { + if (!applied) return; + switch (OS) { + case MAC -> resetMac(); + case WIN_OR_LINUX -> resetGlfw(); + case OTHER -> {} + } + } + + private static byte[] readIconBytes() throws IOException { + try (InputStream in = DockIconHandler.class.getResourceAsStream(ICON_RESOURCE)) { + if (in == null) { + throw new IOException("missing classpath resource: " + ICON_RESOURCE); + } + return in.readAllBytes(); + } + } + + private static void applyMac() { + try { + byte[] pngBytes = readIconBytes(); + + long msgSend = ObjCRuntime.getLibrary().getFunctionAddress("objc_msgSend"); + if (msgSend == 0) { + LOGGER.warn("objc_msgSend not found; cannot set Dock icon"); + return; + } + + long nsAppClass = ObjCRuntime.objc_getClass("NSApplication"); + long selSharedApp = ObjCRuntime.sel_registerName("sharedApplication"); + long app = JNI.invokePPP(nsAppClass, selSharedApp, msgSend); + + long selGetIcon = ObjCRuntime.sel_registerName("applicationIconImage"); + savedMacIcon = JNI.invokePPP(app, selGetIcon, msgSend); + + long nsDataClass = ObjCRuntime.objc_getClass("NSData"); + long selDataWithBytesLength = ObjCRuntime.sel_registerName("dataWithBytes:length:"); + + long pngPtr = MemoryUtil.nmemAlloc(pngBytes.length); + try { + for (int i = 0; i < pngBytes.length; i++) { + MemoryUtil.memPutByte(pngPtr + i, pngBytes[i]); + } + + long nsData = JNI.invokePPPP( + nsDataClass, selDataWithBytesLength, pngPtr, pngBytes.length, msgSend); + if (nsData == 0) { + LOGGER.warn("Failed to create NSData from PNG bytes"); + return; + } + + long nsImageClass = ObjCRuntime.objc_getClass("NSImage"); + long selAlloc = ObjCRuntime.sel_registerName("alloc"); + long selInitWithData = ObjCRuntime.sel_registerName("initWithData:"); + + long nsImageRaw = JNI.invokePPP(nsImageClass, selAlloc, msgSend); + long nsImage = JNI.invokePPPP(nsImageRaw, selInitWithData, nsData, msgSend); + if (nsImage == 0) { + LOGGER.warn("Failed to create NSImage from PNG data"); + return; + } + + long selSetIcon = ObjCRuntime.sel_registerName("setApplicationIconImage:"); + JNI.invokePPPV(app, selSetIcon, nsImage, msgSend); + + applied = true; + LOGGER.info("Replaced macOS Dock icon with ImagineFun logo"); + } finally { + MemoryUtil.nmemFree(pngPtr); + } + } catch (Exception e) { + LOGGER.warn("Failed to set macOS Dock icon", e); + } + } + + private static void resetMac() { + try { + long msgSend = ObjCRuntime.getLibrary().getFunctionAddress("objc_msgSend"); + if (msgSend == 0) return; + + long nsAppClass = ObjCRuntime.objc_getClass("NSApplication"); + long selSharedApp = ObjCRuntime.sel_registerName("sharedApplication"); + long app = JNI.invokePPP(nsAppClass, selSharedApp, msgSend); + + long selSetIcon = ObjCRuntime.sel_registerName("setApplicationIconImage:"); + JNI.invokePPPV(app, selSetIcon, savedMacIcon, msgSend); + + applied = false; + LOGGER.info("Restored original macOS Dock icon"); + } catch (Exception e) { + LOGGER.warn("Failed to restore macOS Dock icon", e); + } + } + + private static void applyGlfw() { + NativeImage image = null; + ByteBuffer pixels = null; + try (InputStream in = DockIconHandler.class.getResourceAsStream(ICON_RESOURCE)) { + if (in == null) { + LOGGER.warn("Dock icon resource missing: {}", ICON_RESOURCE); + return; + } + image = NativeImage.read(in); + int w = image.getWidth(); + int h = image.getHeight(); + + // GLFW expects RGBA bytes in memory order; NativeImage.getPixel returns + // 0xAARRGGBB packed ints, so unpack and rewrite as R,G,B,A bytes. + pixels = MemoryUtil.memAlloc(w * h * 4); + for (int y = 0; y < h; y++) { + for (int x = 0; x < w; x++) { + int argb = image.getPixel(x, y); + pixels.put((byte) ((argb >> 16) & 0xFF)); + pixels.put((byte) ((argb >> 8) & 0xFF)); + pixels.put((byte) (argb & 0xFF)); + pixels.put((byte) ((argb >> 24) & 0xFF)); + } + } + pixels.flip(); + + try (MemoryStack stack = MemoryStack.stackPush()) { + GLFWImage glfwImg = GLFWImage.malloc(stack); + glfwImg.set(w, h, pixels); + GLFWImage.Buffer buf = GLFWImage.malloc(1, stack); + buf.put(0, glfwImg); + buf.position(0); + long handle = Minecraft.getInstance().getWindow().handle(); + GLFW.glfwSetWindowIcon(handle, buf); + } + + applied = true; + LOGGER.info("Replaced window icon with ImagineFun logo"); + } catch (Exception e) { + LOGGER.warn("Failed to set window icon", e); + } finally { + if (pixels != null) MemoryUtil.memFree(pixels); + if (image != null) image.close(); + } + } + + private static void resetGlfw() { + try { + Minecraft mc = Minecraft.getInstance(); + IconSet set = SharedConstants.getCurrentVersion().stable() + ? IconSet.RELEASE + : IconSet.SNAPSHOT; + mc.getWindow().setIcon(mc.getVanillaPackResources(), set); + applied = false; + LOGGER.info("Restored vanilla window icon"); + } catch (Exception e) { + LOGGER.warn("Failed to restore window icon", e); + } + } +} diff --git a/src/main/resources/assets/imaginefunutils/dock-icon.png b/src/main/resources/assets/imaginefunutils/dock-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..92a6b2e5161086f30ce92e8e0749f775347d57f8 GIT binary patch literal 66595 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 ND9NeIR!jc~`5$CCp@{$h literal 0 HcmV?d00001 From 83d278613a00895714eae9592b129aad851284e4 Mon Sep 17 00:00:00 2001 From: weikengchen Date: Fri, 17 Apr 2026 13:44:03 +0800 Subject: [PATCH 2/3] drop Linux from DockIconHandler OS detection No Linux players expected on this server, so collapse the WIN_OR_LINUX branch to just WIN. Linux now falls through to the OTHER no-op. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../imaginefun/windowicon/DockIconHandler.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/client/java/net/imaginefun/windowicon/DockIconHandler.java b/src/client/java/net/imaginefun/windowicon/DockIconHandler.java index 4424a31..f1e049c 100644 --- a/src/client/java/net/imaginefun/windowicon/DockIconHandler.java +++ b/src/client/java/net/imaginefun/windowicon/DockIconHandler.java @@ -20,9 +20,8 @@ import net.minecraft.client.Minecraft; /** - * Replaces the OS window icon (macOS Dock, Windows taskbar, Linux titlebar) with the - * ImagineFun logo while connected to an ImagineFun server, and restores the vanilla - * icon on disconnect. + * Replaces the OS window icon (macOS Dock, Windows taskbar) with the ImagineFun logo + * while connected to an ImagineFun server, and restores the vanilla icon on disconnect. * *

Two code paths because GLFW's {@code glfwSetWindowIcon} is documented as a no-op on * macOS — Cocoa requires {@code [NSApplication setApplicationIconImage:]} via the @@ -36,15 +35,15 @@ public final class DockIconHandler { private static final Logger LOGGER = LoggerFactory.getLogger("ImagineFunDockIcon"); private static final String ICON_RESOURCE = "/assets/imaginefunutils/dock-icon.png"; - private enum Os { MAC, WIN_OR_LINUX, OTHER } + private enum Os { MAC, WIN, OTHER } private static final Os OS; static { String os = System.getProperty("os.name", "").toLowerCase(); if (os.contains("mac") || os.contains("darwin")) { OS = Os.MAC; - } else if (os.contains("win") || os.contains("linux")) { - OS = Os.WIN_OR_LINUX; + } else if (os.contains("win")) { + OS = Os.WIN; } else { OS = Os.OTHER; } @@ -59,7 +58,7 @@ public static void apply() { if (applied) return; switch (OS) { case MAC -> applyMac(); - case WIN_OR_LINUX -> applyGlfw(); + case WIN -> applyGlfw(); case OTHER -> {} } } @@ -68,7 +67,7 @@ public static void reset() { if (!applied) return; switch (OS) { case MAC -> resetMac(); - case WIN_OR_LINUX -> resetGlfw(); + case WIN -> resetGlfw(); case OTHER -> {} } } From 80e07793998461eff5ae567600a548dfae6c448e Mon Sep 17 00:00:00 2001 From: weikengchen Date: Mon, 18 May 2026 00:22:19 +0800 Subject: [PATCH 3/3] Fix Dock icon detection when the server IP carries a port Co-Authored-By: Claude Opus 4.7 (1M context) --- src/client/java/net/imaginefun/ImagineFunUtilsClient.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/client/java/net/imaginefun/ImagineFunUtilsClient.java b/src/client/java/net/imaginefun/ImagineFunUtilsClient.java index 0f36aa5..b968ad0 100644 --- a/src/client/java/net/imaginefun/ImagineFunUtilsClient.java +++ b/src/client/java/net/imaginefun/ImagineFunUtilsClient.java @@ -28,9 +28,11 @@ public void onInitializeClient() { ClientPlayNetworking.send(new HandshakePayload(version)); ServerData server = client.getCurrentServer(); - if (server != null && server.ip != null - && server.ip.toLowerCase().endsWith(".imaginefun.net")) { - DockIconHandler.apply(); + if (server != null && server.ip != null) { + String host = server.ip.toLowerCase().split(":")[0]; + if (host.endsWith(".imaginefun.net")) { + DockIconHandler.apply(); + } } });