From 547265ec2ea1807db7033747806ad4f4d03c7072 Mon Sep 17 00:00:00 2001 From: Mixces Date: Sat, 18 Mar 2023 12:21:47 -0500 Subject: [PATCH 01/12] ajshdkajsd --- .../mixin/mod/V1_7VisualsModMixins.java | 176 +++++++++++------- .../client/mod/impl/V1_7VisualsMod.java | 48 ++--- 2 files changed, 132 insertions(+), 92 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 2ead2c49..7f8d3986 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -18,108 +18,156 @@ package io.github.solclient.client.mixin.mod; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - +import com.mojang.blaze3d.platform.GlStateManager; import io.github.solclient.client.mod.impl.V1_7VisualsMod; import io.github.solclient.client.util.MinecraftUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; +import net.minecraft.client.render.entity.model.BiPedModel; import net.minecraft.client.render.item.HeldItemRenderer; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.UseAction; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public abstract class V1_7VisualsModMixins { - @Mixin(HeldItemRenderer.class) + @Mixin(ItemRenderer.class) public static abstract class ItemRendererMixin { - @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) - public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { - applyEquipAndSwingOffset(equipProgress, - swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine - ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) - : swingProgress); - } + @Unique + private LivingEntity lastEntityToRenderFor = null; - @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) - public void oldBlocking(CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { - V1_7VisualsMod.oldBlocking(); - } + @Final + private final MinecraftClient mc = MinecraftClient.getInstance(); + + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At("HEAD")) + public void renderItemModelForEntity(ItemStack stack, LivingEntity entity, ModelTransformation.Mode mode, CallbackInfo ci) { + lastEntityToRenderFor = entity; } - @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) - public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { - callback.cancel(); - V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); + + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/render/item/ItemRenderer;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;)V")) + public void renderItemModelForEntity_renderItem(ItemStack stack, BakedModel model, ModelTransformation.Mode transformation, CallbackInfo ci) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && + transformation == ModelTransformation.Mode.THIRD_PERSON && lastEntityToRenderFor instanceof PlayerEntity && + mc.player.getStackInHand() != null && mc.player.getItemUseTicks() > 0 && + mc.player.getStackInHand().getUseAction() == UseAction.BLOCK) { + GlStateManager.translate(-0.041, -0.095f, 0.212f); + GlStateManager.rotate(80, 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(20, 0.0f, 1.0f, 0.0f); + if (MinecraftClient.getInstance().player.isSneaking()) { + GlStateManager.translate(-0.045, -0.0135f, 0.03); + } } } - @Shadow - protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); + @Mixin(HeldItemRenderer.class) + public static abstract class HeldItemRendererMixin { - @Shadow - private @Final MinecraftClient client; + @Shadow + protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); - @Shadow - private ItemStack mainHand; + @Shadow + private @Final MinecraftClient client; - } + @Shadow + private ItemStack mainHand; - @Mixin(GameRenderer.class) - public static abstract class GameRendererMixin { + @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) + public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { + applyEquipAndSwingOffset(equipProgress, + swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) + : swingProgress); + } - private float eyeHeightSubtractor; - private long lastEyeHeightUpdate; + @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) + public void oldBlocking(CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { + GlStateManager.scale(0.83F, 0.88F, 0.85F); + GlStateManager.translate(-0.3F, 0.10F, -0.01F); + } + } - // this code makes me long for spaghetti - @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) - public float smoothSneaking(Entity entity) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { - PlayerEntity player = (PlayerEntity) entity; - float height = player.getEyeHeight(); - if (player.isSneaking()) { - height += 0.08F; + @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) + public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { + callback.cancel(); + V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); } - float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; - long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; - lastEyeHeightUpdate = System.currentTimeMillis(); - if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor += sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; + } + } + + @Mixin(GameRenderer.class) + public static abstract class GameRendererMixin { + + private float eyeHeightSubtractor; + private long lastEyeHeightUpdate; + + @Shadow + private /* why you not final :( */ MinecraftClient client; + + // this code makes me long for spaghetti + @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) + public float smoothSneaking(Entity entity) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) entity; + float height = player.getEyeHeight(); + if (player.isSneaking()) { + height += 0.08F; } - } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor -= sinceLastUpdate / 500f; + float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; + long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; + lastEyeHeightUpdate = System.currentTimeMillis(); if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; + eyeHeightSubtractor += sinceLastUpdate / 500f; + if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor = actualEyeHeightSubtractor; + } + } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor -= sinceLastUpdate / 500f; + if (actualEyeHeightSubtractor > eyeHeightSubtractor) { + eyeHeightSubtractor = actualEyeHeightSubtractor; + } } + return height - eyeHeightSubtractor; } - return height - eyeHeightSubtractor; + return entity.getEyeHeight(); } - return entity.getEyeHeight(); } - @Shadow - private /* why you not final :( */ MinecraftClient client; + @Mixin(ArmorFeatureRenderer.class) + public static class LayerArmorBaseMixin { - } + @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) + public void oldArmour(CallbackInfoReturnable callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) + callback.setReturnValue(true); + } + } - @Mixin(ArmorFeatureRenderer.class) - public static class LayerArmorBaseMixin { + @Mixin(BiPedModel.class) + public static class BiPedModelMixin { - @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) - public void oldArmour(CallbackInfoReturnable callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) - callback.setReturnValue(true); + @ModifyConstant(method = "setAngles", constant = @Constant(floatValue = -0.5235988F)) + private float cancelRotation(float value) { + return (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) ? 0.0F : value; + } } - } - } diff --git a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java index 6cb397b8..06b9e183 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java +++ b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java @@ -20,14 +20,16 @@ import com.google.gson.annotations.Expose; import com.mojang.blaze3d.platform.GlStateManager; - import io.github.solclient.client.event.EventHandler; -import io.github.solclient.client.event.impl.*; +import io.github.solclient.client.event.impl.PreTickEvent; +import io.github.solclient.client.event.impl.TransformFirstPersonItemEvent; import io.github.solclient.client.mixin.client.LivingEntityAccessor; -import io.github.solclient.client.mod.*; +import io.github.solclient.client.mod.ModCategory; import io.github.solclient.client.mod.option.annotation.Option; import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.item.*; +import net.minecraft.item.BowItem; +import net.minecraft.item.FishingRodItem; +import net.minecraft.item.ItemStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.MathHelper; @@ -40,19 +42,20 @@ public class V1_7VisualsMod extends SolClientMod { public boolean useAndMine = true; @Expose @Option - private boolean particles = true; + private final boolean bow = true; @Expose @Option - public boolean blocking = true; + private final boolean rod = true; @Expose @Option - public boolean eatingAndDrinking = true; + private final boolean particles = true; @Expose @Option - private boolean bow = true; + public boolean blocking = true; @Expose @Option - private boolean rod = true; + public boolean eatingAndDrinking = true; + @Expose @Option public boolean armourDamage = true; @@ -98,17 +101,14 @@ public boolean isEnabledByDefault() { @EventHandler public void onTick(PreTickEvent event) { - if (mc.player != null && mc.player.abilities.allowModifyWorld && isEnabled() && useAndMine && mc.result != null - && mc.result.type == BlockHitResult.Type.BLOCK && mc.player != null && mc.options.attackKey.isPressed() - && mc.options.useKey.isPressed() && mc.player.getItemUseTicks() > 0) { - if ((!mc.player.handSwinging - || mc.player.handSwingTicks >= ((LivingEntityAccessor) mc.player).getArmSwingAnimationEnd() - / 2 + if (mc.player != null && isEnabled() && useAndMine && mc.player.abilities.allowModifyWorld && + mc.result != null && mc.result.type == BlockHitResult.Type.BLOCK && mc.options.attackKey.isPressed() && + mc.options.useKey.isPressed() && mc.player.getItemUseTicks() > 0) { + if ((!mc.player.handSwinging || mc.player.handSwingTicks >= ((LivingEntityAccessor) mc.player).getArmSwingAnimationEnd() / 2 || mc.player.handSwingTicks < 0)) { mc.player.handSwingTicks = -1; mc.player.handSwinging = true; } - if (particles) { mc.particleManager.addBlockBreakingParticles(mc.result.getBlockPos(), mc.result.direction); } @@ -117,10 +117,6 @@ public void onTick(PreTickEvent event) { @EventHandler public void onItemTransform(TransformFirstPersonItemEvent event) { - if (!(bow || rod)) { - return; - } - // https://github.com/sp614x/optifine/issues/2098 if (mc.player.isUsingItem() && event.itemToRender.getItem() instanceof BowItem) { if (bow) @@ -128,11 +124,13 @@ public void onItemTransform(TransformFirstPersonItemEvent event) { } else if ((event.itemToRender.getItem() instanceof FishingRodItem) && rod) { GlStateManager.translate(0.08f, -0.027f, -0.33f); GlStateManager.scale(0.93f, 1.0f, 1.0f); + } else if (event.itemToRender.getItem() != null) { + GlStateManager.rotate(-1, 0.0f, 1.0f, 0.0f); + GlStateManager.translate(-0.027, 0.002, 0.0005); } } - public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntity clientPlayer, - float partialTicks) { + public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntity clientPlayer, float partialTicks) { float var14 = clientPlayer.getItemUseTicks() - partialTicks + 1.0F; float var15 = 1.0F - var14 / itemToRender.getMaxUseTime(); float var16 = 1.0F - var15; @@ -150,10 +148,4 @@ public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntit GlStateManager.translate(0, -0.0F, 0.06F); GlStateManager.rotate(-4F, 1, 0, 0); } - - public static void oldBlocking() { - GlStateManager.scale(0.83F, 0.88F, 0.85F); - GlStateManager.translate(-0.3F, 0.1F, 0.0F); - } - } From f8644620b7040c5d0e78be5153379c6bd48dd767 Mon Sep 17 00:00:00 2001 From: Mixces Date: Sat, 18 Mar 2023 12:21:47 -0500 Subject: [PATCH 02/12] ajshdkajsd --- .../mixin/mod/V1_7VisualsModMixins.java | 176 +++++++++++------- .../client/mod/impl/V1_7VisualsMod.java | 48 ++--- 2 files changed, 132 insertions(+), 92 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 2ead2c49..7f8d3986 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -18,108 +18,156 @@ package io.github.solclient.client.mixin.mod; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.*; - +import com.mojang.blaze3d.platform.GlStateManager; import io.github.solclient.client.mod.impl.V1_7VisualsMod; import io.github.solclient.client.util.MinecraftUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; +import net.minecraft.client.render.entity.model.BiPedModel; import net.minecraft.client.render.item.HeldItemRenderer; +import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; +import net.minecraft.util.UseAction; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public abstract class V1_7VisualsModMixins { - @Mixin(HeldItemRenderer.class) + @Mixin(ItemRenderer.class) public static abstract class ItemRendererMixin { - @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) - public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { - applyEquipAndSwingOffset(equipProgress, - swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine - ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) - : swingProgress); - } + @Unique + private LivingEntity lastEntityToRenderFor = null; - @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) - public void oldBlocking(CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { - V1_7VisualsMod.oldBlocking(); - } + @Final + private final MinecraftClient mc = MinecraftClient.getInstance(); + + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At("HEAD")) + public void renderItemModelForEntity(ItemStack stack, LivingEntity entity, ModelTransformation.Mode mode, CallbackInfo ci) { + lastEntityToRenderFor = entity; } - @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) - public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { - callback.cancel(); - V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); + + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At(value = "INVOKE", + target = "Lnet/minecraft/client/render/item/ItemRenderer;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;)V")) + public void renderItemModelForEntity_renderItem(ItemStack stack, BakedModel model, ModelTransformation.Mode transformation, CallbackInfo ci) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && + transformation == ModelTransformation.Mode.THIRD_PERSON && lastEntityToRenderFor instanceof PlayerEntity && + mc.player.getStackInHand() != null && mc.player.getItemUseTicks() > 0 && + mc.player.getStackInHand().getUseAction() == UseAction.BLOCK) { + GlStateManager.translate(-0.041, -0.095f, 0.212f); + GlStateManager.rotate(80, 1.0f, 0.0f, 0.0f); + GlStateManager.rotate(20, 0.0f, 1.0f, 0.0f); + if (MinecraftClient.getInstance().player.isSneaking()) { + GlStateManager.translate(-0.045, -0.0135f, 0.03); + } } } - @Shadow - protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); + @Mixin(HeldItemRenderer.class) + public static abstract class HeldItemRendererMixin { - @Shadow - private @Final MinecraftClient client; + @Shadow + protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); - @Shadow - private ItemStack mainHand; + @Shadow + private @Final MinecraftClient client; - } + @Shadow + private ItemStack mainHand; - @Mixin(GameRenderer.class) - public static abstract class GameRendererMixin { + @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) + public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { + applyEquipAndSwingOffset(equipProgress, + swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) + : swingProgress); + } - private float eyeHeightSubtractor; - private long lastEyeHeightUpdate; + @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) + public void oldBlocking(CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { + GlStateManager.scale(0.83F, 0.88F, 0.85F); + GlStateManager.translate(-0.3F, 0.10F, -0.01F); + } + } - // this code makes me long for spaghetti - @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) - public float smoothSneaking(Entity entity) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { - PlayerEntity player = (PlayerEntity) entity; - float height = player.getEyeHeight(); - if (player.isSneaking()) { - height += 0.08F; + @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) + public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { + callback.cancel(); + V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); } - float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; - long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; - lastEyeHeightUpdate = System.currentTimeMillis(); - if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor += sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; + } + } + + @Mixin(GameRenderer.class) + public static abstract class GameRendererMixin { + + private float eyeHeightSubtractor; + private long lastEyeHeightUpdate; + + @Shadow + private /* why you not final :( */ MinecraftClient client; + + // this code makes me long for spaghetti + @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) + public float smoothSneaking(Entity entity) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) entity; + float height = player.getEyeHeight(); + if (player.isSneaking()) { + height += 0.08F; } - } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor -= sinceLastUpdate / 500f; + float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; + long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; + lastEyeHeightUpdate = System.currentTimeMillis(); if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; + eyeHeightSubtractor += sinceLastUpdate / 500f; + if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor = actualEyeHeightSubtractor; + } + } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor -= sinceLastUpdate / 500f; + if (actualEyeHeightSubtractor > eyeHeightSubtractor) { + eyeHeightSubtractor = actualEyeHeightSubtractor; + } } + return height - eyeHeightSubtractor; } - return height - eyeHeightSubtractor; + return entity.getEyeHeight(); } - return entity.getEyeHeight(); } - @Shadow - private /* why you not final :( */ MinecraftClient client; + @Mixin(ArmorFeatureRenderer.class) + public static class LayerArmorBaseMixin { - } + @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) + public void oldArmour(CallbackInfoReturnable callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) + callback.setReturnValue(true); + } + } - @Mixin(ArmorFeatureRenderer.class) - public static class LayerArmorBaseMixin { + @Mixin(BiPedModel.class) + public static class BiPedModelMixin { - @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) - public void oldArmour(CallbackInfoReturnable callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) - callback.setReturnValue(true); + @ModifyConstant(method = "setAngles", constant = @Constant(floatValue = -0.5235988F)) + private float cancelRotation(float value) { + return (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) ? 0.0F : value; + } } - } - } diff --git a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java index 6cb397b8..06b9e183 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java +++ b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java @@ -20,14 +20,16 @@ import com.google.gson.annotations.Expose; import com.mojang.blaze3d.platform.GlStateManager; - import io.github.solclient.client.event.EventHandler; -import io.github.solclient.client.event.impl.*; +import io.github.solclient.client.event.impl.PreTickEvent; +import io.github.solclient.client.event.impl.TransformFirstPersonItemEvent; import io.github.solclient.client.mixin.client.LivingEntityAccessor; -import io.github.solclient.client.mod.*; +import io.github.solclient.client.mod.ModCategory; import io.github.solclient.client.mod.option.annotation.Option; import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.item.*; +import net.minecraft.item.BowItem; +import net.minecraft.item.FishingRodItem; +import net.minecraft.item.ItemStack; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.MathHelper; @@ -40,19 +42,20 @@ public class V1_7VisualsMod extends SolClientMod { public boolean useAndMine = true; @Expose @Option - private boolean particles = true; + private final boolean bow = true; @Expose @Option - public boolean blocking = true; + private final boolean rod = true; @Expose @Option - public boolean eatingAndDrinking = true; + private final boolean particles = true; @Expose @Option - private boolean bow = true; + public boolean blocking = true; @Expose @Option - private boolean rod = true; + public boolean eatingAndDrinking = true; + @Expose @Option public boolean armourDamage = true; @@ -98,17 +101,14 @@ public boolean isEnabledByDefault() { @EventHandler public void onTick(PreTickEvent event) { - if (mc.player != null && mc.player.abilities.allowModifyWorld && isEnabled() && useAndMine && mc.result != null - && mc.result.type == BlockHitResult.Type.BLOCK && mc.player != null && mc.options.attackKey.isPressed() - && mc.options.useKey.isPressed() && mc.player.getItemUseTicks() > 0) { - if ((!mc.player.handSwinging - || mc.player.handSwingTicks >= ((LivingEntityAccessor) mc.player).getArmSwingAnimationEnd() - / 2 + if (mc.player != null && isEnabled() && useAndMine && mc.player.abilities.allowModifyWorld && + mc.result != null && mc.result.type == BlockHitResult.Type.BLOCK && mc.options.attackKey.isPressed() && + mc.options.useKey.isPressed() && mc.player.getItemUseTicks() > 0) { + if ((!mc.player.handSwinging || mc.player.handSwingTicks >= ((LivingEntityAccessor) mc.player).getArmSwingAnimationEnd() / 2 || mc.player.handSwingTicks < 0)) { mc.player.handSwingTicks = -1; mc.player.handSwinging = true; } - if (particles) { mc.particleManager.addBlockBreakingParticles(mc.result.getBlockPos(), mc.result.direction); } @@ -117,10 +117,6 @@ public void onTick(PreTickEvent event) { @EventHandler public void onItemTransform(TransformFirstPersonItemEvent event) { - if (!(bow || rod)) { - return; - } - // https://github.com/sp614x/optifine/issues/2098 if (mc.player.isUsingItem() && event.itemToRender.getItem() instanceof BowItem) { if (bow) @@ -128,11 +124,13 @@ public void onItemTransform(TransformFirstPersonItemEvent event) { } else if ((event.itemToRender.getItem() instanceof FishingRodItem) && rod) { GlStateManager.translate(0.08f, -0.027f, -0.33f); GlStateManager.scale(0.93f, 1.0f, 1.0f); + } else if (event.itemToRender.getItem() != null) { + GlStateManager.rotate(-1, 0.0f, 1.0f, 0.0f); + GlStateManager.translate(-0.027, 0.002, 0.0005); } } - public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntity clientPlayer, - float partialTicks) { + public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntity clientPlayer, float partialTicks) { float var14 = clientPlayer.getItemUseTicks() - partialTicks + 1.0F; float var15 = 1.0F - var14 / itemToRender.getMaxUseTime(); float var16 = 1.0F - var15; @@ -150,10 +148,4 @@ public static void oldDrinking(ItemStack itemToRender, AbstractClientPlayerEntit GlStateManager.translate(0, -0.0F, 0.06F); GlStateManager.rotate(-4F, 1, 0, 0); } - - public static void oldBlocking() { - GlStateManager.scale(0.83F, 0.88F, 0.85F); - GlStateManager.translate(-0.3F, 0.1F, 0.0F); - } - } From 406468facc5735dfbe40bf4e3a35abd071ee2c9a Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Sat, 18 Mar 2023 17:57:59 +0000 Subject: [PATCH 03/12] 1.7 debug overlay --- .../mixin/mod/V1_7VisualsModMixins.java | 130 ++++++++++++++++-- .../client/mod/impl/V1_7VisualsMod.java | 3 + .../solclient/client/util/MinecraftUtils.java | 126 +++++++++-------- .../assets/sol_client/lang/en_US.lang | 1 + src/main/resources/sol-client.mixins.json | 5 + 5 files changed, 197 insertions(+), 68 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 7f8d3986..670c93bd 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -18,30 +18,32 @@ package io.github.solclient.client.mixin.mod; +import org.spongepowered.asm.mixin.*; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.*; + import com.mojang.blaze3d.platform.GlStateManager; + import io.github.solclient.client.mod.impl.V1_7VisualsMod; import io.github.solclient.client.util.MinecraftUtils; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.hud.DebugHud; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.model.BiPedModel; -import net.minecraft.client.render.item.HeldItemRenderer; -import net.minecraft.client.render.item.ItemRenderer; +import net.minecraft.client.render.item.*; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelTransformation; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; +import net.minecraft.client.util.Window; +import net.minecraft.entity.*; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.util.UseAction; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import net.minecraft.util.math.*; +import net.minecraft.world.*; +import net.minecraft.world.chunk.Chunk; public abstract class V1_7VisualsModMixins { @@ -170,4 +172,110 @@ private float cancelRotation(float value) { } } } + + @Mixin(DebugHud.class) + public static class DebugHudMixin { + + @Inject(method = "renderLeftText", at = @At("HEAD"), cancellable = true) + public void render(CallbackInfo callback) { + if (!active()) + return; + + callback.cancel(); + + TextRenderer text = client.textRenderer; + + String debug = client.fpsDebugString; + debug = debug.substring(0, client.fpsDebugString.indexOf(") ") + 1); + debug = debug.replace(" (", ", "); + debug = '(' + debug; + // *really* + debug = debug.replace("update)", "updates)"); + debug = "Minecraft 1.8.9 " + debug; + text.drawWithShadow(debug, 2, 2, -1); + + String chunksDebug = client.worldRenderer.getChunksDebugString(); + text.drawWithShadow(chunksDebug, 2, 12, -1); + + text.drawWithShadow(client.worldRenderer.getEntitiesDebugString(), 2, 22, -1); + text.drawWithShadow(String.format("P: %s T: %s", client.particleManager.getDebugString(), + client.world.addDetailsToCrashReport()), 2, 32, -1); + text.drawWithShadow(client.world.getDebugString(), 2, 42, -1); + + PlayerEntity player = client.player; + World world = client.world; + + double x = player.x; + double y = player.y; + double z = player.z; + + int xFloor = MathHelper.floor(x); + int yFloor = MathHelper.floor(y); + int zFloor = MathHelper.floor(z); + + text.drawWithShadow(String.format("x: %.5f (%d) // c: %d (%d)", x, xFloor, xFloor >> 4, xFloor & 15), 2, 64, + 0xE0E0E0); + text.drawWithShadow(String.format("y: %.3f (feet pos, %.3f eyes pos)", y, y + player.getEyeHeight()), 2, 72, + 0xE0E0E0); + text.drawWithShadow(String.format("z: %.5f (%d) // c: %d (%d)", z, zFloor, zFloor >> 4, zFloor & 15), 2, 80, + 0xE0E0E0); + + int f = MathHelper.floor(player.yaw * 4F / 360F + 0.5) & 3; + text.drawWithShadow( + String.format("f: %d (%s) / %.5f", f, DIRECTIONS[f], MathHelper.wrapDegrees(client.player.yaw)), 2, + 88, 0xE0E0E0); + + BlockPos absPos = new BlockPos(xFloor, yFloor, zFloor); + if (world != null && world.blockExists(absPos)) { + Chunk chunk = world.getChunk(absPos); + BlockPos relativePos = new BlockPos(xFloor & 15, yFloor, zFloor & 15); + text.drawWithShadow( + String.format("lc: %d b: %s bl: %d sl %d rl: %d", chunk.getHighestNonEmptySectionYOffset() + 15, + chunk.getBiomeAt(absPos, world.getBiomeSource()).name, + chunk.getLightAtPos(LightType.BLOCK, relativePos), + chunk.getLightAtPos(LightType.SKY, relativePos), chunk.getLightLevel(relativePos, 0)), + 2, 96, 0xE0E0E0); + } + + text.drawWithShadow(String.format("ws: %.3f, fs: %.3f, g: %b, fl: %d", player.abilities.getWalkSpeed(), + player.abilities.getFlySpeed(), player.onGround, + MinecraftUtils.getHeightValue(world, xFloor, zFloor)), 2, 104, 0xE0E0E0); + + if (client.gameRenderer.areShadersSupported() && client.gameRenderer.getShader() != null) + text.drawWithShadow(String.format("shader: %s", client.gameRenderer.getShader().getName()), 2, 112, + 0xE0E0E0); + } + + @Inject(method = "renderRightText", at = @At("HEAD"), cancellable = true) + public void render(Window window, CallbackInfo callback) { + if (!active()) + return; + + callback.cancel(); + + TextRenderer text = client.textRenderer; + long max = Runtime.getRuntime().maxMemory(); + long total = Runtime.getRuntime().totalMemory(); + long free = Runtime.getRuntime().freeMemory(); + long used = total - free; + + String usedString = String.format("Used memory: %d%% (%dMB) of %dMB", used * 100 / max, used / 1024 / 1024, + max / 1024 / 1024); + text.drawWithShadow(usedString, window.getWidth() - text.getStringWidth(usedString), 2, 0xE0E0E0); + + String allocatedString = String.format("Allocated memory: %d%% (%dMB)", total * 100 / max, total / 1024 / 1024); + text.drawWithShadow(allocatedString, window.getWidth() - text.getStringWidth(allocatedString), 12, 0xE0E0E0); + } + + @Shadow + private @Final MinecraftClient client; + + private static final String[] DIRECTIONS = { "SOUTH", "WEST", "NORTH", "EAST" }; + + private static boolean active() { + return V1_7VisualsMod.enabled && V1_7VisualsMod.instance.debug; + } + + } + } diff --git a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java index 06b9e183..46bd9dd7 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java +++ b/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java @@ -62,6 +62,9 @@ public class V1_7VisualsMod extends SolClientMod { @Expose @Option public boolean sneaking = true; + @Expose + @Option + public boolean debug = true; public static V1_7VisualsMod instance; public static boolean enabled; diff --git a/src/main/java/io/github/solclient/client/util/MinecraftUtils.java b/src/main/java/io/github/solclient/client/util/MinecraftUtils.java index 48af22b3..c0b18dc8 100644 --- a/src/main/java/io/github/solclient/client/util/MinecraftUtils.java +++ b/src/main/java/io/github/solclient/client/util/MinecraftUtils.java @@ -24,7 +24,6 @@ import java.nio.ByteBuffer; import java.nio.channels.*; import java.nio.charset.StandardCharsets; -import java.nio.file.*; import java.util.*; import java.util.concurrent.*; import java.util.function.IntConsumer; @@ -64,6 +63,8 @@ import net.minecraft.util.*; import net.minecraft.util.Util.OperatingSystem; import net.minecraft.util.math.Box; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; /** * Utils involving Minecraft classes. @@ -382,66 +383,65 @@ public void openUrl(String url) { } switch (Util.getOperatingSystem()) { - case LINUX: - if (reveal) { - if (new File("/usr/bin/xdg-mime").exists() && new File("/usr/bin/gio").exists()) { - try { - Process process = new ProcessBuilder("xdg-mime", "query", "default", "inode/directory") - .start(); - int code = process.waitFor(); - - if (code > 0) { - throw new IllegalStateException("xdg-mime exited with code " + code); - } - - String file; - try (BufferedReader reader = new BufferedReader( - new InputStreamReader(process.getInputStream()))) { - file = reader.readLine(); - } + case LINUX: + if (reveal) { + if (new File("/usr/bin/xdg-mime").exists() && new File("/usr/bin/gio").exists()) { + try { + Process process = new ProcessBuilder("xdg-mime", "query", "default", "inode/directory").start(); + int code = process.waitFor(); + + if (code > 0) { + throw new IllegalStateException("xdg-mime exited with code " + code); + } - if (file != null) { - url = decodeUrl(url); - url = url.substring(7); + String file; + try (BufferedReader reader = new BufferedReader( + new InputStreamReader(process.getInputStream()))) { + file = reader.readLine(); + } - if (!file.startsWith("/")) { - file = "/usr/share/applications/" + file; - } + if (file != null) { + url = decodeUrl(url); + url = url.substring(7); - command = new String[] { "gio", "launch", file, url }; - break; + if (!file.startsWith("/")) { + file = "/usr/share/applications/" + file; } - } catch (IOException | InterruptedException | IllegalStateException error) { - Client.LOGGER.error("Could not determine directory handler:", error); + + command = new String[] { "gio", "launch", file, url }; + break; } + } catch (IOException | InterruptedException | IllegalStateException error) { + Client.LOGGER.error("Could not determine directory handler:", error); } - url = urlDirname(url); } + url = urlDirname(url); + } - if (new File("/usr/bin/xdg-open").exists()) { - command = new String[] { "xdg-open", url }; - break; - } - // fall through to default - default: - // fall back to AWT, but without a message - command = null; - break; - case MACOS: - if (reveal) { - command = new String[] { "open", "-R", decodeUrl(url).substring(7) }; - } else { - command = new String[] { "open", url }; - } + if (new File("/usr/bin/xdg-open").exists()) { + command = new String[] { "xdg-open", url }; break; - case WINDOWS: - if (reveal) { - command = new String[] { "Explorer", "/select," + decodeUrl(url).substring(8).replace('/', '\\') }; - } else { - command = new String[] { "rundll32", "url.dll,FileProtocolHandler", url }; - } + } + // fall through to default + default: + // fall back to AWT, but without a message + command = null; + break; + case MACOS: + if (reveal) { + command = new String[] { "open", "-R", decodeUrl(url).substring(7) }; + } else { + command = new String[] { "open", url }; + } + break; + case WINDOWS: + if (reveal) { + command = new String[] { "Explorer", "/select," + decodeUrl(url).substring(8).replace('/', '\\') }; + } else { + command = new String[] { "rundll32", "url.dll,FileProtocolHandler", url }; + } - break; + break; } if (command != null) { @@ -545,12 +545,12 @@ public String getScoreboardTitle() { public String getNativeFileExtension() { switch (Util.getOperatingSystem()) { - case WINDOWS: - return "dll"; - case MACOS: - return "dylib"; - default: - return "so"; + case WINDOWS: + return "dll"; + case MACOS: + return "dylib"; + default: + return "so"; } } @@ -768,4 +768,16 @@ public UUID getPlayerUuid() { return MinecraftClient.getInstance().getSession().getProfile().getId(); } + public int getHeightValue(World world, int x, int y) { + if (x >= -30000000 && y >= -30000000 && x < 30000000 && y < 30000000) { + if (!world.getChunkProvider().chunkExists(x >> 4, y >> 4)) { + return 0; + } else { + Chunk chunk = world.getChunk(x >> 4, y >> 4); + return chunk.getHighestBlockY(x & 15, y & 15); + } + } else + return 64; + } + } diff --git a/src/main/resources/assets/sol_client/lang/en_US.lang b/src/main/resources/assets/sol_client/lang/en_US.lang index 6a064e5d..5be98d51 100644 --- a/src/main/resources/assets/sol_client/lang/en_US.lang +++ b/src/main/resources/assets/sol_client/lang/en_US.lang @@ -384,6 +384,7 @@ sol_client.mod.1.7_visuals.option.rod=Fishing rod sol_client.mod.1.7_visuals.option.bow=Bow sol_client.mod.1.7_visuals.option.armourDamage=Damage effect on armor sol_client.mod.1.7_visuals.option.sneaking=Animated sneaking +sol_client.mod.1.7_visuals.option.debug=Debug overlay sol_client.mod.item_physics.name=Item Physics sol_client.mod.item_physics.description=Add a spinning animation to items. diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index df8e19f0..3dabca55 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -120,7 +120,12 @@ "mod.V1_7VisualsModMixins$ItemRendererMixin", "mod.V1_7VisualsModMixins$GameRendererMixin", "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", +<<<<<<< Updated upstream "mod.ItemPhysicsModMixins$ItemEntityMixin", "mod.CrosshairModMixins$GameRendererMixin" +======= + "mod.V1_7VisualsModMixins$DebugHudMixin", + "mod.ItemPhysicsMixins$ItemEntityMixin" +>>>>>>> Stashed changes ] } From b6736c39b3f78e7c78d0e7cdd215469ecbfba259 Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Sat, 18 Mar 2023 18:00:10 +0000 Subject: [PATCH 04/12] Fix conflicts --- src/main/resources/sol-client.mixins.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index 3dabca55..4833989b 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -120,12 +120,8 @@ "mod.V1_7VisualsModMixins$ItemRendererMixin", "mod.V1_7VisualsModMixins$GameRendererMixin", "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", -<<<<<<< Updated upstream - "mod.ItemPhysicsModMixins$ItemEntityMixin", - "mod.CrosshairModMixins$GameRendererMixin" -======= + "mod.CrosshairModMixins$GameRendererMixin", "mod.V1_7VisualsModMixins$DebugHudMixin", "mod.ItemPhysicsMixins$ItemEntityMixin" ->>>>>>> Stashed changes ] } From 4f6337fe48a34f9ac0d5c3bf84f361bf93ee572f Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Sun, 19 Mar 2023 16:57:30 +0000 Subject: [PATCH 05/12] What happened here?? --- .../mixin/mod/V1_7VisualsModMixins.java | 167 +++++++++--------- src/main/resources/sol-client.mixins.json | 6 +- 2 files changed, 91 insertions(+), 82 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 670c93bd..2967b4d5 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -20,6 +20,7 @@ import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.At.Shift; import org.spongepowered.asm.mixin.injection.callback.*; import com.mojang.blaze3d.platform.GlStateManager; @@ -29,6 +30,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.hud.DebugHud; +import net.minecraft.client.gui.widget.*; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; @@ -57,18 +59,19 @@ public static abstract class ItemRendererMixin { private final MinecraftClient mc = MinecraftClient.getInstance(); @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At("HEAD")) - public void renderItemModelForEntity(ItemStack stack, LivingEntity entity, ModelTransformation.Mode mode, CallbackInfo ci) { + public void renderItemModelForEntity(ItemStack stack, LivingEntity entity, ModelTransformation.Mode mode, + CallbackInfo ci) { lastEntityToRenderFor = entity; } - - @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At(value = "INVOKE", - target = "Lnet/minecraft/client/render/item/ItemRenderer;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;)V")) - public void renderItemModelForEntity_renderItem(ItemStack stack, BakedModel model, ModelTransformation.Mode transformation, CallbackInfo ci) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && - transformation == ModelTransformation.Mode.THIRD_PERSON && lastEntityToRenderFor instanceof PlayerEntity && - mc.player.getStackInHand() != null && mc.player.getItemUseTicks() > 0 && - mc.player.getStackInHand().getUseAction() == UseAction.BLOCK) { + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/ItemRenderer;renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/BakedModel;)V")) + public void renderItemModelForEntity_renderItem(ItemStack stack, BakedModel model, + ModelTransformation.Mode transformation, CallbackInfo ci) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + && transformation == ModelTransformation.Mode.THIRD_PERSON + && lastEntityToRenderFor instanceof PlayerEntity && mc.player.getStackInHand() != null + && mc.player.getItemUseTicks() > 0 + && mc.player.getStackInHand().getUseAction() == UseAction.BLOCK) { GlStateManager.translate(-0.041, -0.095f, 0.212f); GlStateManager.rotate(80, 1.0f, 0.0f, 0.0f); GlStateManager.rotate(20, 0.0f, 1.0f, 0.0f); @@ -78,98 +81,100 @@ public void renderItemModelForEntity_renderItem(ItemStack stack, BakedModel mode } } - @Mixin(HeldItemRenderer.class) - public static abstract class HeldItemRendererMixin { + } - @Shadow - protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); + @Mixin(HeldItemRenderer.class) + public static abstract class HeldItemRendererMixin { - @Shadow - private @Final MinecraftClient client; + @Shadow + protected abstract void applyEquipAndSwingOffset(float equipProgress, float swingProgress); - @Shadow - private ItemStack mainHand; + @Shadow + private @Final MinecraftClient client; - @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) - public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { - applyEquipAndSwingOffset(equipProgress, - swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine - ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) - : swingProgress); - } + @Shadow + private ItemStack mainHand; + + @Redirect(method = "renderArmHoldingItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;applyEquipAndSwingOffset(FF)V")) + public void allowUseAndSwing(HeldItemRenderer instance, float equipProgress, float swingProgress) { + applyEquipAndSwingOffset(equipProgress, + swingProgress == 0.0F && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + ? client.player.getHandSwingProgress(MinecraftUtils.getTickDelta()) + : swingProgress); + } - @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) - public void oldBlocking(CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { - GlStateManager.scale(0.83F, 0.88F, 0.85F); - GlStateManager.translate(-0.3F, 0.10F, -0.01F); - } + @Inject(method = "applySwordBlockTransformation", at = @At("RETURN")) + public void oldBlocking(CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) { + GlStateManager.scale(0.83F, 0.88F, 0.85F); + GlStateManager.translate(-0.3F, 0.10F, -0.01F); } + } - @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) - public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { - callback.cancel(); - V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); - } + @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) + public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, + CallbackInfo callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { + callback.cancel(); + V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); } } + } - @Mixin(GameRenderer.class) - public static abstract class GameRendererMixin { - - private float eyeHeightSubtractor; - private long lastEyeHeightUpdate; + @Mixin(GameRenderer.class) + public static abstract class GameRendererMixin { - @Shadow - private /* why you not final :( */ MinecraftClient client; + private float eyeHeightSubtractor; + private long lastEyeHeightUpdate; - // this code makes me long for spaghetti - @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) - public float smoothSneaking(Entity entity) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { - PlayerEntity player = (PlayerEntity) entity; - float height = player.getEyeHeight(); - if (player.isSneaking()) { - height += 0.08F; + @Shadow + private /* why you not final :( */ MinecraftClient client; + + // this code makes me long for spaghetti + @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) + public float smoothSneaking(Entity entity) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { + PlayerEntity player = (PlayerEntity) entity; + float height = player.getEyeHeight(); + if (player.isSneaking()) { + height += 0.08F; + } + float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; + long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; + lastEyeHeightUpdate = System.currentTimeMillis(); + if (actualEyeHeightSubtractor > eyeHeightSubtractor) { + eyeHeightSubtractor += sinceLastUpdate / 500f; + if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor = actualEyeHeightSubtractor; } - float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; - long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; - lastEyeHeightUpdate = System.currentTimeMillis(); + } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { + eyeHeightSubtractor -= sinceLastUpdate / 500f; if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor += sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; - } - } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor -= sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; - } + eyeHeightSubtractor = actualEyeHeightSubtractor; } - return height - eyeHeightSubtractor; } - return entity.getEyeHeight(); + return height - eyeHeightSubtractor; } + return entity.getEyeHeight(); } + } - @Mixin(ArmorFeatureRenderer.class) - public static class LayerArmorBaseMixin { + @Mixin(ArmorFeatureRenderer.class) + public static class LayerArmorBaseMixin { - @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) - public void oldArmour(CallbackInfoReturnable callback) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) - callback.setReturnValue(true); - } + @Inject(method = "combineTextures", at = @At("HEAD"), cancellable = true) + public void oldArmour(CallbackInfoReturnable callback) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.armourDamage) + callback.setReturnValue(true); } + } - @Mixin(BiPedModel.class) - public static class BiPedModelMixin { + @Mixin(BiPedModel.class) + public static class BiPedModelMixin { - @ModifyConstant(method = "setAngles", constant = @Constant(floatValue = -0.5235988F)) - private float cancelRotation(float value) { - return (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) ? 0.0F : value; - } + @ModifyConstant(method = "setAngles", constant = @Constant(floatValue = -0.5235988F)) + private float cancelRotation(float value) { + return (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.blocking) ? 0.0F : value; } } @@ -263,8 +268,10 @@ public void render(Window window, CallbackInfo callback) { max / 1024 / 1024); text.drawWithShadow(usedString, window.getWidth() - text.getStringWidth(usedString), 2, 0xE0E0E0); - String allocatedString = String.format("Allocated memory: %d%% (%dMB)", total * 100 / max, total / 1024 / 1024); - text.drawWithShadow(allocatedString, window.getWidth() - text.getStringWidth(allocatedString), 12, 0xE0E0E0); + String allocatedString = String.format("Allocated memory: %d%% (%dMB)", total * 100 / max, + total / 1024 / 1024); + text.drawWithShadow(allocatedString, window.getWidth() - text.getStringWidth(allocatedString), 12, + 0xE0E0E0); } @Shadow diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index 4833989b..3349a87f 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -118,10 +118,12 @@ "mod.TweaksModMixins$ParticleManagerMixin", "mod.TweaksModMixins$MouseInputMixin", "mod.V1_7VisualsModMixins$ItemRendererMixin", + "mod.V1_7VisualsModMixins$HeldItemRendererMixin", "mod.V1_7VisualsModMixins$GameRendererMixin", "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", - "mod.CrosshairModMixins$GameRendererMixin", + "mod.V1_7VisualsModMixins$BiPedModelMixin", "mod.V1_7VisualsModMixins$DebugHudMixin", - "mod.ItemPhysicsMixins$ItemEntityMixin" + "mod.CrosshairModMixins$GameRendererMixin", + "mod.ItemPhysicsModMixins$ItemEntityMixin" ] } From 81ee1a8753f5e338743654e007a3b89eecc456fc Mon Sep 17 00:00:00 2001 From: Mixces Date: Sun, 26 Mar 2023 17:29:38 -0500 Subject: [PATCH 06/12] hopefully this is safe ;p --- .../mixin/mod/V1_7VisualsModMixins.java | 63 ++++++++++++++--- src/main/resources/sol-client.mixins.json | 68 ++++++++++--------- 2 files changed, 87 insertions(+), 44 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 2967b4d5..bfbbf444 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -18,34 +18,41 @@ package io.github.solclient.client.mixin.mod; -import org.spongepowered.asm.mixin.*; -import org.spongepowered.asm.mixin.injection.*; -import org.spongepowered.asm.mixin.injection.At.Shift; -import org.spongepowered.asm.mixin.injection.callback.*; - import com.mojang.blaze3d.platform.GlStateManager; - +import io.github.solclient.client.mixin.client.ClientPlayerInteractionManagerAccessor; import io.github.solclient.client.mod.impl.V1_7VisualsMod; import io.github.solclient.client.util.MinecraftUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.hud.DebugHud; -import net.minecraft.client.gui.widget.*; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.model.BiPedModel; -import net.minecraft.client.render.item.*; +import net.minecraft.client.render.item.HeldItemRenderer; +import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.util.Window; -import net.minecraft.entity.*; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.util.UseAction; -import net.minecraft.util.math.*; -import net.minecraft.world.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; +import net.minecraft.world.LightType; +import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.*; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; public abstract class V1_7VisualsModMixins { @@ -178,6 +185,40 @@ private float cancelRotation(float value) { } } + @Mixin(MinecraftClient.class) + public static class MinecraftClientMixin { + + @Unique + private boolean isHittingBlock = false; + + @Inject(method = "doUse", at = @At("HEAD")) + public void rightClickMousePre(CallbackInfo ci) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && + MinecraftClient.getInstance().player.abilities.allowModifyWorld && + MinecraftClient.getInstance().player.getStackInHand() != null && + (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE || + MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem || + MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + isHittingBlock = MinecraftClient.getInstance().interactionManager.isBreakingBlock(); + MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(false); + } + } + + @Inject(method = "doUse", at = @At("RETURN")) + public void rightClickMousePost(CallbackInfo ci) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + && !MinecraftClient.getInstance().interactionManager.isBreakingBlock() && MinecraftClient.getInstance().player.abilities.allowModifyWorld && + MinecraftClient.getInstance().player.getStackInHand() != null && + (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE || + MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem || + MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(isHittingBlock); + } + } + } + @Mixin(DebugHud.class) public static class DebugHudMixin { diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index 3349a87f..054e5a0e 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -29,6 +29,7 @@ "client.ChatScreenMixin", "client.ClickEventMixin", "client.ClientPlayerEntityMixin", + "client.ClientPlayerInteractionManagerAccessor", "client.ClientPlayNetworkHandlerMixin", "client.ClientWorldMixin", "client.ControlsOptionsScreenMixin", @@ -53,6 +54,7 @@ "client.MinecraftClientAccessor", "client.MinecraftClientMixin", "client.ModelLoaderAccessor", + "client.PlayerListHudMixin", "client.PlayerSkinTexture$1Mixin", "client.ResourcePackEntryWidgetMixin", "client.ResourcePackListWidgetMixin", @@ -68,62 +70,62 @@ "client.TranslationStorageMixin", "client.VertexBufferMixin", "client.WorldRendererAccessor", - "client.PlayerListHudMixin", "lwjgl.GLContextAccessor", "lwjgl.LinuxKeyboardMixin", "lwjgl.LinuxKeycodesAccessor", "lwjgl.NanoVGGLConfigMixin", "lwjgl.WindowsDisplayMixin", - "mod.ChatModMixins$ScreenMixin", - "mod.ChatModMixins$GameOptionsMixin", - "mod.ChatModMixins$TextsMixin", - "mod.ChatModMixins$ChatScreenMixin", + "mod.ChatModMixins$ChatHudLineMixin", "mod.ChatModMixins$ChatHudMixin", - "mod.ChatModMixins$MinecraftClientMixin", "mod.ChatModMixins$ChatOptionsScreenMixin", - "mod.ChatModMixins$ChatHudLineMixin", + "mod.ChatModMixins$ChatScreenMixin", + "mod.ChatModMixins$GameOptionsMixin", + "mod.ChatModMixins$MinecraftClientMixin", + "mod.ChatModMixins$ScreenMixin", + "mod.ChatModMixins$TextsMixin", "mod.ChunkAnimatorModMixins$BuiltChunkMixin", "mod.ChunkAnimatorModMixins$ClientPlayerInteractionManagerMixin", "mod.CosmeticaModMixins$PlayerEntityRendererMixin", + "mod.CrosshairModMixins$GameRendererMixin", "mod.HypixelAdditionsModMixins$PlayerEntityRendererMixin", - "mod.SCReplayModMixins$MinecraftClientMixin", + "mod.ItemPhysicsModMixins$ItemEntityMixin", + "mod.ScreenshotsModMixins$ScreenshotUtilsMixin", + "mod.SCReplayModMixins$AbstractGuiSliderMixin", + "mod.SCReplayModMixins$CameraEntityMixin", + "mod.SCReplayModMixins$ClassicCameraControllerMixin", "mod.SCReplayModMixins$GameRendererMixin", + "mod.SCReplayModMixins$GuiHandlerMixin", + "mod.SCReplayModMixins$GuiRecordingOverlayMixin", + "mod.SCReplayModMixins$GuiReplayViewerMixin", + "mod.SCReplayModMixins$GuiSavingReplayMixin", "mod.SCReplayModMixins$InGameHudMixin", "mod.SCReplayModMixins$MCVerMixin", - "mod.SCReplayModMixins$CameraEntityMixin", - "mod.SCReplayModMixins$GuiReplayViewerMixin", + "mod.SCReplayModMixins$MinecraftClientMixin", + "mod.SCReplayModMixins$PacketListenerMixin", "mod.SCReplayModMixins$ReplayModMixin", - "mod.SCReplayModMixins$GuiSavingReplayMixin", - "mod.SCReplayModMixins$ClassicCameraControllerMixin", "mod.SCReplayModMixins$VanillaCameraControllerMixin", - "mod.SCReplayModMixins$GuiRecordingOverlayMixin", - "mod.SCReplayModMixins$AbstractGuiSliderMixin", - "mod.SCReplayModMixins$GuiHandlerMixin", - "mod.SCReplayModMixins$PacketListenerMixin", - "mod.ScreenshotsModMixins$ScreenshotUtilsMixin", - "mod.ScrollableTooltipsModMixins$ScreenMixin", "mod.ScrollableTooltipsModMixins$HandledScreenMixin", - "mod.TNTTimerModMixins$TntEntityRendererMixin", + "mod.ScrollableTooltipsModMixins$ScreenMixin", "mod.TabListModMixins$PlayerListHudMixin", - "mod.TweaksModMixins$InGameHudMixin", + "mod.TNTTimerModMixins$TntEntityRendererMixin", + "mod.TweaksModMixins$DisconnectedScreenMixin", "mod.TweaksModMixins$EnchantmentMixin", - "mod.TweaksModMixins$InventoryScreenMixin", - "mod.TweaksModMixins$PotionItemMixin", - "mod.TweaksModMixins$RendererLivingEntityMixin", - "mod.TweaksModMixins$GameRendererMixin", "mod.TweaksModMixins$GameMenuScreenMixin", - "mod.TweaksModMixins$MinecraftClientMixin", + "mod.TweaksModMixins$GameRendererMixin", + "mod.TweaksModMixins$InGameHudMixin", + "mod.TweaksModMixins$InventoryScreenMixin", "mod.TweaksModMixins$ItemRendererMixin", - "mod.TweaksModMixins$DisconnectedScreenMixin", - "mod.TweaksModMixins$ParticleManagerMixin", + "mod.TweaksModMixins$MinecraftClientMixin", "mod.TweaksModMixins$MouseInputMixin", - "mod.V1_7VisualsModMixins$ItemRendererMixin", - "mod.V1_7VisualsModMixins$HeldItemRendererMixin", - "mod.V1_7VisualsModMixins$GameRendererMixin", - "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", + "mod.TweaksModMixins$ParticleManagerMixin", + "mod.TweaksModMixins$PotionItemMixin", + "mod.TweaksModMixins$RendererLivingEntityMixin", "mod.V1_7VisualsModMixins$BiPedModelMixin", "mod.V1_7VisualsModMixins$DebugHudMixin", - "mod.CrosshairModMixins$GameRendererMixin", - "mod.ItemPhysicsModMixins$ItemEntityMixin" + "mod.V1_7VisualsModMixins$GameRendererMixin", + "mod.V1_7VisualsModMixins$HeldItemRendererMixin", + "mod.V1_7VisualsModMixins$ItemRendererMixin", + "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", + "mod.V1_7VisualsModMixins$MinecraftClientMixin" ] } From 673276e726534020aab5f8cb94b43ede2bfc01d2 Mon Sep 17 00:00:00 2001 From: Mixces Date: Sun, 26 Mar 2023 17:34:43 -0500 Subject: [PATCH 07/12] ACCESSOR YEAHHHH --- .../ClientPlayerInteractionManagerAccessor.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java diff --git a/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java b/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java new file mode 100644 index 00000000..ac0da7b5 --- /dev/null +++ b/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java @@ -0,0 +1,12 @@ +package io.github.solclient.client.mixin.client; + +import net.minecraft.client.network.ClientPlayerInteractionManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(ClientPlayerInteractionManager.class) +public interface ClientPlayerInteractionManagerAccessor { + + @Accessor("breakingBlock") + void setHitting(boolean value); +} From fa79bc1fe1e1ea0ff830e2165ba4d81fca9da808 Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Mon, 27 Mar 2023 00:55:43 +0100 Subject: [PATCH 08/12] Clean up some code :p --- .../mixin/mod/V1_7VisualsModMixins.java | 72 ++++++++----------- 1 file changed, 30 insertions(+), 42 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index bfbbf444..e8ca4a61 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -119,8 +119,7 @@ public void oldBlocking(CallbackInfo callback) { } @Inject(method = "applyEatOrDrinkTransformation", at = @At("HEAD"), cancellable = true) - public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, - CallbackInfo callback) { + public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTicks, CallbackInfo callback) { if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.eatingAndDrinking) { callback.cancel(); V1_7VisualsMod.oldDrinking(mainHand, clientPlayer, partialTicks); @@ -131,39 +130,25 @@ public void oldDrinking(AbstractClientPlayerEntity clientPlayer, float partialTi @Mixin(GameRenderer.class) public static abstract class GameRendererMixin { - private float eyeHeightSubtractor; - private long lastEyeHeightUpdate; - + private float lastEyeHeight; @Shadow private /* why you not final :( */ MinecraftClient client; // this code makes me long for spaghetti + // edit: i've eaten it up, yum @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) - public float smoothSneaking(Entity entity) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && entity instanceof PlayerEntity) { - PlayerEntity player = (PlayerEntity) entity; - float height = player.getEyeHeight(); - if (player.isSneaking()) { - height += 0.08F; - } - float actualEyeHeightSubtractor = player.isSneaking() ? 0.08F : 0; - long sinceLastUpdate = System.currentTimeMillis() - lastEyeHeightUpdate; - lastEyeHeightUpdate = System.currentTimeMillis(); - if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor += sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; - } - } else if (actualEyeHeightSubtractor < eyeHeightSubtractor) { - eyeHeightSubtractor -= sinceLastUpdate / 500f; - if (actualEyeHeightSubtractor > eyeHeightSubtractor) { - eyeHeightSubtractor = actualEyeHeightSubtractor; - } - } - return height - eyeHeightSubtractor; - } - return entity.getEyeHeight(); + public float smoothSneaking(Entity entity, float tickDelta) { + if (!V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking) + return entity.getEyeHeight(); + + return lastEyeHeight + (entity.getEyeHeight() - lastEyeHeight) * tickDelta; } + + @Inject(method = "tick", at = @At("HEAD")) + public void swap(CallbackInfo callback) { + lastEyeHeight = client.getCameraEntity().getEyeHeight(); + } + } @Mixin(ArmorFeatureRenderer.class) @@ -193,28 +178,31 @@ public static class MinecraftClientMixin { @Inject(method = "doUse", at = @At("HEAD")) public void rightClickMousePre(CallbackInfo ci) { - if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && - MinecraftClient.getInstance().player.abilities.allowModifyWorld && - MinecraftClient.getInstance().player.getStackInHand() != null && - (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE || - MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem || - MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine + && MinecraftClient.getInstance().player.abilities.allowModifyWorld + && MinecraftClient.getInstance().player.getStackInHand() != null + && (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE + || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem + || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { isHittingBlock = MinecraftClient.getInstance().interactionManager.isBreakingBlock(); MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); - ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(false); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager) + .setHitting(false); } } @Inject(method = "doUse", at = @At("RETURN")) public void rightClickMousePost(CallbackInfo ci) { if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine - && !MinecraftClient.getInstance().interactionManager.isBreakingBlock() && MinecraftClient.getInstance().player.abilities.allowModifyWorld && - MinecraftClient.getInstance().player.getStackInHand() != null && - (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE || - MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem || - MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + && !MinecraftClient.getInstance().interactionManager.isBreakingBlock() + && MinecraftClient.getInstance().player.abilities.allowModifyWorld + && MinecraftClient.getInstance().player.getStackInHand() != null + && (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE + || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem + || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); - ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(isHittingBlock); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager) + .setHitting(isHittingBlock); } } } From 7332f69a806fd8383e0bba11efaa8b351c2b05fd Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Mon, 27 Mar 2023 02:02:02 +0100 Subject: [PATCH 09/12] Hopefully accurate sneaking --- ...lientPlayerInteractionManagerAccessor.java | 18 +++++++ .../mixin/mod/V1_7VisualsModMixins.java | 50 ++++++++++++++++--- .../solclient/client/mod/ModManager.java | 1 + .../client/mod/impl/v1_7visuals/Sneaky.java | 29 +++++++++++ .../{ => v1_7visuals}/V1_7VisualsMod.java | 4 +- src/main/resources/sol-client.mixins.json | 3 +- 6 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/Sneaky.java rename src/main/java/io/github/solclient/client/mod/impl/{ => v1_7visuals}/V1_7VisualsMod.java (97%) diff --git a/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java b/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java index ac0da7b5..cebecfbb 100644 --- a/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java +++ b/src/main/java/io/github/solclient/client/mixin/client/ClientPlayerInteractionManagerAccessor.java @@ -1,3 +1,21 @@ +/* + * Sol Client - an open source Minecraft client + * Copyright (C) 2021-2023 TheKodeToad and Contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package io.github.solclient.client.mixin.client; import net.minecraft.client.network.ClientPlayerInteractionManager; diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index e8ca4a61..32e892bb 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -20,7 +20,7 @@ import com.mojang.blaze3d.platform.GlStateManager; import io.github.solclient.client.mixin.client.ClientPlayerInteractionManagerAccessor; -import io.github.solclient.client.mod.impl.V1_7VisualsMod; +import io.github.solclient.client.mod.impl.v1_7visuals.*; import io.github.solclient.client.util.MinecraftUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; @@ -138,15 +138,15 @@ public static abstract class GameRendererMixin { // edit: i've eaten it up, yum @Redirect(method = "transformCamera", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) public float smoothSneaking(Entity entity, float tickDelta) { - if (!V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking) + if (!(V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking)) return entity.getEyeHeight(); - return lastEyeHeight + (entity.getEyeHeight() - lastEyeHeight) * tickDelta; + return lastEyeHeight + (((Sneaky) entity).get1_7InternalEyeHeight() - lastEyeHeight) * tickDelta; } @Inject(method = "tick", at = @At("HEAD")) public void swap(CallbackInfo callback) { - lastEyeHeight = client.getCameraEntity().getEyeHeight(); + lastEyeHeight = ((Sneaky) client.getCameraEntity()).get1_7InternalEyeHeight(); } } @@ -249,8 +249,8 @@ public void render(CallbackInfo callback) { text.drawWithShadow(String.format("x: %.5f (%d) // c: %d (%d)", x, xFloor, xFloor >> 4, xFloor & 15), 2, 64, 0xE0E0E0); - text.drawWithShadow(String.format("y: %.3f (feet pos, %.3f eyes pos)", y, y + player.getEyeHeight()), 2, 72, - 0xE0E0E0); + text.drawWithShadow(String.format("y: %.3f (feet pos, %.3f eyes pos)", y, + y + ((Sneaky) player).get1_7InternalEyeHeight()), 2, 72, 0xE0E0E0); text.drawWithShadow(String.format("z: %.5f (%d) // c: %d (%d)", z, zFloor, zFloor >> 4, zFloor & 15), 2, 80, 0xE0E0E0); @@ -314,4 +314,42 @@ private static boolean active() { } + @Mixin(Entity.class) + public static abstract class EntityMixin implements Sneaky { + + private float internalEyeHeight = Float.NaN; + + private boolean active() { + return !world.isClient && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && (Object) this == MinecraftClient.getInstance().getCameraEntity(); + } + + @Override + public float get1_7InternalEyeHeight() { + if (!active()) + return getEyeHeight(); + + return internalEyeHeight; + } + + @Inject(method = "tick", at = @At("HEAD")) + public void tick(CallbackInfo callback) { + if (!active()) + return; + + float realEyeHeight = getEyeHeight(); + // if we're aiming for a lower value, go straight there... for some reason + if (realEyeHeight < internalEyeHeight || internalEyeHeight != internalEyeHeight) + internalEyeHeight = getEyeHeight(); + else + internalEyeHeight += (realEyeHeight - internalEyeHeight) * 0.6F; + } + + @Shadow + public abstract float getEyeHeight(); + + @Shadow + public World world; + + } + } diff --git a/src/main/java/io/github/solclient/client/mod/ModManager.java b/src/main/java/io/github/solclient/client/mod/ModManager.java index 05df7732..d4f04ff6 100644 --- a/src/main/java/io/github/solclient/client/mod/ModManager.java +++ b/src/main/java/io/github/solclient/client/mod/ModManager.java @@ -48,6 +48,7 @@ import io.github.solclient.client.mod.impl.replay.SCReplayMod; import io.github.solclient.client.mod.impl.toggles.TogglesMod; import io.github.solclient.client.mod.impl.tweaks.TweaksMod; +import io.github.solclient.client.mod.impl.v1_7visuals.V1_7VisualsMod; public final class ModManager implements Iterable { diff --git a/src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/Sneaky.java b/src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/Sneaky.java new file mode 100644 index 00000000..02795130 --- /dev/null +++ b/src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/Sneaky.java @@ -0,0 +1,29 @@ +/* + * Sol Client - an open source Minecraft client + * Copyright (C) 2021-2023 TheKodeToad and Contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package io.github.solclient.client.mod.impl.v1_7visuals; + +/** + * Used to simulate the internal eye height in 1.7 before it's processed by the camera. + * This is what gives it the interesting look. + */ +public interface Sneaky { + + float get1_7InternalEyeHeight(); + +} diff --git a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java b/src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/V1_7VisualsMod.java similarity index 97% rename from src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java rename to src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/V1_7VisualsMod.java index 46bd9dd7..fb61313c 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/V1_7VisualsMod.java +++ b/src/main/java/io/github/solclient/client/mod/impl/v1_7visuals/V1_7VisualsMod.java @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package io.github.solclient.client.mod.impl; +package io.github.solclient.client.mod.impl.v1_7visuals; import com.google.gson.annotations.Expose; import com.mojang.blaze3d.platform.GlStateManager; @@ -25,8 +25,10 @@ import io.github.solclient.client.event.impl.TransformFirstPersonItemEvent; import io.github.solclient.client.mixin.client.LivingEntityAccessor; import io.github.solclient.client.mod.ModCategory; +import io.github.solclient.client.mod.impl.SolClientMod; import io.github.solclient.client.mod.option.annotation.Option; import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.entity.Entity; import net.minecraft.item.BowItem; import net.minecraft.item.FishingRodItem; import net.minecraft.item.ItemStack; diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index 054e5a0e..703e5bc0 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -126,6 +126,7 @@ "mod.V1_7VisualsModMixins$HeldItemRendererMixin", "mod.V1_7VisualsModMixins$ItemRendererMixin", "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", - "mod.V1_7VisualsModMixins$MinecraftClientMixin" + "mod.V1_7VisualsModMixins$MinecraftClientMixin", + "mod.V1_7VisualsModMixins$EntityMixin" ] } From e6e510308cf6f70252a2b3a4c3f437acc741baa6 Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Mon, 27 Mar 2023 02:15:22 +0100 Subject: [PATCH 10/12] yes --- .../github/solclient/client/mixin/mod/V1_7VisualsModMixins.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 32e892bb..fee68db8 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -320,7 +320,7 @@ public static abstract class EntityMixin implements Sneaky { private float internalEyeHeight = Float.NaN; private boolean active() { - return !world.isClient && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && (Object) this == MinecraftClient.getInstance().getCameraEntity(); + return world.isClient && V1_7VisualsMod.enabled && V1_7VisualsMod.instance.sneaking && (Object) this == MinecraftClient.getInstance().getCameraEntity(); } @Override From cd80318c5ccf03d5f3b5786b1ab2a90032a9c57b Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Mon, 27 Mar 2023 16:52:13 +0100 Subject: [PATCH 11/12] Fix sneaking with debug crosshair --- .../solclient/client/mixin/mod/V1_7VisualsModMixins.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index fee68db8..8c5e5092 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -144,6 +144,11 @@ public float smoothSneaking(Entity entity, float tickDelta) { return lastEyeHeight + (((Sneaky) entity).get1_7InternalEyeHeight() - lastEyeHeight) * tickDelta; } + @Redirect(method = "renderDebugCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getEyeHeight()F")) + public float smoothDebugSneaking(Entity entity, float tickDelta) { + return smoothSneaking(entity, tickDelta); + } + @Inject(method = "tick", at = @At("HEAD")) public void swap(CallbackInfo callback) { lastEyeHeight = ((Sneaky) client.getCameraEntity()).get1_7InternalEyeHeight(); From 1a948dd8ca237372c08370fcd405642ccd668cba Mon Sep 17 00:00:00 2001 From: Mixces Date: Wed, 29 Mar 2023 15:04:24 -0500 Subject: [PATCH 12/12] hehehehehehehehe --- .../mixin/mod/V1_7VisualsModMixins.java | 37 +++++++++++++------ src/main/resources/sol-client.mixins.json | 5 ++- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java index 8c5e5092..117f6318 100644 --- a/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java +++ b/src/main/java/io/github/solclient/client/mixin/mod/V1_7VisualsModMixins.java @@ -26,6 +26,7 @@ import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.hud.DebugHud; import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.client.network.ClientPlayerInteractionManager; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.model.BiPedModel; @@ -41,6 +42,7 @@ import net.minecraft.item.BucketItem; import net.minecraft.item.ItemStack; import net.minecraft.util.UseAction; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraft.world.LightType; @@ -182,32 +184,43 @@ public static class MinecraftClientMixin { private boolean isHittingBlock = false; @Inject(method = "doUse", at = @At("HEAD")) - public void rightClickMousePre(CallbackInfo ci) { + public void punchDuringUsagePart1(CallbackInfo ci) { if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && MinecraftClient.getInstance().player.abilities.allowModifyWorld && MinecraftClient.getInstance().player.getStackInHand() != null - && (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE - || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem - || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + && MinecraftClient.getInstance().result.type == BlockHitResult.Type.BLOCK && + !(MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { isHittingBlock = MinecraftClient.getInstance().interactionManager.isBreakingBlock(); MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); - ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager) - .setHitting(false); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(false); } } @Inject(method = "doUse", at = @At("RETURN")) - public void rightClickMousePost(CallbackInfo ci) { + public void punchDuringUsagePart2(CallbackInfo ci) { if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && !MinecraftClient.getInstance().interactionManager.isBreakingBlock() && MinecraftClient.getInstance().player.abilities.allowModifyWorld && MinecraftClient.getInstance().player.getStackInHand() != null - && (MinecraftClient.getInstance().player.getStackInHand().getUseAction() != UseAction.NONE - || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BucketItem - || MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { + && MinecraftClient.getInstance().result.type == BlockHitResult.Type.BLOCK && + !(MinecraftClient.getInstance().player.getStackInHand().getItem() instanceof BlockItem)) { MinecraftClient.getInstance().interactionManager.cancelBlockBreaking(); - ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager) - .setHitting(isHittingBlock); + ((ClientPlayerInteractionManagerAccessor) MinecraftClient.getInstance().interactionManager).setHitting(isHittingBlock); + } + } + } + + @Mixin(ClientPlayerInteractionManager.class) + public static class ClientPlayerInteractionManagerMixin { + @Shadow + private @Final MinecraftClient client; + + @Inject(method = "isBreakingBlock", at = @At("HEAD"), cancellable = true) + private void punchingAndUseBlocks(CallbackInfoReturnable cir) { + if (V1_7VisualsMod.enabled && V1_7VisualsMod.instance.useAndMine && + client.player.abilities.allowModifyWorld && client.player.getStackInHand() != null && + client.player.getStackInHand().getItem() instanceof BlockItem) { + cir.setReturnValue(false); } } } diff --git a/src/main/resources/sol-client.mixins.json b/src/main/resources/sol-client.mixins.json index 703e5bc0..10288c14 100644 --- a/src/main/resources/sol-client.mixins.json +++ b/src/main/resources/sol-client.mixins.json @@ -121,12 +121,13 @@ "mod.TweaksModMixins$PotionItemMixin", "mod.TweaksModMixins$RendererLivingEntityMixin", "mod.V1_7VisualsModMixins$BiPedModelMixin", + "mod.V1_7VisualsModMixins$ClientPlayerInteractionManagerMixin", "mod.V1_7VisualsModMixins$DebugHudMixin", + "mod.V1_7VisualsModMixins$EntityMixin", "mod.V1_7VisualsModMixins$GameRendererMixin", "mod.V1_7VisualsModMixins$HeldItemRendererMixin", "mod.V1_7VisualsModMixins$ItemRendererMixin", "mod.V1_7VisualsModMixins$LayerArmorBaseMixin", - "mod.V1_7VisualsModMixins$MinecraftClientMixin", - "mod.V1_7VisualsModMixins$EntityMixin" + "mod.V1_7VisualsModMixins$MinecraftClientMixin" ] }