From 3a3b5c05e859dcb4290adb6b9e0e89e5bf9d4b67 Mon Sep 17 00:00:00 2001 From: kirillsaint Date: Thu, 9 May 2024 14:24:49 +0600 Subject: [PATCH 1/2] (fix) Optimized Entity Movement --- build.gradle | 3 +- .../client/mixin/SilentClientTransformer.java | 19 +++--- .../mixin/accessors/EntityLivingAccessor.java | 9 +++ .../accessors/EntityLookHelperAccessor.java | 44 +++++++++++++ .../client/mixin/ducks/EntityAITasksExt.java | 5 ++ .../client/mixin/ducks/EntityLivingExt.java | 7 +++ .../mixin/mixins/EntityAITasksMixin.java | 19 ++++++ .../mixin/mixins/EntityLivingMixin.java | 26 ++++++++ .../mods/other/ai/FixedEntityLookHelper.java | 61 +++++++++++++++++++ .../client/mods/settings/FPSBoostMod.java | 48 +++++++++++++++ src/main/resources/mixins.SilentClient.json | 4 ++ src/main/resources/silentclient_at.cfg | 6 +- 12 files changed, 238 insertions(+), 13 deletions(-) create mode 100644 src/main/java/net/silentclient/client/mixin/accessors/EntityLivingAccessor.java create mode 100644 src/main/java/net/silentclient/client/mixin/accessors/EntityLookHelperAccessor.java create mode 100644 src/main/java/net/silentclient/client/mixin/ducks/EntityAITasksExt.java create mode 100644 src/main/java/net/silentclient/client/mixin/ducks/EntityLivingExt.java create mode 100644 src/main/java/net/silentclient/client/mixin/mixins/EntityAITasksMixin.java create mode 100644 src/main/java/net/silentclient/client/mixin/mixins/EntityLivingMixin.java create mode 100644 src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java diff --git a/build.gradle b/build.gradle index 0314c48..cbd2afd 100644 --- a/build.gradle +++ b/build.gradle @@ -93,7 +93,8 @@ jar { "MixinConfigs": 'mixins.SilentClient.json', "TweakClass": "net.silentclient.client.mixin.SilentClientTweaker", "TweakOrder": 0, - "Manifest-Version": 1.0 + "Manifest-Version": 1.0, + 'FMLAT': 'silentclient_at.cfg' ) configurations.embed.each { dep -> diff --git a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java index 22179c7..e121729 100644 --- a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java +++ b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java @@ -1,10 +1,7 @@ package net.silentclient.client.mixin; import net.minecraft.launchwrapper.IClassTransformer; -import net.silentclient.client.Client; -import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.ClassWriter; import org.objectweb.asm.MethodVisitor; import java.lang.reflect.Modifier; @@ -18,14 +15,14 @@ public class SilentClientTransformer implements IClassTransformer { return null; } - if(transformedName.equals("bfl$e") || transformedName.equals("bfl$r") || transformedName.equals("bnm$a") || transformedName.equals("ajd$a") || transformedName.equals("bha$a")) { - Client.logger.info("Transforming class: " + transformedName); - ClassReader classreader = new ClassReader(bytes); - ClassWriter classwriter = new ClassWriter(1); - SilentClientTransformer.AccessTransformerVisitor visitor = new SilentClientTransformer.AccessTransformerVisitor(262144, classwriter); - classreader.accept(visitor, 0); - return classwriter.toByteArray(); - } +// if(transformedName.equals("bfl$e") || transformedName.equals("bfl$r") || transformedName.equals("bnm$a") || transformedName.equals("ajd$a") || transformedName.equals("bha$a")) { +// Client.logger.info("Transforming class: " + transformedName); +// ClassReader classreader = new ClassReader(bytes); +// ClassWriter classwriter = new ClassWriter(1); +// SilentClientTransformer.AccessTransformerVisitor visitor = new SilentClientTransformer.AccessTransformerVisitor(262144, classwriter); +// classreader.accept(visitor, 0); +// return classwriter.toByteArray(); +// } return bytes; } diff --git a/src/main/java/net/silentclient/client/mixin/accessors/EntityLivingAccessor.java b/src/main/java/net/silentclient/client/mixin/accessors/EntityLivingAccessor.java new file mode 100644 index 0000000..a6a208b --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/accessors/EntityLivingAccessor.java @@ -0,0 +1,9 @@ +package net.silentclient.client.mixin.accessors; + +import net.minecraft.entity.EntityLiving; +import org.spongepowered.asm.mixin.Mixin; + +@Mixin(value={EntityLiving.class}) +public interface EntityLivingAccessor { + +} diff --git a/src/main/java/net/silentclient/client/mixin/accessors/EntityLookHelperAccessor.java b/src/main/java/net/silentclient/client/mixin/accessors/EntityLookHelperAccessor.java new file mode 100644 index 0000000..c6bfebe --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/accessors/EntityLookHelperAccessor.java @@ -0,0 +1,44 @@ +package net.silentclient.client.mixin.accessors; + +import net.minecraft.entity.ai.EntityLookHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(value={EntityLookHelper.class}) +public interface EntityLookHelperAccessor { + @Accessor(value="deltaLookYaw") + public float getDeltaLookYaw(); + + @Accessor(value="deltaLookYaw") + public void setDeltaLookYaw(float var1); + + @Accessor(value="deltaLookPitch") + public float getDeltaLookPitch(); + + @Accessor(value="deltaLookPitch") + public void setDeltaLookPitch(float var1); + + @Accessor(value="isLooking") + public boolean isLooking(); + + @Accessor(value="isLooking") + public void setLooking(boolean var1); + + @Accessor(value="posX") + public double getPosX(); + + @Accessor(value="posX") + public void setPosX(double var1); + + @Accessor(value="posY") + public double getPosY(); + + @Accessor(value="posY") + public void setPosY(double var1); + + @Accessor(value="posZ") + public double getPosZ(); + + @Accessor(value="posZ") + public void setPosZ(double var1); +} diff --git a/src/main/java/net/silentclient/client/mixin/ducks/EntityAITasksExt.java b/src/main/java/net/silentclient/client/mixin/ducks/EntityAITasksExt.java new file mode 100644 index 0000000..eee3927 --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/ducks/EntityAITasksExt.java @@ -0,0 +1,5 @@ +package net.silentclient.client.mixin.ducks; + +public interface EntityAITasksExt { + Object client$getTaskEntries(); +} diff --git a/src/main/java/net/silentclient/client/mixin/ducks/EntityLivingExt.java b/src/main/java/net/silentclient/client/mixin/ducks/EntityLivingExt.java new file mode 100644 index 0000000..f7e89f1 --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/ducks/EntityLivingExt.java @@ -0,0 +1,7 @@ +package net.silentclient.client.mixin.ducks; + +public interface EntityLivingExt { + void client$setLookHelper(Object var1); + + Object client$getTasks(); +} diff --git a/src/main/java/net/silentclient/client/mixin/mixins/EntityAITasksMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/EntityAITasksMixin.java new file mode 100644 index 0000000..89a5b96 --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/mixins/EntityAITasksMixin.java @@ -0,0 +1,19 @@ +package net.silentclient.client.mixin.mixins; + +import net.minecraft.entity.ai.EntityAITasks; +import net.silentclient.client.mixin.ducks.EntityAITasksExt; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.List; + +@Mixin(EntityAITasks.class) +public class EntityAITasksMixin implements EntityAITasksExt { + + @Shadow private List taskEntries; + + @Override + public Object client$getTaskEntries() { + return this.taskEntries; + } +} diff --git a/src/main/java/net/silentclient/client/mixin/mixins/EntityLivingMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/EntityLivingMixin.java new file mode 100644 index 0000000..c0fb395 --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/mixins/EntityLivingMixin.java @@ -0,0 +1,26 @@ +package net.silentclient.client.mixin.mixins; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.ai.EntityLookHelper; +import net.silentclient.client.mixin.ducks.EntityLivingExt; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(EntityLiving.class) +public class EntityLivingMixin implements EntityLivingExt { + @Shadow private EntityLookHelper lookHelper; + + @Shadow @Final protected EntityAITasks tasks; + + @Override + public void client$setLookHelper(Object var1) { + this.lookHelper = (EntityLookHelper) var1; + } + + @Override + public Object client$getTasks() { + return this.tasks; + } +} diff --git a/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java b/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java new file mode 100644 index 0000000..95ad630 --- /dev/null +++ b/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java @@ -0,0 +1,61 @@ +package net.silentclient.client.mods.other.ai; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.ai.EntityLookHelper; +import net.minecraft.util.MathHelper; +import net.silentclient.client.mixin.accessors.EntityLookHelperAccessor; + +/** + * Created by Dark on 7/20/2015. + */ +public class FixedEntityLookHelper extends EntityLookHelper +{ + public FixedEntityLookHelper(EntityLiving entity) + { + super(entity); + } + + @Override + public void onUpdateLook() { + this.entity.rotationPitch = 0.0f; + if (((EntityLookHelperAccessor)((Object)this)).isLooking()) { + ((EntityLookHelperAccessor)((Object)this)).setLooking(false); + double d0 = ((EntityLookHelperAccessor)((Object)this)).getPosX() - this.entity.posX; + double d1 = ((EntityLookHelperAccessor)((Object)this)).getPosY() - (this.entity.posY + (double)this.entity.getEyeHeight()); + double d2 = ((EntityLookHelperAccessor)((Object)this)).getPosZ() - this.entity.posZ; + double d3 = MathHelper.sqrt_double(d0 * d0 + d2 * d2); + float f = (float)((double)FixedEntityLookHelper.tan(d2, d0) * 180.0 / Math.PI) - 90.0f; + float f1 = (float)(-((double)FixedEntityLookHelper.tan(d1, d3) * 180.0 / Math.PI)); + this.entity.rotationPitch = this.updateRotation(this.entity.rotationPitch, f1, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookPitch()); + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, f, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookYaw()); + } else { + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, this.entity.renderYawOffset, 10.0f); + } + float f2 = MathHelper.wrapAngleTo180_float(this.entity.rotationYawHead - this.entity.renderYawOffset); + if (!this.entity.getNavigator().noPath()) { + if (f2 < -75.0f) { + this.entity.rotationYawHead = this.entity.renderYawOffset - 75.0f; + } + if (f2 > 75.0f) { + this.entity.rotationYawHead = this.entity.renderYawOffset + 75.0f; + } + } + } + + private float updateRotation(float a, float b, float c) { + float f = MathHelper.wrapAngleTo180_float(b - a); + if (f > c) { + f = c; + } + if (f < -c) { + f = -c; + } + return a + f; + } + + + public static float tan(double a, double b) + { + return FastTrig.atan2(a, b); + } +} \ No newline at end of file diff --git a/src/main/java/net/silentclient/client/mods/settings/FPSBoostMod.java b/src/main/java/net/silentclient/client/mods/settings/FPSBoostMod.java index a8fe448..278b428 100644 --- a/src/main/java/net/silentclient/client/mods/settings/FPSBoostMod.java +++ b/src/main/java/net/silentclient/client/mods/settings/FPSBoostMod.java @@ -3,16 +3,31 @@ package net.silentclient.client.mods.settings; import com.google.common.collect.Sets; import net.minecraft.block.Block; import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAITasks; +import net.minecraft.entity.ai.EntityAIWatchClosest; +import net.minecraft.entity.ai.EntityLookHelper; import net.minecraft.init.Blocks; import net.silentclient.client.Client; import net.silentclient.client.event.EventManager; +import net.silentclient.client.event.EventTarget; +import net.silentclient.client.event.impl.EntityJoinLevelEvent; +import net.silentclient.client.mixin.accessors.EntityLookHelperAccessor; +import net.silentclient.client.mixin.ducks.EntityAITasksExt; +import net.silentclient.client.mixin.ducks.EntityLivingExt; import net.silentclient.client.mods.Mod; import net.silentclient.client.mods.ModCategory; import net.silentclient.client.mods.Setting; +import net.silentclient.client.mods.other.ai.FastTrig; +import net.silentclient.client.mods.other.ai.FixedEntityLookHelper; import net.silentclient.client.utils.HUDCaching; import net.silentclient.client.utils.NotificationUtils; import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Set; public class FPSBoostMod extends Mod { @@ -82,9 +97,42 @@ public class FPSBoostMod extends Mod { this.addBooleanSetting("Check glError",this, false); // ready this.addBooleanSetting("Do memory debug",this, true); // ready EventManager.register(new HUDCaching()); + FastTrig.init(); } + @EventTarget + public void onJoinWorldEvent(EntityJoinLevelEvent event) { + if(!Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "Optimized Entity Movement").getValBoolean()) { + return; + } + Entity entity = event.getEntity(); + if (entity instanceof EntityLiving) { + EntityLiving living = (EntityLiving)entity; + Iterator it = ((List) ((EntityAITasksExt) ((EntityLivingExt)((Object)living)).client$getTasks()).client$getTaskEntries()).iterator(); + while (it.hasNext()) { + EntityAITasks.EntityAITaskEntry obj = it.next(); + if (!(obj instanceof EntityAITasks.EntityAITaskEntry)) continue; + EntityAITasks.EntityAITaskEntry task = obj; + if (task.action instanceof EntityAIWatchClosest) { + it.remove(); + continue; + } + if (!(task.action instanceof EntityAILookIdle)) continue; + it.remove(); + } + if (living.getLookHelper() == null || living.getLookHelper().getClass() == EntityLookHelper.class) { + EntityLookHelper oldHelper = living.getLookHelper(); + ((EntityLivingExt)((Object)living)).client$setLookHelper(new FixedEntityLookHelper(living)); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setPosX(((EntityLookHelperAccessor)((Object)oldHelper)).getPosX()); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setPosY(((EntityLookHelperAccessor)((Object)oldHelper)).getPosY()); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setPosZ(((EntityLookHelperAccessor)((Object)oldHelper)).getPosZ()); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setLooking(((EntityLookHelperAccessor)((Object)oldHelper)).isLooking()); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setDeltaLookPitch(((EntityLookHelperAccessor)((Object)oldHelper)).getDeltaLookPitch()); + ((EntityLookHelperAccessor)((Object)living.getLookHelper())).setDeltaLookYaw(((EntityLookHelperAccessor)((Object)oldHelper)).getDeltaLookYaw()); + } + } + } public static boolean basicEnabled() { return Client.getInstance().getSettingsManager().getSettingByClass(FPSBoostMod.class, "FPS Boost").getValBoolean(); diff --git a/src/main/resources/mixins.SilentClient.json b/src/main/resources/mixins.SilentClient.json index 9a232d5..f049495 100644 --- a/src/main/resources/mixins.SilentClient.json +++ b/src/main/resources/mixins.SilentClient.json @@ -4,6 +4,8 @@ "refmap": "mixins.SilentClient.refmap.json", "mixins": [ "accessors.EntityArrowAccessor", + "accessors.EntityLivingAccessor", + "accessors.EntityLookHelperAccessor", "accessors.FontRendererAccessor", "accessors.GuiAccessor", "accessors.GuiInGameAccessor", @@ -32,8 +34,10 @@ "mixins.ChunkRenderDispatcherMixin", "mixins.CommandHandlerMixin", "mixins.EffectRendererMixin", + "mixins.EntityAITasksMixin", "mixins.EntityFXMixin", "mixins.EntityLivingBaseMixin", + "mixins.EntityLivingMixin", "mixins.EntityMixin", "mixins.EntityOtherPlayerMPMixin", "mixins.EntityPacketsMixin", diff --git a/src/main/resources/silentclient_at.cfg b/src/main/resources/silentclient_at.cfg index 6cf76b7..32e33df 100644 --- a/src/main/resources/silentclient_at.cfg +++ b/src/main/resources/silentclient_at.cfg @@ -10,4 +10,8 @@ public net.minecraft.client.renderer.tileentity.TileEntityBannerRenderer$TimedBa public net.minecraft.client.renderer.tileentity.TileEntityBannerRenderer$TimedBannerTexture ()V # constructor # BlockRedstoneTorch -public net.minecraft.block.BlockRedstoneTorch$Toggle \ No newline at end of file +public net.minecraft.block.BlockRedstoneTorch$Toggle + +# EntityAITasks +public net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry +public net.minecraft.entity.ai.EntityLookHelper field_75659_a #EntityLiving entity; \ No newline at end of file From 0a30dec288d262e2d29581482761a22cad2ca375 Mon Sep 17 00:00:00 2001 From: kirillsaint Date: Thu, 9 May 2024 14:42:41 +0600 Subject: [PATCH 2/2] (fix) transformer issue --- build.gradle | 3 +-- .../client/mixin/SilentClientTransformer.java | 22 +++++++++--------- .../mixin/ducks/EntityLookHelperExt.java | 5 ++++ .../mixin/mixins/EntityLookHelperMixin.java | 17 ++++++++++++++ .../mods/other/ai/FixedEntityLookHelper.java | 23 ++++++++++--------- src/main/resources/mixins.SilentClient.json | 1 + src/main/resources/silentclient_at.cfg | 3 +-- 7 files changed, 48 insertions(+), 26 deletions(-) create mode 100644 src/main/java/net/silentclient/client/mixin/ducks/EntityLookHelperExt.java create mode 100644 src/main/java/net/silentclient/client/mixin/mixins/EntityLookHelperMixin.java diff --git a/build.gradle b/build.gradle index cbd2afd..0314c48 100644 --- a/build.gradle +++ b/build.gradle @@ -93,8 +93,7 @@ jar { "MixinConfigs": 'mixins.SilentClient.json', "TweakClass": "net.silentclient.client.mixin.SilentClientTweaker", "TweakOrder": 0, - "Manifest-Version": 1.0, - 'FMLAT': 'silentclient_at.cfg' + "Manifest-Version": 1.0 ) configurations.embed.each { dep -> diff --git a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java index e121729..5323532 100644 --- a/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java +++ b/src/main/java/net/silentclient/client/mixin/SilentClientTransformer.java @@ -1,8 +1,8 @@ package net.silentclient.client.mixin; import net.minecraft.launchwrapper.IClassTransformer; -import org.objectweb.asm.ClassVisitor; -import org.objectweb.asm.MethodVisitor; +import net.silentclient.client.Client; +import org.objectweb.asm.*; import java.lang.reflect.Modifier; @@ -15,14 +15,14 @@ public class SilentClientTransformer implements IClassTransformer { return null; } -// if(transformedName.equals("bfl$e") || transformedName.equals("bfl$r") || transformedName.equals("bnm$a") || transformedName.equals("ajd$a") || transformedName.equals("bha$a")) { -// Client.logger.info("Transforming class: " + transformedName); -// ClassReader classreader = new ClassReader(bytes); -// ClassWriter classwriter = new ClassWriter(1); -// SilentClientTransformer.AccessTransformerVisitor visitor = new SilentClientTransformer.AccessTransformerVisitor(262144, classwriter); -// classreader.accept(visitor, 0); -// return classwriter.toByteArray(); -// } + if(transformedName.equals("bfl$e") || transformedName.equals("bfl$r") || transformedName.equals("bnm$a") || transformedName.equals("ajd$a") || transformedName.equals("bha$a") || transformedName.equals("re$a")) { + Client.logger.info("Transforming class: " + transformedName); + ClassReader classreader = new ClassReader(bytes); + ClassWriter classwriter = new ClassWriter(1); + SilentClientTransformer.AccessTransformerVisitor visitor = new AccessTransformerVisitor(262144, classwriter); + classreader.accept(visitor, 0); + return classwriter.toByteArray(); + } return bytes; } @@ -31,7 +31,7 @@ public class SilentClientTransformer implements IClassTransformer { return clazz.getName().replace(".", "/"); } - public class AccessTransformerVisitor extends ClassVisitor { + public static class AccessTransformerVisitor extends ClassVisitor { public AccessTransformerVisitor(int api, ClassVisitor cv) { super(api, cv); diff --git a/src/main/java/net/silentclient/client/mixin/ducks/EntityLookHelperExt.java b/src/main/java/net/silentclient/client/mixin/ducks/EntityLookHelperExt.java new file mode 100644 index 0000000..d15e68c --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/ducks/EntityLookHelperExt.java @@ -0,0 +1,5 @@ +package net.silentclient.client.mixin.ducks; + +public interface EntityLookHelperExt { + Object client$getEntity(); +} diff --git a/src/main/java/net/silentclient/client/mixin/mixins/EntityLookHelperMixin.java b/src/main/java/net/silentclient/client/mixin/mixins/EntityLookHelperMixin.java new file mode 100644 index 0000000..d5cee8a --- /dev/null +++ b/src/main/java/net/silentclient/client/mixin/mixins/EntityLookHelperMixin.java @@ -0,0 +1,17 @@ +package net.silentclient.client.mixin.mixins; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.ai.EntityLookHelper; +import net.silentclient.client.mixin.ducks.EntityLookHelperExt; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(EntityLookHelper.class) +public class EntityLookHelperMixin implements EntityLookHelperExt { + @Shadow private EntityLiving entity; + + @Override + public Object client$getEntity() { + return this.entity; + } +} diff --git a/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java b/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java index 95ad630..df5d3e1 100644 --- a/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java +++ b/src/main/java/net/silentclient/client/mods/other/ai/FixedEntityLookHelper.java @@ -4,6 +4,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.ai.EntityLookHelper; import net.minecraft.util.MathHelper; import net.silentclient.client.mixin.accessors.EntityLookHelperAccessor; +import net.silentclient.client.mixin.ducks.EntityLookHelperExt; /** * Created by Dark on 7/20/2015. @@ -17,27 +18,27 @@ public class FixedEntityLookHelper extends EntityLookHelper @Override public void onUpdateLook() { - this.entity.rotationPitch = 0.0f; + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationPitch = 0.0f; if (((EntityLookHelperAccessor)((Object)this)).isLooking()) { ((EntityLookHelperAccessor)((Object)this)).setLooking(false); - double d0 = ((EntityLookHelperAccessor)((Object)this)).getPosX() - this.entity.posX; - double d1 = ((EntityLookHelperAccessor)((Object)this)).getPosY() - (this.entity.posY + (double)this.entity.getEyeHeight()); - double d2 = ((EntityLookHelperAccessor)((Object)this)).getPosZ() - this.entity.posZ; + double d0 = ((EntityLookHelperAccessor)((Object)this)).getPosX() - ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).posX; + double d1 = ((EntityLookHelperAccessor)((Object)this)).getPosY() - (((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).posY + (double)((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).getEyeHeight()); + double d2 = ((EntityLookHelperAccessor)((Object)this)).getPosZ() - ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).posZ; double d3 = MathHelper.sqrt_double(d0 * d0 + d2 * d2); float f = (float)((double)FixedEntityLookHelper.tan(d2, d0) * 180.0 / Math.PI) - 90.0f; float f1 = (float)(-((double)FixedEntityLookHelper.tan(d1, d3) * 180.0 / Math.PI)); - this.entity.rotationPitch = this.updateRotation(this.entity.rotationPitch, f1, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookPitch()); - this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, f, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookYaw()); + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationPitch = this.updateRotation(((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationPitch, f1, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookPitch()); + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead = this.updateRotation(((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead, f, ((EntityLookHelperAccessor)((Object)this)).getDeltaLookYaw()); } else { - this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, this.entity.renderYawOffset, 10.0f); + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead = this.updateRotation(((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead, ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).renderYawOffset, 10.0f); } - float f2 = MathHelper.wrapAngleTo180_float(this.entity.rotationYawHead - this.entity.renderYawOffset); - if (!this.entity.getNavigator().noPath()) { + float f2 = MathHelper.wrapAngleTo180_float(((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead - ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).renderYawOffset); + if (!((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).getNavigator().noPath()) { if (f2 < -75.0f) { - this.entity.rotationYawHead = this.entity.renderYawOffset - 75.0f; + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead = ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).renderYawOffset - 75.0f; } if (f2 > 75.0f) { - this.entity.rotationYawHead = this.entity.renderYawOffset + 75.0f; + ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).rotationYawHead = ((EntityLiving) ((EntityLookHelperExt) this).client$getEntity()).renderYawOffset + 75.0f; } } } diff --git a/src/main/resources/mixins.SilentClient.json b/src/main/resources/mixins.SilentClient.json index f049495..e9bf42c 100644 --- a/src/main/resources/mixins.SilentClient.json +++ b/src/main/resources/mixins.SilentClient.json @@ -38,6 +38,7 @@ "mixins.EntityFXMixin", "mixins.EntityLivingBaseMixin", "mixins.EntityLivingMixin", + "mixins.EntityLookHelperMixin", "mixins.EntityMixin", "mixins.EntityOtherPlayerMPMixin", "mixins.EntityPacketsMixin", diff --git a/src/main/resources/silentclient_at.cfg b/src/main/resources/silentclient_at.cfg index 32e33df..febc1b8 100644 --- a/src/main/resources/silentclient_at.cfg +++ b/src/main/resources/silentclient_at.cfg @@ -13,5 +13,4 @@ public net.minecraft.client.renderer.tileentity.TileEntityBannerRenderer$TimedBa public net.minecraft.block.BlockRedstoneTorch$Toggle # EntityAITasks -public net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry -public net.minecraft.entity.ai.EntityLookHelper field_75659_a #EntityLiving entity; \ No newline at end of file +public net.minecraft.entity.ai.EntityAITasks$EntityAITaskEntry \ No newline at end of file