From a812a8e2ab7ddb48ad528f1758d1c9754fa02cee Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 1 Nov 2024 15:05:17 +0100 Subject: [PATCH] Some fixes --- gradle.properties | 2 +- .../transformers/GameRendererTransformer.java | 14 ++++---- .../events/render/GetFovEvent.java | 4 +-- .../mixin/AbstractBlockStateMixin.java | 5 ++- .../mixin/BlockCollisionSpliteratorMixin.java | 13 ++++--- .../meteorclient/mixin/DrawContextMixin.java | 9 +++-- ...chantingTableBlockEntityRendererMixin.java | 4 +-- .../mixin/EntityRenderDispatcherMixin.java | 14 ++++---- .../mixin/HeldItemRendererMixin.java | 2 +- .../meteorclient/mixin/ItemStackMixin.java | 2 +- .../meteorclient/mixin/MapRendererMixin.java | 9 ++--- .../mixin/MiningToolItemMixin.java | 34 +++++++++++++++++++ .../meteorclient/mixin/TridentItemMixin.java | 6 ++-- .../mixininterface/IMiningToolItem.java | 12 +++++++ .../systems/modules/combat/CrystalAura.java | 7 ++-- .../utils/entity/DamageUtils.java | 13 +++---- .../meteorclient/utils/world/BlockUtils.java | 2 +- src/main/resources/meteor-client.mixins.json | 3 +- 18 files changed, 104 insertions(+), 51 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/MiningToolItemMixin.java create mode 100644 src/main/java/meteordevelopment/meteorclient/mixininterface/IMiningToolItem.java diff --git a/gradle.properties b/gradle.properties index bdb6063238..44b74b5f2f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx2G # Fabric (https://fabricmc.net/develop) minecraft_version=1.21.2 yarn_mappings=1.21.2+build.1 -loader_version=0.15.11 +loader_version=0.16.9 fapi_version=0.106.1+1.21.2 # Mod Properties diff --git a/src/main/java/meteordevelopment/meteorclient/asm/transformers/GameRendererTransformer.java b/src/main/java/meteordevelopment/meteorclient/asm/transformers/GameRendererTransformer.java index c8c5ea1fb2..53d90d925e 100644 --- a/src/main/java/meteordevelopment/meteorclient/asm/transformers/GameRendererTransformer.java +++ b/src/main/java/meteordevelopment/meteorclient/asm/transformers/GameRendererTransformer.java @@ -17,7 +17,7 @@ public class GameRendererTransformer extends AsmTransformer { public GameRendererTransformer() { super(mapClassName("net/minecraft/class_757")); - getFovMethod = new MethodInfo("net/minecraft/class_4184", null, new Descriptor("Lnet/minecraft/class_4184;", "F", "Z", "D"), true); + getFovMethod = new MethodInfo("net/minecraft/class_4184", null, new Descriptor("Lnet/minecraft/class_4184;", "F", "Z", "F"), true); } @Override @@ -30,7 +30,7 @@ public void transform(ClassNode klass) { //noinspection DataFlowIssue for (AbstractInsnNode insn : method.instructions) { - if (insn instanceof LdcInsnNode in && in.cst instanceof Double && (double) in.cst == 90) { + if (insn instanceof LdcInsnNode in && in.cst instanceof Float && (float) in.cst == 90) { InsnList insns = new InsnList(); generateEventCall(insns, new LdcInsnNode(in.cst)); @@ -39,14 +39,14 @@ public void transform(ClassNode klass) { injectionCount++; } else if ( - (insn instanceof MethodInsnNode in1 && in1.name.equals("intValue") && insn.getNext() instanceof InsnNode _in && _in.getOpcode() == Opcodes.I2D) + (insn instanceof MethodInsnNode in1 && in1.name.equals("intValue") && insn.getNext() instanceof InsnNode _in && _in.getOpcode() == Opcodes.I2F) || (insn instanceof MethodInsnNode in2 && in2.owner.equals(klass.name) && in2.name.startsWith("redirect") && in2.name.endsWith("getFov")) // Wi Zoom compatibility ) { InsnList insns = new InsnList(); - insns.add(new VarInsnNode(Opcodes.DSTORE, method.maxLocals)); - generateEventCall(insns, new VarInsnNode(Opcodes.DLOAD, method.maxLocals)); + insns.add(new VarInsnNode(Opcodes.FSTORE, method.maxLocals)); + generateEventCall(insns, new VarInsnNode(Opcodes.FLOAD, method.maxLocals)); method.instructions.insert(insn.getNext(), insns); injectionCount++; @@ -59,9 +59,9 @@ else if ( private void generateEventCall(InsnList insns, AbstractInsnNode loadPreviousFov) { insns.add(new FieldInsnNode(Opcodes.GETSTATIC, "meteordevelopment/meteorclient/MeteorClient", "EVENT_BUS", "Lmeteordevelopment/orbit/IEventBus;")); insns.add(loadPreviousFov); - insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "meteordevelopment/meteorclient/events/render/GetFovEvent", "get", "(D)Lmeteordevelopment/meteorclient/events/render/GetFovEvent;")); + insns.add(new MethodInsnNode(Opcodes.INVOKESTATIC, "meteordevelopment/meteorclient/events/render/GetFovEvent", "get", "(F)Lmeteordevelopment/meteorclient/events/render/GetFovEvent;")); insns.add(new MethodInsnNode(Opcodes.INVOKEINTERFACE, "meteordevelopment/orbit/IEventBus", "post", "(Ljava/lang/Object;)Ljava/lang/Object;")); insns.add(new TypeInsnNode(Opcodes.CHECKCAST, "meteordevelopment/meteorclient/events/render/GetFovEvent")); - insns.add(new FieldInsnNode(Opcodes.GETFIELD, "meteordevelopment/meteorclient/events/render/GetFovEvent", "fov", "D")); + insns.add(new FieldInsnNode(Opcodes.GETFIELD, "meteordevelopment/meteorclient/events/render/GetFovEvent", "fov", "F")); } } diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/GetFovEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/GetFovEvent.java index 85ac0b9ab5..228ddbd404 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/GetFovEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/GetFovEvent.java @@ -8,9 +8,9 @@ public class GetFovEvent { private static final GetFovEvent INSTANCE = new GetFovEvent(); - public double fov; + public float fov; - public static GetFovEvent get(double fov) { + public static GetFovEvent get(float fov) { INSTANCE.fov = fov; return INSTANCE; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AbstractBlockStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AbstractBlockStateMixin.java index 5deb47b3c1..b47e5b9935 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/AbstractBlockStateMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/AbstractBlockStateMixin.java @@ -10,7 +10,6 @@ import net.minecraft.block.AbstractBlock; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.BlockView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -19,9 +18,9 @@ @Mixin(AbstractBlock.AbstractBlockState.class) public abstract class AbstractBlockStateMixin { @Inject(method = "getModelOffset", at = @At("HEAD"), cancellable = true) - private void modifyPos(BlockView world, BlockPos pos, CallbackInfoReturnable cir) { + private void modifyPos(BlockPos pos, CallbackInfoReturnable info) { if (Modules.get() == null) return; - if (Modules.get().get(NoRender.class).noTextureRotations()) cir.setReturnValue(Vec3d.ZERO); + if (Modules.get().get(NoRender.class).noTextureRotations()) info.setReturnValue(Vec3d.ZERO); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockCollisionSpliteratorMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockCollisionSpliteratorMixin.java index 69856efc23..39048a1bd3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockCollisionSpliteratorMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockCollisionSpliteratorMixin.java @@ -16,27 +16,26 @@ import net.minecraft.util.shape.VoxelShape; import net.minecraft.util.shape.VoxelShapes; import net.minecraft.world.BlockCollisionSpliterator; -import net.minecraft.world.BlockView; +import net.minecraft.world.CollisionView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(BlockCollisionSpliterator.class) public abstract class BlockCollisionSpliteratorMixin { - @WrapOperation(method = "computeNext", at = @At( value = "INVOKE", - target = "Lnet/minecraft/block/BlockState;getCollisionShape(Lnet/minecraft/world/BlockView;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/ShapeContext;)Lnet/minecraft/util/shape/VoxelShape;" + target = "Lnet/minecraft/block/ShapeContext;getCollisionShape(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/CollisionView;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/util/shape/VoxelShape;" ) ) - private VoxelShape onComputeNextCollisionBox(BlockState state, BlockView world, BlockPos pos, ShapeContext context, Operation original) { - VoxelShape shape = original.call(state, world, pos, context); + private VoxelShape onComputeNextCollisionBox(ShapeContext instance, BlockState blockState, CollisionView collisionView, BlockPos blockPos, Operation original) { + VoxelShape shape = original.call(instance, blockState, collisionView, blockPos); - if (world != MinecraftClient.getInstance().world) { + if (collisionView != MinecraftClient.getInstance().world) { return shape; } - CollisionShapeEvent event = MeteorClient.EVENT_BUS.post(CollisionShapeEvent.get(state, pos, shape)); + CollisionShapeEvent event = MeteorClient.EVENT_BUS.post(CollisionShapeEvent.get(blockState, blockPos, shape)); return event.isCancelled() ? VoxelShapes.empty() : event.shape; } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/DrawContextMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/DrawContextMixin.java index 12fdaccb62..13062256d0 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/DrawContextMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/DrawContextMixin.java @@ -6,12 +6,15 @@ package meteordevelopment.meteorclient.mixin; import com.llamalad7.mixinextras.injector.ModifyReceiver; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.utils.tooltip.MeteorTooltipData; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.item.tooltip.TooltipData; import net.minecraft.text.Text; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -24,13 +27,13 @@ @Mixin(value = DrawContext.class) public abstract class DrawContextMixin { - @Inject(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V", shift = At.Shift.BEFORE), locals = LocalCapture.CAPTURE_FAILHARD) - private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, CallbackInfo ci, List list) { + @Inject(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V", shift = At.Shift.BEFORE)) + private void onDrawTooltip(TextRenderer textRenderer, List text, Optional data, int x, int y, @Nullable Identifier texture, CallbackInfo info, @Local(ordinal = 1) List list) { if (data.isPresent() && data.get() instanceof MeteorTooltipData meteorTooltipData) list.add(meteorTooltipData.getComponent()); } - @ModifyReceiver(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;II)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V")) + @ModifyReceiver(method = "drawTooltip(Lnet/minecraft/client/font/TextRenderer;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/util/Identifier;)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V")) private Optional onDrawTooltip_modifyIfPresentReceiver(Optional data, Consumer consumer) { if (data.isPresent() && data.get() instanceof MeteorTooltipData) return Optional.empty(); return data; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java index 04165de046..b446467acf 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java @@ -17,8 +17,8 @@ @Mixin(EnchantingTableBlockEntityRenderer.class) public abstract class EnchantingTableBlockEntityRendererMixin { - @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/BookModel;renderBook(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V")) - private boolean onRenderBookModelRenderProxy(BookModel instance, MatrixStack matrices, VertexConsumer vertices, int light, int overlay, int i) { + @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/BookModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;II)V")) + private boolean onRenderBookModelRenderProxy(BookModel instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay) { return !Modules.get().get(NoRender.class).noEnchTableBook(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java index 2f4aa08ac3..853058ddd9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java @@ -15,9 +15,11 @@ import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; import net.minecraft.util.math.Box; import net.minecraft.util.math.MathHelper; import net.minecraft.world.WorldView; @@ -33,8 +35,8 @@ public abstract class EntityRenderDispatcherMixin { @Shadow public Camera camera; - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void render(E entity, double x, double y, double z, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo info) { + @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/EntityRenderer;)V", at = @At("HEAD"), cancellable = true) + private void render(E entity, double x, double y, double z, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityRenderer renderer, CallbackInfo info) { if (entity instanceof FakePlayerEntity player && player.hideWhenInsideCamera) { int cX = MathHelper.floor(this.camera.getPos().x); int cY = MathHelper.floor(this.camera.getPos().y); @@ -44,7 +46,7 @@ private void render(E entity, double x, double y, double z, f } } - @Inject(method = "renderHitbox", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawBox(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;Lnet/minecraft/util/math/Box;FFFF)V", ordinal = 0), locals = LocalCapture.CAPTURE_FAILSOFT) + @Inject(method = "renderHitbox", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/VertexRendering;drawBox(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;Lnet/minecraft/util/math/Box;FFFF)V", ordinal = 0), locals = LocalCapture.CAPTURE_FAILSOFT) private static void onRenderHitbox(MatrixStack matrices, VertexConsumer vertices, Entity entity, float tickDelta, float red, float green, float blue, CallbackInfo ci, Box box) { double v = Modules.get().get(Hitboxes.class).getEntityValue(entity); if (v != 0) ((IBox) box).expand(v); @@ -53,9 +55,9 @@ private static void onRenderHitbox(MatrixStack matrices, VertexConsumer vertices // Player model rendering in main menu @Inject(method = "renderShadow", at = @At("HEAD"), cancellable = true) - private static void onRenderShadow(MatrixStack matrices, VertexConsumerProvider vertexConsumers, Entity entity, float opacity, float tickDelta, WorldView world, float radius, CallbackInfo info) { + private static void onRenderShadow(MatrixStack matrices, VertexConsumerProvider vertexConsumers, EntityRenderState renderState, float opacity, float tickDelta, WorldView world, float radius, CallbackInfo info) { if (PostProcessShaders.rendering) info.cancel(); - if (Modules.get().get(NoRender.class).noDeadEntities() && entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) info.cancel(); + if (Modules.get().get(NoRender.class).noDeadEntities() && renderState instanceof LivingEntityRenderState livingEntityRenderState && livingEntityRenderState.deathTime > 0) info.cancel(); } @Inject(method = "getSquaredDistanceToCamera(Lnet/minecraft/entity/Entity;)D", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java index 3708700b23..333aa7d0b9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java @@ -76,7 +76,7 @@ private float modifyEquipProgressOffhand(float value) { return (showSwapping(offHand, mc.player.getOffHandStack()) ? 1 : 0) - equipProgressOffHand; } - @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderItem(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V")) + @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderItem(Lnet/minecraft/entity/LivingEntity;Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ModelTransformationMode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V")) private void onRenderItem(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(HeldItemRendererEvent.get(hand, matrices)); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemStackMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemStackMixin.java index fac7631650..8a27c0d568 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemStackMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemStackMixin.java @@ -58,7 +58,7 @@ private boolean modifyContainsTooltip(boolean original) { return !(bt.isActive() && bt.tooltip.get()) && original; } - @ModifyExpressionValue(method = "getTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;contains(Lnet/minecraft/component/ComponentType;)Z", ordinal = 3)) + @ModifyExpressionValue(method = "getTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;contains(Lnet/minecraft/component/ComponentType;)Z", ordinal = 2)) private boolean modifyContainsAdditional(boolean original) { BetterTooltips bt = Modules.get().get(BetterTooltips.class); return !(bt.isActive() && bt.additional.get()) && original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index aa8e12f590..4a064dccf2 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java @@ -8,7 +8,6 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import meteordevelopment.meteorclient.utils.misc.EmptyIterator; import net.minecraft.client.render.MapRenderState; import net.minecraft.client.render.MapRenderer; import net.minecraft.client.render.VertexConsumerProvider; @@ -19,11 +18,13 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.List; + @Mixin(MapRenderer.class) public abstract class MapRendererMixin { - @ModifyExpressionValue(method = "draw(Lnet/minecraft/client/render/MapRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ZI)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/map/MapState;getDecorations()Ljava/lang/Iterable;")) - private Iterable getIconsProxy(Iterable original) { - return (Modules.get().get(NoRender.class).noMapMarkers()) ? EmptyIterator::new : original; + @ModifyExpressionValue(method = "draw(Lnet/minecraft/client/render/MapRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ZI)V", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/MapRenderState;decorations:Ljava/util/List;")) + private List getIconsProxy(List original) { + return (Modules.get().get(NoRender.class).noMapMarkers()) ? List.of() : original; } @Inject(method = "draw(Lnet/minecraft/client/render/MapRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ZI)V", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MiningToolItemMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MiningToolItemMixin.java new file mode 100644 index 0000000000..391024fc92 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MiningToolItemMixin.java @@ -0,0 +1,34 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixin; + +import meteordevelopment.meteorclient.mixininterface.IMiningToolItem; +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.MiningToolItem; +import net.minecraft.item.ToolMaterial; +import net.minecraft.registry.tag.TagKey; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(MiningToolItem.class) +public abstract class MiningToolItemMixin implements IMiningToolItem { + @Unique + private ToolMaterial material; + + @Inject(method = "", at = @At("TAIL")) + private void onInit(ToolMaterial material, TagKey effectiveBlocks, float attackDamage, float attackSpeed, Item.Settings settings, CallbackInfo info) { + this.material = material; + } + + @Override + public ToolMaterial meteor$getMaterial() { + return material; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TridentItemMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TridentItemMixin.java index 4bbdf059c0..0d3e1a9e71 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TridentItemMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TridentItemMixin.java @@ -17,7 +17,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyArgs; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -25,12 +25,12 @@ @Mixin(TridentItem.class) public abstract class TridentItemMixin { @Inject(method = "onStoppedUsing", at = @At("HEAD")) - private void onStoppedUsingHead(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfo info) { + private void onStoppedUsingHead(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfoReturnable info) { if (user == mc.player) Utils.isReleasingTrident = true; } @Inject(method = "onStoppedUsing", at = @At("TAIL")) - private void onStoppedUsingTail(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfo info) { + private void onStoppedUsingTail(ItemStack stack, World world, LivingEntity user, int remainingUseTicks, CallbackInfoReturnable info) { if (user == mc.player) Utils.isReleasingTrident = false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixininterface/IMiningToolItem.java b/src/main/java/meteordevelopment/meteorclient/mixininterface/IMiningToolItem.java new file mode 100644 index 0000000000..fa7aae8e29 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixininterface/IMiningToolItem.java @@ -0,0 +1,12 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixininterface; + +import net.minecraft.item.ToolMaterial; + +public interface IMiningToolItem { + ToolMaterial meteor$getMaterial(); +} diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java index 72b5fc0981..24db4864e6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java @@ -14,6 +14,7 @@ import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.mixininterface.IBox; +import meteordevelopment.meteorclient.mixininterface.IMiningToolItem; import meteordevelopment.meteorclient.mixininterface.IRaycastContext; import meteordevelopment.meteorclient.mixininterface.IVec3d; import meteordevelopment.meteorclient.renderer.ShapeMode; @@ -861,10 +862,10 @@ private void doBreak(Entity crystal) { } private boolean isValidWeaknessItem(ItemStack itemStack) { - if (!(itemStack.getItem() instanceof MiningToolItem) || itemStack.getItem() instanceof HoeItem) return false; + if (!(itemStack.getItem() instanceof IMiningToolItem) || itemStack.getItem() instanceof HoeItem) return false; - ToolMaterial material = ((MiningToolItem) itemStack.getItem()).getMaterial(); - return material == ToolMaterials.DIAMOND || material == ToolMaterials.NETHERITE; + ToolMaterial material = ((IMiningToolItem) itemStack.getItem()).meteor$getMaterial(); + return material == ToolMaterial.DIAMOND || material == ToolMaterial.NETHERITE; } private void attackCrystal(Entity entity) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java index e81cc4310e..28d4750bd0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java @@ -26,6 +26,7 @@ import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.tag.DamageTypeTags; import net.minecraft.registry.tag.EntityTypeTags; +import net.minecraft.server.world.ServerWorld; import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.*; @@ -73,7 +74,7 @@ public static float anchorDamage(LivingEntity target, Vec3d targetPos, Box targe /** * Low level control of parameters without having to reimplement everything, for addon authors who wish to use their * own predictions or other systems. - * @see net.minecraft.world.explosion.ExplosionBehavior#calculateDamage(Explosion, Entity) + * @see net.minecraft.world.explosion.ExplosionBehavior#calculateDamage(Explosion, Entity, float) */ public static float explosionDamage(LivingEntity target, Vec3d targetPos, Box targetBox, Vec3d explosionPos, float power, RaycastFactory raycastFactory) { double modDistance = PlayerUtils.distance(targetPos.x, targetPos.y, targetPos.z, explosionPos.x, explosionPos.y, explosionPos.z); @@ -151,8 +152,8 @@ public static float getAttackDamage(LivingEntity attacker, LivingEntity target) } public static float getAttackDamage(LivingEntity attacker, LivingEntity target, ItemStack weapon) { - EntityAttributeInstance original = attacker.getAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE); - EntityAttributeInstance copy = new EntityAttributeInstance(EntityAttributes.GENERIC_ATTACK_DAMAGE, o -> {}); + EntityAttributeInstance original = attacker.getAttributeInstance(EntityAttributes.ATTACK_DAMAGE); + EntityAttributeInstance copy = new EntityAttributeInstance(EntityAttributes.ATTACK_DAMAGE, o -> {}); copy.setBaseValue(original.getBaseValue()); for (EntityAttributeModifier modifier : original.getModifiers()) { @@ -163,7 +164,7 @@ public static float getAttackDamage(LivingEntity attacker, LivingEntity target, AttributeModifiersComponent attributeModifiers = weapon.get(DataComponentTypes.ATTRIBUTE_MODIFIERS); if (attributeModifiers != null) { attributeModifiers.applyModifiers(EquipmentSlot.MAINHAND, (entry, modifier) -> { - if (entry == EntityAttributes.GENERIC_ATTACK_DAMAGE) copy.updateModifier(modifier); + if (entry == EntityAttributes.ATTACK_DAMAGE) copy.updateModifier(modifier); }); } @@ -227,7 +228,7 @@ private static float modifyAttackDamage(LivingEntity attacker, LivingEntity targ // Fall Damage /** - * @see LivingEntity#computeFallDamage(float, float) (float, float, DamageSource) + * @see LivingEntity#computeFallDamage(float, float) */ public static float fallDamage(LivingEntity entity) { if (entity instanceof PlayerEntity player && player.getAbilities().flying) return 0f; @@ -255,7 +256,7 @@ private static float fallDamageReductions(LivingEntity entity, int surface) { // Utils /** - * @see LivingEntity#applyDamage(DamageSource, float) + * @see LivingEntity#applyDamage(ServerWorld, DamageSource, float) */ public static float calculateReductions(float damage, LivingEntity entity, DamageSource damageSource) { if (damageSource.isScaledWithDifficulty()) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java index 8ba8023730..129524417b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java @@ -399,7 +399,7 @@ private static double getBlockBreakingSpeed(int slot, BlockState block) { } if (mc.player.isSubmergedIn(FluidTags.WATER)) { - speed *= mc.player.getAttributeValue(EntityAttributes.PLAYER_SUBMERGED_MINING_SPEED); + speed *= mc.player.getAttributeValue(EntityAttributes.SUBMERGED_MINING_SPEED); } if (!mc.player.isOnGround()) { diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 840ffb7f02..ad7af431a0 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -186,7 +186,8 @@ "WorldChunkMixin", "WorldRendererAccessor", "WorldRendererMixin", - "YggdrasilMinecraftSessionServiceAccessor" + "YggdrasilMinecraftSessionServiceAccessor", + "MiningToolItemMixin" ], "injectors": { "defaultRequire": 1