From 1a8469c735c7588ababa0b3bb7f3fcca9eae3cf7 Mon Sep 17 00:00:00 2001 From: oneachina Date: Sat, 21 Mar 2026 13:04:00 +0800 Subject: [PATCH 1/2] feat: remove JCEF and WebBrowserMod for performance optimization --- build.gradle | 2 - .../java/cn/pupperclient/PupperClient.java | 2 - .../libraries/browser/JCefBrowser.java | 103 ---------------- .../management/mod/ModManager.java | 1 - .../mod/impl/hud/WebBrowserMod.java | 74 ------------ .../client/MixinMinecraftClient.java | 2 - .../minecraft/client/gui/MixinChatScreen.java | 110 ------------------ 7 files changed, 294 deletions(-) delete mode 100644 src/main/java/cn/pupperclient/libraries/browser/JCefBrowser.java delete mode 100644 src/main/java/cn/pupperclient/management/mod/impl/hud/WebBrowserMod.java delete mode 100644 src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/gui/MixinChatScreen.java diff --git a/build.gradle b/build.gradle index f5e7333..c29ab05 100644 --- a/build.gradle +++ b/build.gradle @@ -69,8 +69,6 @@ dependencies { modImplementation 'net.java.dev.jna:jna:5.12.1' modImplementation 'net.java.dev.jna:jna-platform:5.12.1' - modJij 'com.github.CCBlueX:mcef:3.0.0-1.21.4' - def lwjglNfdDeps = [ "org.lwjgl:lwjgl-nfd:$lwjglVersion", "org.lwjgl:lwjgl-nfd::natives-linux", diff --git a/src/main/java/cn/pupperclient/PupperClient.java b/src/main/java/cn/pupperclient/PupperClient.java index bed1503..403f548 100644 --- a/src/main/java/cn/pupperclient/PupperClient.java +++ b/src/main/java/cn/pupperclient/PupperClient.java @@ -4,7 +4,6 @@ import cn.pupperclient.event.EventBus; import cn.pupperclient.event.server.PacketHandler; import cn.pupperclient.gui.welcomegui.TermsScreen; -import cn.pupperclient.libraries.browser.JCefBrowser; import cn.pupperclient.management.cape.CapeManager; import cn.pupperclient.management.color.ColorManager; import cn.pupperclient.management.command.PupperCommand; @@ -79,7 +78,6 @@ public void onShutdown() { } private void initializeResources() { - JCefBrowser.download(); Fonts.loadAll(); FileLocation.init(); I18n.setLanguage(Language.ENGLISH); diff --git a/src/main/java/cn/pupperclient/libraries/browser/JCefBrowser.java b/src/main/java/cn/pupperclient/libraries/browser/JCefBrowser.java deleted file mode 100644 index bbcbac9..0000000 --- a/src/main/java/cn/pupperclient/libraries/browser/JCefBrowser.java +++ /dev/null @@ -1,103 +0,0 @@ -package cn.pupperclient.libraries.browser; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -import cn.pupperclient.PupperLogger; -import cn.pupperclient.utils.thread.Multithreading; - -import net.ccbluex.liquidbounce.mcef.MCEF; -import net.ccbluex.liquidbounce.mcef.MCEFDownloadManager; -import net.ccbluex.liquidbounce.mcef.MCEFPlatform; -import net.ccbluex.liquidbounce.mcef.cef.MCEFBrowser; - -public class JCefBrowser { - - private static MCEFBrowser browser; - private static boolean unsupport; - - public static void init() { - - MCEF.INSTANCE.initialize(); - - if(browser == null) { - String url = "https://cn.bing.com"; - boolean transparent = true; - browser = MCEF.INSTANCE.createBrowser(url, transparent, 60); - browser.resize(1280, 720); - } - } - - public static void close() { - - if(browser != null) { - browser.close(); - browser = null; - } - - if(MCEF.INSTANCE.isInitialized()) { - MCEF.INSTANCE.shutdown(); - } - - if (MCEFPlatform.getPlatform().isWindows()) { - String processName = "jcef_helper.exe"; - try { - ProcessBuilder processBuilder = new ProcessBuilder("tasklist"); - Process process = processBuilder.start(); - - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - boolean isRunning = false; - while ((line = reader.readLine()) != null) { - if (line.contains(processName)) { - isRunning = true; - break; - } - } - reader.close(); - - if (isRunning) { - MCEF.INSTANCE.getLogger().warn("JCEF is still running, killing to avoid lingering processes."); - ProcessBuilder killProcess = new ProcessBuilder("taskkill", "/F", "/IM", processName); - killProcess.start(); - } - } catch (Exception e) { - MCEF.INSTANCE.getLogger() - .error("Unable to check if JCEF is still running. There may be lingering processes.", e); - } - } - } - - public static void download() { - try { - MCEFDownloadManager resourceManager = MCEF.INSTANCE.newResourceManager(); - - if(!resourceManager.isSystemCompatible()) { - unsupport = true; - PupperLogger.error("JCEF", "The computer does not support the browser"); - return; - } - - if(resourceManager.requiresDownload()) { - Multithreading.runAsync(() -> { - try { - resourceManager.downloadJcef(); - } catch (IOException e) { - PupperLogger.error("JCEF", "Failed to download JCEF", e); - } - }); - } - } catch (IOException e) { - PupperLogger.error("JCEF", "Failed to initialize resource manager", e); - } - } - - public static MCEFBrowser getBrowser() { - return browser; - } - - public static boolean isUnsupport() { - return unsupport; - } -} diff --git a/src/main/java/cn/pupperclient/management/mod/ModManager.java b/src/main/java/cn/pupperclient/management/mod/ModManager.java index 054e8bc..dc32fe5 100644 --- a/src/main/java/cn/pupperclient/management/mod/ModManager.java +++ b/src/main/java/cn/pupperclient/management/mod/ModManager.java @@ -66,7 +66,6 @@ private void initHudMods() mods.add(new ServerIPDisplayMod()); mods.add(new SpeedometerMod()); mods.add(new StopwatchMod()); - mods.add(new WebBrowserMod()); mods.add(new WeatherDisplayMod()); mods.add(new YawDisplayMod()); mods.add(new WatermarkMod()); diff --git a/src/main/java/cn/pupperclient/management/mod/impl/hud/WebBrowserMod.java b/src/main/java/cn/pupperclient/management/mod/impl/hud/WebBrowserMod.java deleted file mode 100644 index c30cf3e..0000000 --- a/src/main/java/cn/pupperclient/management/mod/impl/hud/WebBrowserMod.java +++ /dev/null @@ -1,74 +0,0 @@ -package cn.pupperclient.management.mod.impl.hud; - -import cn.pupperclient.event.EventBus; -import cn.pupperclient.event.client.RenderSkiaEvent; -import cn.pupperclient.libraries.browser.JCefBrowser; -import cn.pupperclient.management.mod.api.hud.HUDMod; -import cn.pupperclient.management.mod.settings.impl.NumberSetting; -import cn.pupperclient.skia.Skia; -import cn.pupperclient.skia.font.Icon; - -import net.ccbluex.liquidbounce.mcef.MCEF; - -public class WebBrowserMod extends HUDMod { - - private static WebBrowserMod instance; - private float currentWidth, currentHeight; - private NumberSetting opacitySetting = new NumberSetting("setting.opacity", "setting.opacity.description", - Icon.OPACITY, this, 1, 0.1F, 1, 0.1F); - - public WebBrowserMod() { - super("mod.webbrowser.name", "mod.webbrowser.description", Icon.LANGUAGE); - instance = this; - } - - public EventBus.EventListener onRenderSkia = event -> { - - float scale = position.getScale(); - float width = 1920 * 0.11F; - float height = 1080 * 0.11F; - - currentWidth = width * scale; - currentHeight = height * scale; - - if (MCEF.INSTANCE.isInitialized() && JCefBrowser.getBrowser() != null) { - MCEF.INSTANCE.getApp().getHandle().N_DoMessageLoopWork(); - this.drawBlurBackground(getX(), getY(), currentWidth, currentHeight); - Skia.drawRoundedImage(JCefBrowser.getBrowser().getRenderer().getTextureID(), getX(), getY(), currentWidth, currentHeight, - getRadius(), opacitySetting.getValue()); - } - - position.setSize(width, height); - }; - - @Override - public float getRadius() { - return 8; - } - - @Override - public void onEnable() { - super.onEnable(); - JCefBrowser.init(); - } - - @Override - public void onDisable() { - super.onDisable(); - JCefBrowser.close(); - } - - public static WebBrowserMod getInstance() { - return instance; - } - - public int getMouseX(double mouseX) { - double relativeX = (mouseX - position.getX()) / currentWidth; - return (int)(relativeX * 1280); - } - - public int getMouseY(double mouseY) { - double relativeY = (mouseY - position.getY()) / currentHeight; - return (int)(relativeY * 720); - } -} diff --git a/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/MixinMinecraftClient.java b/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/MixinMinecraftClient.java index f0c5a8c..b60ca3c 100644 --- a/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/MixinMinecraftClient.java +++ b/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/MixinMinecraftClient.java @@ -21,7 +21,6 @@ import cn.pupperclient.event.EventBus; import cn.pupperclient.event.client.ClientTickEvent; import cn.pupperclient.event.client.GameLoopEvent; -import cn.pupperclient.libraries.browser.JCefBrowser; import cn.pupperclient.management.config.ConfigType; import cn.pupperclient.management.mod.impl.player.HitDelayFixMod; import cn.pupperclient.management.mod.impl.player.OldAnimationsMod; @@ -90,7 +89,6 @@ public void onInit(RunArgs args, CallbackInfo ci) { @Inject(method = "stop", at = @At("HEAD")) public void onStop(CallbackInfo ci) { PupperClient.getInstance().getConfigManager().save(ConfigType.MOD); - JCefBrowser.close(); } @Inject(method = "handleBlockBreaking", at = @At("HEAD")) diff --git a/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/gui/MixinChatScreen.java b/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/gui/MixinChatScreen.java deleted file mode 100644 index bebc08e..0000000 --- a/src/main/java/cn/pupperclient/mixin/mixins/minecraft/client/gui/MixinChatScreen.java +++ /dev/null @@ -1,110 +0,0 @@ -package cn.pupperclient.mixin.mixins.minecraft.client.gui; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import cn.pupperclient.libraries.browser.JCefBrowser; -import cn.pupperclient.management.mod.impl.hud.WebBrowserMod; -import cn.pupperclient.utils.mouse.MouseUtils; - -import net.minecraft.client.gui.screen.ChatScreen; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.text.Text; - -@Mixin(ChatScreen.class) -public class MixinChatScreen extends Screen { - - @Unique - private boolean isInWebBrowser; - - protected MixinChatScreen(Text title) { - super(title); - } - - @Inject(method = "mouseClicked", at = @At("HEAD")) - private void onMouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { - - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendMousePress(WebBrowserMod.getInstance().getMouseX(mouseX), - WebBrowserMod.getInstance().getMouseY(mouseY), button); - JCefBrowser.getBrowser().setFocus(true); - } - } - - @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendMouseRelease(WebBrowserMod.getInstance().getMouseX(mouseX), - WebBrowserMod.getInstance().getMouseY(mouseY), button); - JCefBrowser.getBrowser().setFocus(true); - } - return super.mouseReleased(mouseX, mouseY, button); - } - - @Override - public void mouseMoved(double mouseX, double mouseY) { - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendMouseMove(WebBrowserMod.getInstance().getMouseX(mouseX), - WebBrowserMod.getInstance().getMouseY(mouseY)); - isInWebBrowser = MouseUtils.isInside(mouseX, mouseY, WebBrowserMod.getInstance().getX(), - WebBrowserMod.getInstance().getY(), WebBrowserMod.getInstance().getPosition().getWidth(), - WebBrowserMod.getInstance().getPosition().getHeight()); - } else { - isInWebBrowser = false; - } - super.mouseMoved(mouseX, mouseY); - } - - @Inject(method = "mouseScrolled", at = @At("HEAD")) - private void onMouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount, - CallbackInfoReturnable cir) { - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendMouseWheel(WebBrowserMod.getInstance().getMouseX(mouseX), - WebBrowserMod.getInstance().getMouseY(mouseY), verticalAmount); - } - } - - @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void onKeyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendKeyPress(keyCode, scanCode, modifiers); - JCefBrowser.getBrowser().setFocus(true); - if(isInWebBrowser) { - cir.setReturnValue(true); - } - } - } - - @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendKeyRelease(keyCode, scanCode, modifiers); - JCefBrowser.getBrowser().setFocus(true); - if(isInWebBrowser) { - return true; - } - } - return super.keyReleased(keyCode, scanCode, modifiers); - } - - @Override - public boolean charTyped(char codePoint, int modifiers) { - - if (codePoint == (char) 0) { - return false; - } - - if (JCefBrowser.getBrowser() != null) { - JCefBrowser.getBrowser().sendKeyTyped(codePoint, modifiers); - JCefBrowser.getBrowser().setFocus(true); - if(isInWebBrowser) { - return true; - } - } - - return super.charTyped(codePoint, modifiers); - } -} From fa90a2be37b18702ef80a7626d51e76ac8f98ed6 Mon Sep 17 00:00:00 2001 From: oneachina Date: Sat, 21 Mar 2026 13:08:08 +0800 Subject: [PATCH 2/2] fix: clean remove mixin --- src/main/resources/pupper.mixins.json | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/resources/pupper.mixins.json b/src/main/resources/pupper.mixins.json index 7953246..8223db7 100644 --- a/src/main/resources/pupper.mixins.json +++ b/src/main/resources/pupper.mixins.json @@ -9,7 +9,6 @@ "minecraft.client.MixinMouse", "minecraft.client.gui.MixinBossBarHud", "minecraft.client.gui.MixinChatHud", - "minecraft.client.gui.MixinChatScreen", "minecraft.client.gui.MixinLanguageScreen", "minecraft.client.gui.MixinMultiplayerScreen", "minecraft.client.gui.MixinPackScreen",