From c6b324f3846a55ba9eef61d770a757a58a0ad76e Mon Sep 17 00:00:00 2001 From: kirillsaint Date: Thu, 27 Jul 2023 13:25:21 +0600 Subject: [PATCH] Fixes --- .../client/mixin/SilentClientTransformer.java | 32 ---- .../mixin/mixins/EntityRendererMixin.java | 9 ++ .../mixin/mixins/NetworkPlayerInfoMixin.java | 36 ++--- .../mixin/mixins/RenderGlobalMixin.java | 27 ++-- .../mixin/visitors/ClearingMethodVisitor.java | 140 ------------------ .../mixin/visitors/RenderCloudsFancy.java | 68 --------- .../mixin/visitors/RenderCloudsFast.java | 55 ------- .../utils/NetworkPlayerInfoOptimization.java | 5 + src/main/resources/mixins.SilentClient.json | 3 +- 9 files changed, 51 insertions(+), 324 deletions(-) delete mode 100644 src/main/java/net/silentclient/client/mixin/visitors/ClearingMethodVisitor.java delete mode 100644 src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFancy.java delete mode 100644 src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFast.java create mode 100644 src/main/java/net/silentclient/client/utils/NetworkPlayerInfoOptimization.java diff --git a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java index a031d67..22179c7 100644 --- a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java +++ b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java @@ -1,11 +1,7 @@ package net.silentclient.client.mixin; -import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.launchwrapper.IClassTransformer; import net.silentclient.client.Client; -import net.silentclient.client.mixin.visitors.RenderCloudsFancy; -import net.silentclient.client.mixin.visitors.RenderCloudsFast; -import net.silentclient.client.utils.ClientUtils; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; @@ -31,14 +27,6 @@ public class SilentClientTransformer implements IClassTransformer { return classwriter.toByteArray(); } - if (transformedName.equals(RenderGlobal.class.getName())) { - Client.logger.info("Transforming class: " + transformedName); - final ClassReader classReader5 = new ClassReader(bytes); - final ClassWriter classWriter5 = new ClassWriter(1); - classReader5.accept((ClassVisitor)new RenderGlobalClassVisitor(262144, classWriter5), 0); - return classWriter5.toByteArray(); - } - return bytes; } @@ -46,26 +34,6 @@ public class SilentClientTransformer implements IClassTransformer { return clazz.getName().replace(".", "/"); } - public static class RenderGlobalClassVisitor extends ClassVisitor - { - private RenderGlobalClassVisitor(final int n, final ClassWriter classWriter) { - super(n, (ClassVisitor)classWriter); - } - - public MethodVisitor visitMethod(final int n, final String s, final String s2, final String s3, final String[] array) { - final MethodVisitor visitMethod = super.visitMethod(n, s, s2, s3, array); - if (s.equals(ClientUtils.isDevelopment() ? "renderClouds" : "b") && s2.equals("(FI)V")) { - Client.logger.info("Transforming method: " + s); - return new RenderCloudsFast(this.api, visitMethod); - } - if (s.equals(ClientUtils.isDevelopment() ? "renderCloudsFancy" : "c") && s2.equals("(FI)V")) { - Client.logger.info("Transforming method: " + s); - return new RenderCloudsFancy(this.api, visitMethod); - } - return visitMethod; - } - } - public class AccessTransformerVisitor extends ClassVisitor { public AccessTransformerVisitor(int api, ClassVisitor cv) { diff --git a/src/main/java/net/silentclient/client/mixin/mixins/EntityRendererMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/EntityRendererMixin.java index 35875a1..33330c6 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/EntityRendererMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/EntityRendererMixin.java @@ -5,6 +5,8 @@ import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.gui.GuiIngame; import net.minecraft.client.renderer.EntityRenderer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.culling.Frustum; +import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.client.shader.ShaderGroup; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -21,6 +23,7 @@ import net.silentclient.client.mixin.ducks.EntityRendererExt; import net.silentclient.client.mods.render.AnimationsMod; import net.silentclient.client.mods.render.NewMotionBlurMod; import net.silentclient.client.mods.settings.RenderMod; +import net.silentclient.client.utils.CloudRenderer; import net.silentclient.client.utils.HUDCaching; import net.silentclient.client.utils.culling.EntityCulling; import net.silentclient.client.utils.shader.MotionBlurUtils; @@ -272,4 +275,10 @@ public abstract class EntityRendererMixin implements EntityRendererExt { private void silent$disablePolygonOffset(CallbackInfo ci) { GlStateManager.disablePolygonOffset(); } + + @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/culling/ICamera;setPosition(DDD)V")) + public void initFrustum(ICamera instance, double v1, double v2, double v3) { + CloudRenderer.setFrustum((Frustum) instance); + instance.setPosition(v1, v2, v3); + } } diff --git a/src/main/java/net/silentclient/client/mixin/mixins/NetworkPlayerInfoMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/NetworkPlayerInfoMixin.java index 55b9686..1cf6b77 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/NetworkPlayerInfoMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/NetworkPlayerInfoMixin.java @@ -1,31 +1,31 @@ package net.silentclient.client.mixin.mixins; -import com.mojang.authlib.GameProfile; -import net.minecraft.client.Minecraft; import net.minecraft.client.network.NetworkPlayerInfo; -import net.minecraft.client.resources.DefaultPlayerSkin; -import net.silentclient.client.Client; -import net.silentclient.client.mixin.accessors.AbstractClientPlayerAccessor; -import net.silentclient.client.mixin.accessors.NetworkPlayerInfoAccessor; -import net.silentclient.client.mods.player.NickHiderMod; -import net.silentclient.client.mods.render.AnimationsMod; -import org.spongepowered.asm.mixin.Final; +import net.silentclient.client.utils.NetworkPlayerInfoOptimization; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(NetworkPlayerInfo.class) public abstract class NetworkPlayerInfoMixin { - @Shadow @Final private GameProfile gameProfile; + @Inject(method = "loadPlayerTextures", at = @At("HEAD")) + public void optimizationOfLoadingTexturesStart(CallbackInfo ci) { + if(NetworkPlayerInfoOptimization.isLoadingSkin) { + return; + } + NetworkPlayerInfoOptimization.isLoadingSkin = true; + } - @Shadow private String skinType; - - @Shadow public abstract GameProfile getGameProfile(); - - @Inject(method = "getSkinType", at = @At("HEAD")) - public void customSkinType(CallbackInfoReturnable cir) { + @Inject(method = "loadPlayerTextures", at = @At("HEAD")) + public void optimizationOfLoadingTexturesEnd(CallbackInfo ci) { + (new Thread(() -> { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + NetworkPlayerInfoOptimization.isLoadingSkin = false; + })).start(); } } diff --git a/src/main/java/net/silentclient/client/mixin/mixins/RenderGlobalMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/RenderGlobalMixin.java index 617c359..65c3878 100644 --- a/src/main/java/net/silentclient/client/mixin/mixins/RenderGlobalMixin.java +++ b/src/main/java/net/silentclient/client/mixin/mixins/RenderGlobalMixin.java @@ -1,23 +1,36 @@ package net.silentclient.client.mixin.mixins; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.WorldClient; import net.minecraft.client.renderer.RenderGlobal; -import net.minecraft.client.renderer.chunk.VisGraph; import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.ResourceLocation; import net.silentclient.client.event.impl.RenderTickEvent; -import net.silentclient.client.mixin.ducks.VisGraphExt; import net.silentclient.client.mods.render.BlockOverlayMod; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; 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(RenderGlobal.class) -public class RenderGlobalMixin { +public abstract class RenderGlobalMixin { + @Shadow @Final private Minecraft mc; + + @Shadow @Final private TextureManager renderEngine; + + @Shadow @Final private static ResourceLocation locationCloudsPng; + + @Shadow private WorldClient theWorld; + + @Shadow private int cloudTickCounter; + @Inject(method = "renderEntities", at = @At("HEAD")) public void tickEvent(Entity renderViewEntity, ICamera camera, float partialTicks, CallbackInfo ci) { new RenderTickEvent().call(); @@ -32,10 +45,4 @@ public class RenderGlobalMixin { { BlockOverlayMod.drawSelectionBox(player, movingObjectPositionIn, p_72731_3_, partialTicks); } - - @ModifyVariable(method = "getVisibleFacings", name = "visgraph", at = @At(value = "STORE", ordinal = 0)) - private VisGraph silent$setLimitScan(VisGraph visgraph) { - ((VisGraphExt) visgraph).silent$setLimitScan(true); - return visgraph; - } } diff --git a/src/main/java/net/silentclient/client/mixin/visitors/ClearingMethodVisitor.java b/src/main/java/net/silentclient/client/mixin/visitors/ClearingMethodVisitor.java deleted file mode 100644 index bbd2c4b..0000000 --- a/src/main/java/net/silentclient/client/mixin/visitors/ClearingMethodVisitor.java +++ /dev/null @@ -1,140 +0,0 @@ -package net.silentclient.client.mixin.visitors; - -import org.objectweb.asm.Handle; -import org.objectweb.asm.Label; -import org.objectweb.asm.Attribute; -import org.objectweb.asm.MethodVisitor; - -public class ClearingMethodVisitor extends MethodVisitor -{ - protected boolean clear; - - public ClearingMethodVisitor(final int n, final MethodVisitor methodVisitor) { - super(n, methodVisitor); - this.clear = false; - } - - public void visitAttribute(final Attribute attribute) { - if (!this.clear) { - super.visitAttribute(attribute); - } - } - - public void visitCode() { - if (!this.clear) { - super.visitCode(); - } - } - - public void visitTableSwitchInsn(final int n, final int n2, final Label label, final Label... array) { - super.visitTableSwitchInsn(n, n2, label, array); - } - - public void visitLookupSwitchInsn(final Label label, final int[] array, final Label[] array2) { - super.visitLookupSwitchInsn(label, array, array2); - } - - public void visitMultiANewArrayInsn(final String s, final int n) { - super.visitMultiANewArrayInsn(s, n); - } - - public void visitTryCatchBlock(final Label label, final Label label2, final Label label3, final String s) { - super.visitTryCatchBlock(label, label2, label3, s); - } - - public void visitFrame(final int n, final int n2, final Object[] array, final int n3, final Object[] array2) { - if (!this.clear) { - super.visitFrame(n, n2, array, n3, array2); - } - } - - public void visitInsn(final int n) { - if (!this.clear) { - super.visitInsn(n); - } - } - - public void visitIntInsn(final int n, final int n2) { - if (!this.clear) { - super.visitIntInsn(n, n2); - } - } - - public void visitVarInsn(final int n, final int n2) { - if (!this.clear) { - super.visitVarInsn(n, n2); - } - } - - public void visitTypeInsn(final int n, final String s) { - if (!this.clear) { - super.visitTypeInsn(n, s); - } - } - - public void visitFieldInsn(final int n, final String s, final String s2, final String s3) { - if (!this.clear) { - super.visitFieldInsn(n, s, s2, s3); - } - } - - public void visitMethodInsn(final int n, final String s, final String s2, final String s3) { - if (!this.clear) { - super.visitMethodInsn(n, s, s2, s3); - } - } - - public void visitInvokeDynamicInsn(final String s, final String s2, final Handle handle, final Object... array) { - if (!this.clear) { - super.visitInvokeDynamicInsn(s, s2, handle, array); - } - } - - public void visitJumpInsn(final int n, final Label label) { - if (!this.clear) { - super.visitJumpInsn(n, label); - } - } - - public void visitLabel(final Label label) { - if (!this.clear) { - super.visitLabel(label); - } - } - - public void visitLdcInsn(final Object o) { - if (!this.clear) { - super.visitLdcInsn(o); - } - } - - public void visitLocalVariable(final String s, final String s2, final String s3, final Label label, final Label label2, final int n) { - if (!this.clear) { - super.visitLocalVariable(s, s2, s3, label, label2, n); - } - } - - public void visitLineNumber(final int n, final Label label) { - if (!this.clear) { - super.visitLineNumber(n, label); - } - } - - public void visitIincInsn(final int n, final int n2) { - if (!this.clear) { - super.visitIincInsn(n, n2); - } - } - - public void visitMaxs(final int n, final int n2) { - if (!this.clear) { - super.visitMaxs(n, n2); - } - } - - public void visitEnd() { - if (!this.clear) { - super.visitEnd(); - } - } -} diff --git a/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFancy.java b/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFancy.java deleted file mode 100644 index 3a71c9d..0000000 --- a/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFancy.java +++ /dev/null @@ -1,68 +0,0 @@ -package net.silentclient.client.mixin.visitors; - -import net.silentclient.client.mixin.SilentClientTransformer; -import net.silentclient.client.utils.CloudRenderer; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; - -public class RenderCloudsFancy extends ClearingMethodVisitor -{ - private boolean alreadyInjected; - - public RenderCloudsFancy(final int n, final MethodVisitor methodVisitor) { - super(n, methodVisitor); - this.alreadyInjected = false; - } - - @Override - public void visitMaxs(final int n, final int n2) { - super.visitMaxs(19, n2 - 7); - } - - @Override - public void visitLocalVariable(final String s, final String s2, final String s3, final Label label, final Label label2, final int n) { - if (n < 39) { - super.visitLocalVariable(s, s2, s3, label, label2, n); - } - } - - @Override - public void visitLineNumber(final int n, final Label label) { - if (n == 2237) { - this.clear = false; - } - else if (n == 2260 && !this.alreadyInjected) { - this.mv.visitFrame(3, 0, (Object[])null, 0, (Object[])null); - this.mv.visitVarInsn(25, 6); - this.mv.visitVarInsn(25, 5); - this.mv.visitVarInsn(23, 15); - this.mv.visitVarInsn(23, 32); - this.mv.visitVarInsn(23, 33); - this.mv.visitVarInsn(23, 19); - this.mv.visitVarInsn(23, 20); - this.mv.visitVarInsn(23, 21); - this.mv.visitVarInsn(23, 25); - this.mv.visitVarInsn(23, 26); - this.mv.visitVarInsn(23, 27); - this.mv.visitVarInsn(23, 28); - this.mv.visitVarInsn(23, 29); - this.mv.visitVarInsn(23, 30); - this.mv.visitVarInsn(23, 22); - this.mv.visitVarInsn(23, 23); - this.mv.visitVarInsn(23, 24); - this.mv.visitVarInsn(23, 34); - this.mv.visitVarInsn(23, 35); - this.mv.visitMethodInsn(184, SilentClientTransformer.getClassName(CloudRenderer.class), "renderFancyClouds", "(Lbfd;Lbfx;FFFFFFFFFFFFFFFFF)V"); - this.mv.visitLabel(new Label()); - this.alreadyInjected = true; - this.clear = true; - } - else if (n == 2264) { - this.clear = true; - } - else if (n == 2348) { - this.clear = false; - } - super.visitLineNumber(n, label); - } -} diff --git a/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFast.java b/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFast.java deleted file mode 100644 index a582f68..0000000 --- a/src/main/java/net/silentclient/client/mixin/visitors/RenderCloudsFast.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.silentclient.client.mixin.visitors; - -import net.silentclient.client.mixin.SilentClientTransformer; -import net.silentclient.client.utils.CloudRenderer; -import org.objectweb.asm.Label; -import org.objectweb.asm.MethodVisitor; - -public class RenderCloudsFast extends ClearingMethodVisitor -{ - private boolean alreadyInjected; - - public RenderCloudsFast(final int n, final MethodVisitor methodVisitor) { - super(n, methodVisitor); - this.alreadyInjected = false; - } - - @Override - public void visitMaxs(final int n, final int n2) { - super.visitMaxs(n, n2 - 2); - } - - @Override - public void visitLocalVariable(final String s, final String s2, final String s3, final Label label, final Label label2, final int n) { - if (!s.equals("var24") && !s.equals("var25")) { - super.visitLocalVariable(s, s2, s3, label, label2, n); - } - } - - @Override - public void visitLineNumber(final int n, final Label label) { - if (n == 2101) { - this.clear = true; - } - else if (n == 2103) { - this.clear = false; - } - else if (n == 2133 && !this.alreadyInjected) { - this.mv.visitVarInsn(25, 8); - this.mv.visitVarInsn(23, 22); - this.mv.visitVarInsn(23, 23); - this.mv.visitVarInsn(23, 24); - this.mv.visitVarInsn(23, 10); - this.mv.visitVarInsn(23, 11); - this.mv.visitVarInsn(23, 12); - this.mv.visitMethodInsn(184, SilentClientTransformer.getClassName(CloudRenderer.class), "renderFastClouds", "(Lbfd;FFFFFF)V"); - this.mv.visitLabel(new Label()); - this.alreadyInjected = true; - this.clear = true; - } - else if (n == 2144) { - this.clear = false; - } - super.visitLineNumber(n, label); - } -} diff --git a/src/main/java/net/silentclient/client/utils/NetworkPlayerInfoOptimization.java b/src/main/java/net/silentclient/client/utils/NetworkPlayerInfoOptimization.java new file mode 100644 index 0000000..bd25fc7 --- /dev/null +++ b/src/main/java/net/silentclient/client/utils/NetworkPlayerInfoOptimization.java @@ -0,0 +1,5 @@ +package net.silentclient.client.utils; + +public class NetworkPlayerInfoOptimization { + public static boolean isLoadingSkin = false; +} diff --git a/src/main/resources/mixins.SilentClient.json b/src/main/resources/mixins.SilentClient.json index 561bbfa..4e3cdfd 100644 --- a/src/main/resources/mixins.SilentClient.json +++ b/src/main/resources/mixins.SilentClient.json @@ -112,6 +112,7 @@ "mixins.RenderTNTPrimedMixin", "mixins.GuiDisconnectedMixin", "accessors.optifine.CustomColorsAccessor", - "accessors.optifine.ConfigAccessor" + "accessors.optifine.ConfigAccessor", + "mixins.NetworkPlayerInfoMixin" ] } \ No newline at end of file