From 2326dee54f7d10de19cdbd5273848956da380b18 Mon Sep 17 00:00:00 2001 From: Eclipses <99494277+EclipsesDev@users.noreply.github.com> Date: Sat, 13 Apr 2024 16:17:41 +0700 Subject: [PATCH] LEGACY: Forge Mixin Improvement (#2786) --- .../forge/mixins/tweaks/MixinEntityFX.java | 19 ++++++++ .../mixins/tweaks/MixinMinecraftServer.java | 48 +++++++++++++++++++ .../resources/liquidbounce.forge.mixins.json | 4 +- 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinEntityFX.java create mode 100644 src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinMinecraftServer.java diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinEntityFX.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinEntityFX.java new file mode 100644 index 00000000000..fed4b5266b6 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinEntityFX.java @@ -0,0 +1,19 @@ +package net.ccbluex.liquidbounce.injection.forge.mixins.tweaks; + +import net.minecraft.client.particle.EntityFX; +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.Redirect; + +@Mixin(EntityFX.class) +public class MixinEntityFX { + // Cache the brightness value + @Unique + private static final int BRIGHTNESS_VALUE = 0xF000F0; + + @Redirect(method={"renderParticle"}, at=@At(value="INVOKE", target="Lnet/minecraft/client/particle/EntityFX;getBrightnessForRender(F)I")) + private int renderParticle(EntityFX entityFX, float f) { + return BRIGHTNESS_VALUE; + } +} diff --git a/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinMinecraftServer.java b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinMinecraftServer.java new file mode 100644 index 00000000000..882db0d34f2 --- /dev/null +++ b/src/main/java/net/ccbluex/liquidbounce/injection/forge/mixins/tweaks/MixinMinecraftServer.java @@ -0,0 +1,48 @@ +package net.ccbluex.liquidbounce.injection.forge.mixins.tweaks; + +import io.netty.buffer.ByteBuf; +import net.ccbluex.liquidbounce.utils.ClientUtils; +import net.minecraft.server.MinecraftServer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MinecraftServer.class) +public class MixinMinecraftServer { + + /** + * Ensures proper resource release for the favicon in the status response. + * This optimization releases the ByteBuf object to prevent resource leaks. + * + * @param byteBuf The ByteBuf object to be released. + * @return The ByteBuf object after release. + */ + @ModifyVariable( + method = "addFaviconToStatusResponse", + at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ServerStatusResponse;setFavicon(Ljava/lang/String;)V", shift = At.Shift.AFTER), + ordinal = 1 + ) + private ByteBuf releaseFaviconByteBuf(ByteBuf byteBuf) { + try { + ClientUtils.INSTANCE.getLOGGER().info("Releasing favicon ByteBuf: {}", byteBuf); + } catch (Exception e) { + ClientUtils.INSTANCE.getLOGGER().error("Error occurred during favicon ByteBuf release", e); + } finally { + if (byteBuf != null) { + byteBuf.release(); + } + } + return byteBuf; + } + + @Inject(method = "*", at = @At("RETURN")) + private void onInit(CallbackInfo ci) { + try { + ClientUtils.INSTANCE.getLOGGER().info("{} mixin successfully loaded!", getClass().getSimpleName()); + } catch (Exception e) { + ClientUtils.INSTANCE.getLOGGER().error("Failed to load {} mixin: {}", getClass().getSimpleName(), e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/resources/liquidbounce.forge.mixins.json b/src/main/resources/liquidbounce.forge.mixins.json index b28347097dd..98456deed0d 100644 --- a/src/main/resources/liquidbounce.forge.mixins.json +++ b/src/main/resources/liquidbounce.forge.mixins.json @@ -63,11 +63,13 @@ "render.MixinVisGraph", "resources.MixinSkinManager", "tweaks.MixinAnvilChunkLoader", + "tweaks.MixinMinecraftServer", "world.MixinChunk", "world.MixinWorld", "world.MixinWorldClient" ], "client": [ - "gui.MixinGuiAchievement" + "gui.MixinGuiAchievement", + "tweaks.MixinEntityFX" ] } \ No newline at end of file