From 1bf4423ce2e1b66958cd234598ad34db4d21449f Mon Sep 17 00:00:00 2001 From: Wide-Cat Date: Wed, 30 Jul 2025 18:36:15 +0100 Subject: [PATCH 01/38] Bump version to 25w31a, some fixes. Large changes to entity rendering. --- build.gradle.kts | 3 ++- gradle.properties | 6 +++--- .../meteorclient/gui/WidgetScreen.java | 3 ++- .../mixin/BannerBlockEntityRendererMixin.java | 12 +++++++++--- .../BlockEntityRenderDispatcherAccessor.java | 17 +++++++++++++++++ .../meteorclient/mixin/BlockItemMixin.java | 2 +- .../meteorclient/mixin/CompassStateMixin.java | 8 ++++---- .../mixin/FishingBobberEntityMixin.java | 2 +- .../meteorclient/mixin/HandledScreenMixin.java | 2 +- .../meteorclient/mixin/MapRendererMixin.java | 8 ++++---- .../meteorclient/mixin/PlayerEntityMixin.java | 14 ++++++++------ .../mixin/ServerPlayerEntityMixin.java | 2 +- .../meteorclient/mixin/TitleScreenMixin.java | 2 +- .../meteorclient/mixin/WorldChunkMixin.java | 2 +- .../meteorclient/mixin/WorldRendererMixin.java | 4 ++-- .../systems/accounts/types/CrackedAccount.java | 2 +- .../accounts/types/MicrosoftAccount.java | 2 +- .../accounts/types/TheAlteningAccount.java | 2 +- .../systems/hud/screens/HudEditorScreen.java | 2 +- .../meteorclient/utils/Utils.java | 14 ++++++++------ .../utils/misc/FakeClientPlayer.java | 15 ++++++++++++++- .../meteorclient/utils/render/PeekScreen.java | 2 +- .../utils/render/WireframeEntityRenderer.java | 7 ++++++- .../render/postprocess/PostProcessShader.java | 2 +- .../utils/tooltip/BannerTooltipComponent.java | 2 ++ .../utils/tooltip/MapTooltipComponent.java | 5 +---- src/main/resources/meteor-client.mixins.json | 1 + 27 files changed, 95 insertions(+), 48 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java diff --git a/build.gradle.kts b/build.gradle.kts index 4658eaef79..5565ef617c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -77,7 +77,8 @@ dependencies { modImplementation("net.fabricmc:fabric-loader:${properties["loader_version"] as String}") modInclude(fabricApi.module("fabric-api-base", properties["fapi_version"] as String)) - modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) + // todo re-include when it doesnt crash + //modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) // Compat fixes modCompileOnly(fabricApi.module("fabric-renderer-indigo", properties["fapi_version"] as String)) diff --git a/gradle.properties b/gradle.properties index cf7f79acfd..edd5b69556 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=1.21.8 -yarn_mappings=1.21.8+build.1 +minecraft_version=25w31a +yarn_mappings=25w31a+build.4 loader_version=0.16.14 -fapi_version=0.129.0+1.21.8 +fapi_version=0.128.2+1.21.6 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 6e250a25dc..2df2b7747a 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -114,7 +114,8 @@ public void onClosed(Runnable action) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + // todo rename bl when appropriate + public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { if (locked) return false; double s = mc.getWindow().getScaleFactor(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 94c4408ef0..05b8db27df 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -9,6 +9,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BannerBlockEntity; +import net.minecraft.class_11701; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; @@ -17,6 +18,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.Vec3d; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -29,12 +31,16 @@ public abstract class BannerBlockEntityRendererMixin { @Shadow public abstract void render(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d); + @Shadow + @Final + private class_11701 field_61779; + @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At("HEAD"), cancellable = true) private void injectRender1(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;)V"), cancellable = true) + @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/class_11701;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;)V"), cancellable = true) private void injectRender2(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci, @Local(ordinal = 1) float rotation, @Local BannerBlockModel bannerBlockModel) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { renderPillar(matrixStack, vertexConsumerProvider, light, overlay, rotation, bannerBlockModel); @@ -43,12 +49,12 @@ private void injectRender2(BannerBlockEntity bannerBlockEntity, float tickDelta, } @Unique - private static void renderPillar(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, float rotation, BannerBlockModel model) { + private void renderPillar(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, float rotation, BannerBlockModel model) { matrices.push(); matrices.translate(0.5F, 0.0F, 0.5F); matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(rotation)); matrices.scale(0.6666667F, -0.6666667F, -0.6666667F); - model.render(matrices, ModelBaker.BANNER_BASE.getVertexConsumer(vertexConsumers, RenderLayer::getEntitySolid), light, overlay); + model.render(matrices, ModelBaker.BANNER_BASE.getVertexConsumer(this.field_61779, vertexConsumers, RenderLayer::getEntitySolid), light, overlay); matrices.pop(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java new file mode 100644 index 0000000000..5a8c398aeb --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java @@ -0,0 +1,17 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixin; + +import net.minecraft.class_11701; +import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(BlockEntityRenderDispatcher.class) +public interface BlockEntityRenderDispatcherAccessor { + @Accessor("field_61783") + class_11701 getField_61783(); +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockItemMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockItemMixin.java index 6386182ebf..268c00db75 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockItemMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockItemMixin.java @@ -26,7 +26,7 @@ public abstract class BlockItemMixin { @Inject(method = "place(Lnet/minecraft/item/ItemPlacementContext;Lnet/minecraft/block/BlockState;)Z", at = @At("HEAD"), cancellable = true) private void onPlace(ItemPlacementContext context, BlockState state, CallbackInfoReturnable info) { - if (!context.getWorld().isClient) return; + if (!context.getWorld().isClient()) return; if (MeteorClient.EVENT_BUS.post(PlaceBlockEvent.get(context.getBlockPos(), state.getBlock())).isCancelled()) { info.setReturnValue(true); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java index 8554b393db..80688c00b5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java @@ -9,9 +9,9 @@ import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Freecam; +import net.minecraft.class_11566; import net.minecraft.client.render.Camera; import net.minecraft.client.render.item.property.numeric.CompassState; -import net.minecraft.entity.Entity; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; @@ -21,14 +21,14 @@ @Mixin(CompassState.class) public abstract class CompassStateMixin { - @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getBodyYaw()F")) + @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/class_11566;getBodyYaw()F")) private static float callLivingEntityGetYaw(float original) { if (Modules.get().isActive(Freecam.class)) return mc.gameRenderer.getCamera().getYaw(); return original; } - @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/entity/Entity;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) - private static double modifyGetAngleTo(double original, Entity entity, BlockPos pos) { + @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/class_11566;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) + private static double modifyGetAngleTo(double original, class_11566 arg, BlockPos pos) { if (Modules.get().isActive(Freecam.class)) { Vec3d vec3d = Vec3d.ofCenter(pos); Camera camera = mc.gameRenderer.getCamera(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java index 5aa409b185..23b53d2ce8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java @@ -20,7 +20,7 @@ public abstract class FishingBobberEntityMixin { @WrapOperation(method = "handleStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/projectile/FishingBobberEntity;pullHookedEntity(Lnet/minecraft/entity/Entity;)V")) private void preventFishingRodPull(FishingBobberEntity instance, Entity entity, Operation original) { - if (!instance.getWorld().isClient || entity != mc.player) original.call(instance, entity); + if (!instance.getWorld().isClient() || entity != mc.player) original.call(instance, entity); Velocity velocity = Modules.get().get(Velocity.class); if (!velocity.isActive() || !velocity.fishing.get()) original.call(instance, entity); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index a668028284..4c85e31603 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -101,7 +101,7 @@ private void onMouseDragged(double mouseX, double mouseY, int button, double del // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { + private void mouseClicked(double mouseX, double mouseY, int button, boolean bl, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index 4a064dccf2..fb5993d294 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java @@ -8,9 +8,9 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import net.minecraft.class_11659; import net.minecraft.client.render.MapRenderState; import net.minecraft.client.render.MapRenderer; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.map.MapDecoration; import org.spongepowered.asm.mixin.Mixin; @@ -22,13 +22,13 @@ @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 = "FIELD", target = "Lnet/minecraft/client/render/MapRenderState;decorations:Ljava/util/List;")) + @ModifyExpressionValue(method = "draw", 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) - private void onDraw(MapRenderState state, MatrixStack matrices, VertexConsumerProvider vertexConsumers, boolean bl, int light, CallbackInfo ci) { + @Inject(method = "draw", at = @At("HEAD"), cancellable = true) + private void onDraw(MapRenderState state, MatrixStack matrices, class_11659 arg, boolean bl, int light, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMapContents()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java index 70070cc1d4..e66acc2370 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java @@ -11,7 +11,9 @@ import meteordevelopment.meteorclient.events.entity.DropItemsEvent; import meteordevelopment.meteorclient.events.entity.player.ClipAtLedgeEvent; import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.movement.*; +import meteordevelopment.meteorclient.systems.modules.movement.Flight; +import meteordevelopment.meteorclient.systems.modules.movement.NoSlow; +import meteordevelopment.meteorclient.systems.modules.movement.Sprint; import meteordevelopment.meteorclient.systems.modules.player.Reach; import meteordevelopment.meteorclient.systems.modules.player.SpeedMine; import meteordevelopment.meteorclient.utils.world.BlockUtils; @@ -45,7 +47,7 @@ protected PlayerEntityMixin(EntityType entityType, World @Inject(method = "clipAtLedge", at = @At("HEAD"), cancellable = true) protected void clipAtLedge(CallbackInfoReturnable info) { - if (!getWorld().isClient) return; + if (!getWorld().isClient()) return; ClipAtLedgeEvent event = MeteorClient.EVENT_BUS.post(ClipAtLedgeEvent.get()); if (event.isSet()) info.setReturnValue(event.isClip()); @@ -53,7 +55,7 @@ protected void clipAtLedge(CallbackInfoReturnable info) { @Inject(method = "dropItem", at = @At("HEAD"), cancellable = true) private void onDropItem(ItemStack stack, boolean retainOwnership, CallbackInfoReturnable cir) { - if (getWorld().isClient && !stack.isEmpty()) { + if (getWorld().isClient() && !stack.isEmpty()) { if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(stack)).isCancelled()) cir.setReturnValue(null); } } @@ -70,7 +72,7 @@ private void onIsCreative(CallbackInfoReturnable info) { @ModifyReturnValue(method = "getBlockBreakingSpeed", at = @At(value = "RETURN")) public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { - if (!getWorld().isClient) return breakSpeed; + if (!getWorld().isClient()) return breakSpeed; SpeedMine speedMine = Modules.get().get(SpeedMine.class); if (!speedMine.isActive() || speedMine.mode.get() != SpeedMine.Mode.Normal || !speedMine.filter(block.getBlock())) return breakSpeed; @@ -91,7 +93,7 @@ public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { @ModifyReturnValue(method = "getMovementSpeed", at = @At("RETURN")) private float onGetMovementSpeed(float original) { - if (!getWorld().isClient) return original; + if (!getWorld().isClient()) return original; if (!Modules.get().get(NoSlow.class).slowness()) return original; float walkSpeed = getAbilities().getWalkSpeed(); @@ -106,7 +108,7 @@ private float onGetMovementSpeed(float original) { @Inject(method = "getOffGroundSpeed", at = @At("HEAD"), cancellable = true) private void onGetOffGroundSpeed(CallbackInfoReturnable info) { - if (!getWorld().isClient) return; + if (!getWorld().isClient()) return; float speed = Modules.get().get(Flight.class).getOffGroundSpeed(); if (speed != -1) info.setReturnValue(speed); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java index 4e89c0564c..c6c95821cc 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java @@ -25,7 +25,7 @@ protected ServerPlayerEntityMixin(EntityType entityType, @Inject(method = "jump", at = @At("HEAD"), cancellable = true) public void dontJump(CallbackInfo ci) { - if (!getWorld().isClient) return; + if (!getWorld().isClient()) return; Anchor module = Modules.get().get(Anchor.class); if (module.isActive() && module.cancelJump) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 46b7b0d7c2..34bbcde34a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -30,7 +30,7 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta, } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable info) { + private void onMouseClicked(double mouseX, double mouseY, int button, boolean bl, CallbackInfoReturnable info) { if (Config.get().titleScreenCredits.get() && button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if (TitleScreenCredits.onClicked(mouseX, mouseY)) info.setReturnValue(true); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java index 534f80c297..9b4b036233 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java @@ -24,6 +24,6 @@ public abstract class WorldChunkMixin { @Inject(method = "setBlockState", at = @At("TAIL")) private void onSetBlockState(BlockPos pos, BlockState state, int flags, CallbackInfoReturnable info) { - if (world.isClient) MeteorClient.EVENT_BUS.post(BlockUpdateEvent.get(pos, info.getReturnValue(), state)); + if (world.isClient()) MeteorClient.EVENT_BUS.post(BlockUpdateEvent.get(pos, info.getReturnValue(), state)); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 6555f898d4..7cd0cf805f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -112,7 +112,7 @@ private void draw(Entity entity, double cameraX, double cameraY, double cameraZ, meteor$pushEntityOutlineFramebuffer(shader.framebuffer); PostProcessShaders.rendering = true; - shader.vertexConsumerProvider.setColor(color.r, color.g, color.b, color.a); + shader.vertexConsumerProvider.setColor(color.getPacked()); renderEntity(entity, cameraX, cameraY, cameraZ, tickDelta, matrices, shader.vertexConsumerProvider); PostProcessShaders.rendering = false; @@ -132,7 +132,7 @@ private void setGlowColor(OutlineVertexConsumerProvider instance, int red, int g Color color = getESP().getColor(entity.get()); if (color == null) original.call(instance, red, green, blue, alpha); - else instance.setColor(color.r, color.g, color.b, color.a); + else instance.setColor(color.getPacked()); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/CrackedAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/CrackedAccount.java index 6087790b0d..20035985ec 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/CrackedAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/CrackedAccount.java @@ -28,7 +28,7 @@ public boolean login() { super.login(); cache.loadHead(); - setSession(new Session(name, Uuids.getOfflinePlayerUuid(name), "", Optional.empty(), Optional.empty(), Session.AccountType.MOJANG)); + setSession(new Session(name, Uuids.getOfflinePlayerUuid(name), "", Optional.empty(), Optional.empty())); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/MicrosoftAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/MicrosoftAccount.java index 025b4ec167..dcb2d5b519 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/MicrosoftAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/MicrosoftAccount.java @@ -33,7 +33,7 @@ public boolean login() { super.login(); cache.loadHead(); - setSession(new Session(cache.username, UndashedUuid.fromStringLenient(cache.uuid), token, Optional.empty(), Optional.empty(), Session.AccountType.MSA)); + setSession(new Session(cache.username, UndashedUuid.fromStringLenient(cache.uuid), token, Optional.empty(), Optional.empty())); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java index 7a360c69a7..0e910ccbef 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java @@ -62,7 +62,7 @@ public boolean login() { applyLoginEnvironment(SERVICE, YggdrasilMinecraftSessionServiceAccessor.meteor$createYggdrasilMinecraftSessionService(SERVICE.getServicesKeySet(), SERVICE.getProxy(), ENVIRONMENT)); try { - setSession(new Session(auth.getCurrentProfile().getName(), auth.getCurrentProfile().getId(), auth.getAccessToken(), Optional.empty(), Optional.empty(), Session.AccountType.MOJANG)); + setSession(new Session(auth.getCurrentProfile().getName(), auth.getCurrentProfile().getId(), auth.getAccessToken(), Optional.empty(), Optional.empty())); return true; } catch (Exception e) { MeteorClient.LOG.error("Failed to login with TheAltening."); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index 9f495f9bc2..58a0be72c4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -65,7 +65,7 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { double s = mc.getWindow().getScaleFactor(); mouseX *= s; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java index a5a0ebffbe..9e55482e7a 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java @@ -30,6 +30,7 @@ import net.minecraft.block.Blocks; import net.minecraft.block.ShulkerBoxBlock; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.block.entity.BlockEntityType; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; @@ -39,10 +40,10 @@ import net.minecraft.component.ComponentMap; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.ItemEnchantmentsComponent; -import net.minecraft.component.type.NbtComponent; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; +import net.minecraft.entity.TypedEntityData; import net.minecraft.entity.effect.StatusEffect; import net.minecraft.inventory.StackWithSlot; import net.minecraft.item.*; @@ -269,8 +270,9 @@ public static void getItemsInContainerItem(ItemStack itemStack, ItemStack[] item // todo should we remove this? are there still instances where we might get presented container items in this // format? maybe on servers with weird multiversion setups - if they exist, test this code to ensure it works else if (components.contains(DataComponentTypes.BLOCK_ENTITY_DATA)) { - NbtComponent nbt2 = components.getOrDefault(DataComponentTypes.BLOCK_ENTITY_DATA, NbtComponent.DEFAULT); - NbtList nbt3 = nbt2.getNbt().getListOrEmpty("Items"); + TypedEntityData> blockEntityData = components.get(DataComponentTypes.BLOCK_ENTITY_DATA); + if (blockEntityData == null) return; + NbtList nbt3 = blockEntityData.copyNbtWithoutId().getListOrEmpty("Items"); for (int i = 0; i < nbt3.size(); i++) { Optional compound = nbt3.getCompound(i); @@ -283,7 +285,7 @@ else if (components.contains(DataComponentTypes.BLOCK_ENTITY_DATA)) { if (slot.get() >= 0 && slot.get() < items.length) { switch (StackWithSlot.CODEC.parse(mc.player.getRegistryManager().getOps(NbtOps.INSTANCE), compound.get())) { case DataResult.Success success -> items[slot.get()] = success.value().stack(); - case DataResult.Error error -> items[slot.get()] = ItemStack.EMPTY; + case DataResult.Error ignored -> items[slot.get()] = ItemStack.EMPTY; default -> throw new MatchException(null, null); } } @@ -313,8 +315,8 @@ public static boolean hasItems(ItemStack itemStack) { ContainerComponentAccessor container = ((ContainerComponentAccessor) (Object) itemStack.get(DataComponentTypes.CONTAINER)); if (container != null && !container.meteor$getStacks().isEmpty()) return true; - NbtCompound compoundTag = itemStack.getOrDefault(DataComponentTypes.BLOCK_ENTITY_DATA, NbtComponent.DEFAULT).getNbt(); - return compoundTag != null && compoundTag.contains("Items"); + TypedEntityData> blockEntityData = itemStack.get(DataComponentTypes.BLOCK_ENTITY_DATA); + return blockEntityData != null && blockEntityData.contains("Items"); } public static Reference2IntMap createStatusEffectMap() { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java index 730486be8e..028791af51 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java @@ -44,7 +44,20 @@ public static PlayerEntity getPlayer() { if (player == null || (!id.equals(lastId))) { if (world == null) { world = new ClientWorld( - new ClientPlayNetworkHandler(mc, new ClientConnection(NetworkSide.CLIENTBOUND), new ClientConnectionState(new GameProfile(mc.getSession().getUuidOrNull(), mc.getSession().getUsername()), null, null, null, null, mc.getCurrentServerEntry(), null, null, null, null, null)), + new ClientPlayNetworkHandler(mc, new ClientConnection(NetworkSide.CLIENTBOUND), new ClientConnectionState( + null, + new GameProfile(mc.getSession().getUuidOrNull(), mc.getSession().getUsername()), + null, + null, + null, + null, + mc.getCurrentServerEntry(), + null, + null, + null, + null, + null) + ), new ClientWorld.Properties(Difficulty.NORMAL, false, false), world.getRegistryKey(), world.getDimensionEntry(), diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index 3c0a232934..dc12ebef16 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -36,7 +36,7 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index b748438f8d..4bdb026a06 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -12,6 +12,8 @@ import meteordevelopment.meteorclient.renderer.Renderer3D; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.class_11659; +import net.minecraft.class_11661; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; @@ -29,6 +31,7 @@ public class WireframeEntityRenderer { private static final MatrixStack matrices = new MatrixStack(); private static Renderer3D renderer; + private static final class_11659 class_11659 = new class_11661(); private static Color sideColor; private static Color lineColor; @@ -64,7 +67,9 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo matrices.push(); matrices.scale((float) scale, (float) scale, (float) scale); - renderer.render(state, matrices, MyVertexConsumerProvider.INSTANCE, 15); + renderer.render(state, matrices, class_11659); + // todo this just adds the entities to a list, we need to actually render them somewhere by calling + // net.minecraft.class_11688.method_73012 matrices.pop(); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java index 8c122ce242..2638ebc237 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -23,7 +23,7 @@ public abstract class PostProcessShader { protected RenderPipeline pipeline; public void init(RenderPipeline pipeline) { - vertexConsumerProvider = new OutlineVertexConsumerProvider(mc.getBufferBuilders().getEntityVertexConsumers()); + vertexConsumerProvider = new OutlineVertexConsumerProvider(); framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true); this.pipeline = pipeline; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 525262eecb..72c4a4a643 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.utils.tooltip; +import meteordevelopment.meteorclient.mixin.BlockEntityRenderDispatcherAccessor; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; @@ -80,6 +81,7 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers(); BannerBlockEntityRenderer.renderCanvas( + ((BlockEntityRenderDispatcherAccessor) mc.getBlockEntityRenderDispatcher()).getField_61783(), matrices, immediate, 15728880, diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java index a4b5ecb61b..7bdfd93914 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java @@ -12,7 +12,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.render.MapRenderState; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.component.type.MapIdComponent; import net.minecraft.item.FilledMapItem; @@ -60,15 +59,13 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he if (mapState == null) return; MatrixStack matrices2 = new MatrixStack(); - VertexConsumerProvider.Immediate consumer = mc.getBufferBuilders().getEntityVertexConsumers(); matrices2.push(); matrices2.translate(x, y, 0); matrices2.scale((float) scale, (float) scale, 0); matrices2.translate(8, 8, 0); mc.getMapRenderer().update(new MapIdComponent(mapId), mapState, mapRenderState); - mc.getMapRenderer().draw(mapRenderState, matrices2, consumer, false, 0xF000F0); - consumer.draw(); + mc.getMapRenderer().draw(mapRenderState, matrices2, mc.gameRenderer.method_72910(), false, 0xF000F0); matrices2.pop(); } } diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 44aea0cd37..00753655dc 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -23,6 +23,7 @@ "BiomeColorsMixin", "BlockCollisionSpliteratorMixin", "BlockColorsMixin", + "BlockEntityRenderDispatcherAccessor", "BlockEntityRenderDispatcherMixin", "BlockHitResultAccessor", "BlockItemMixin", From 863eb6e9edc12a34e3b6301f88568a1d41db3903 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 5 Aug 2025 20:25:17 +0100 Subject: [PATCH 02/38] Update to 25w32a Resolved enough issues to be able to load the game again. Entity rendering is still broken but aside from that things seem to mostly work fine. --- build.gradle.kts | 5 +-- gradle.properties | 8 ++-- .../meteorclient/asm/Asm.java | 5 +++ .../mixin/ArmorFeatureRendererMixin.java | 6 +-- .../mixin/BannerBlockEntityRendererMixin.java | 6 +-- ... => BlockEntityRenderManagerAccessor.java} | 12 +++--- ...ava => BlockEntityRenderManagerMixin.java} | 6 +-- .../mixin/CapeFeatureRendererMixin.java | 6 +-- .../meteorclient/mixin/CompassStateMixin.java | 10 ++--- .../mixin/ElytraFeatureRendererMixin.java | 6 +-- .../mixin/EndCrystalEntityRendererMixin.java | 33 +++++++++------- .../mixin/EntityRenderDispatcherMixin.java | 27 +++---------- .../mixin/EntityRendererMixin.java | 24 ++++++++++++ ...EntityVelocityUpdateS2CPacketAccessor.java | 13 ++----- .../mixin/HeadFeatureRendererMixin.java | 6 +-- .../mixin/InGameOverlayRendererMixin.java | 2 +- .../mixin/ItemEntityRendererMixin.java | 9 +++-- .../mixin/LivingEntityRendererMixin.java | 22 ++++++----- .../meteorclient/mixin/MapRendererMixin.java | 4 +- .../meteorclient/mixin/TextRendererMixin.java | 5 ++- .../mixin/WorldRendererMixin.java | 38 +++---------------- .../systems/modules/movement/Velocity.java | 13 ++++--- .../utils/render/WireframeEntityRenderer.java | 8 ++-- .../utils/tooltip/BannerTooltipComponent.java | 4 +- .../utils/tooltip/MapTooltipComponent.java | 2 +- src/main/resources/meteor-client.mixins.json | 4 +- 26 files changed, 137 insertions(+), 147 deletions(-) rename src/main/java/meteordevelopment/meteorclient/mixin/{BlockEntityRenderDispatcherAccessor.java => BlockEntityRenderManagerAccessor.java} (62%) rename src/main/java/meteordevelopment/meteorclient/mixin/{BlockEntityRenderDispatcherMixin.java => BlockEntityRenderManagerMixin.java} (92%) diff --git a/build.gradle.kts b/build.gradle.kts index 5565ef617c..e8377b39f6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("fabric-loom") version "1.10-SNAPSHOT" + id("fabric-loom") version "1.11-SNAPSHOT" id("maven-publish") id("com.gradleup.shadow") version "9.0.0-beta11" } @@ -77,8 +77,7 @@ dependencies { modImplementation("net.fabricmc:fabric-loader:${properties["loader_version"] as String}") modInclude(fabricApi.module("fabric-api-base", properties["fapi_version"] as String)) - // todo re-include when it doesnt crash - //modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) + modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) // Compat fixes modCompileOnly(fabricApi.module("fabric-renderer-indigo", properties["fapi_version"] as String)) diff --git a/gradle.properties b/gradle.properties index edd5b69556..213e856de5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w31a -yarn_mappings=25w31a+build.4 -loader_version=0.16.14 -fapi_version=0.128.2+1.21.6 +minecraft_version=25w32a +yarn_mappings=25w32a+build.1 +loader_version=0.17.0 +fapi_version=0.131.1+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/asm/Asm.java b/src/main/java/meteordevelopment/meteorclient/asm/Asm.java index 06e260bfdc..e6b0153261 100644 --- a/src/main/java/meteordevelopment/meteorclient/asm/Asm.java +++ b/src/main/java/meteordevelopment/meteorclient/asm/Asm.java @@ -114,6 +114,11 @@ public boolean transformClass(MixinEnvironment environment, String name, ClassNo return delegate.transformClass(environment, name, classNode); } + @Override + public boolean couldTransformClass(MixinEnvironment environment, String name) { + return delegate.couldTransformClass(environment, name); + } + @Override public byte[] generateClass(MixinEnvironment environment, String name) { return delegate.generateClass(environment, name); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java index 3923eddaf5..70a81c217b 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.state.BipedEntityRenderState; @@ -20,8 +20,8 @@ @Mixin(ArmorFeatureRenderer.class) public abstract class ArmorFeatureRendererMixin, A extends BipedEntityModel> { - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) - private void onRender(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, S bipedEntityRenderState, float f, float g, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + private void onRender(MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int i, S bipedEntityRenderState, float f, float g, CallbackInfo ci) { if (bipedEntityRenderState instanceof PlayerEntityRenderState && Modules.get().get(NoRender.class).noArmor()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 05b8db27df..719cf10180 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -9,12 +9,12 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BannerBlockEntity; -import net.minecraft.class_11701; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; import net.minecraft.client.render.model.ModelBaker; +import net.minecraft.client.texture.SpriteHolder; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.Vec3d; @@ -33,14 +33,14 @@ public abstract class BannerBlockEntityRendererMixin { @Shadow @Final - private class_11701 field_61779; + private SpriteHolder field_61779; @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At("HEAD"), cancellable = true) private void injectRender1(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/class_11701;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;)V"), cancellable = true) + @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;)V"), cancellable = true) private void injectRender2(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci, @Local(ordinal = 1) float rotation, @Local BannerBlockModel bannerBlockModel) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { renderPillar(matrixStack, vertexConsumerProvider, light, overlay, rotation, bannerBlockModel); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerAccessor.java similarity index 62% rename from src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java rename to src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerAccessor.java index 5a8c398aeb..b582915859 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerAccessor.java @@ -5,13 +5,13 @@ package meteordevelopment.meteorclient.mixin; -import net.minecraft.class_11701; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderManager; +import net.minecraft.client.texture.SpriteHolder; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.gen.Accessor; -@Mixin(BlockEntityRenderDispatcher.class) -public interface BlockEntityRenderDispatcherAccessor { - @Accessor("field_61783") - class_11701 getField_61783(); +@Mixin(BlockEntityRenderManager.class) +public interface BlockEntityRenderManagerAccessor { + @Accessor("spriteHolder") + SpriteHolder getSpriteHolder(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java similarity index 92% rename from src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherMixin.java rename to src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 5774208d4b..397ff0a358 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -9,15 +9,15 @@ import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; +import net.minecraft.client.render.block.entity.BlockEntityRenderManager; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(BlockEntityRenderDispatcher.class) -public abstract class BlockEntityRenderDispatcherMixin { +@Mixin(BlockEntityRenderManager.class) +public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render(Lnet/minecraft/block/entity/BlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("HEAD"), cancellable = true) private void onRenderEntity(E blockEntity, float tickDelta, MatrixStack matrix, VertexConsumerProvider vertexConsumerProvider, CallbackInfo info) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index 990c0bd158..d28161b1f2 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -8,7 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.feature.CapeFeatureRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; @@ -19,8 +19,8 @@ @Mixin(CapeFeatureRenderer.class) public abstract class CapeFeatureRendererMixin { - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;capeTexture()Lnet/minecraft/util/Identifier;")) - private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, VertexConsumerProvider consumers, int i, PlayerEntityRenderState state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;capeTexture()Lnet/minecraft/util/Identifier;")) + private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); return id == null ? original : id; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java index 80688c00b5..31b3351925 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java @@ -9,9 +9,9 @@ import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Freecam; -import net.minecraft.class_11566; import net.minecraft.client.render.Camera; import net.minecraft.client.render.item.property.numeric.CompassState; +import net.minecraft.util.EntityPos; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; @@ -21,16 +21,16 @@ @Mixin(CompassState.class) public abstract class CompassStateMixin { - @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/class_11566;getBodyYaw()F")) + @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/EntityPos;getBodyYaw()F")) private static float callLivingEntityGetYaw(float original) { if (Modules.get().isActive(Freecam.class)) return mc.gameRenderer.getCamera().getYaw(); return original; } - @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/class_11566;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) - private static double modifyGetAngleTo(double original, class_11566 arg, BlockPos pos) { + @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/util/EntityPos;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) + private static double modifyGetAngleTo(double original, EntityPos from, BlockPos to) { if (Modules.get().isActive(Freecam.class)) { - Vec3d vec3d = Vec3d.ofCenter(pos); + Vec3d vec3d = Vec3d.ofCenter(to); Camera camera = mc.gameRenderer.getCamera(); return Math.atan2(vec3d.getZ() - camera.getPos().z, vec3d.getX() - camera.getPos().x) / (float) (Math.PI * 2); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java index 085a84ddd4..bf72f14413 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java @@ -8,7 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; @@ -26,8 +26,8 @@ public ElytraFeatureRendererMixin(FeatureRendererContext context) { super(context); } - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ElytraFeatureRenderer;getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;")) - private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, VertexConsumerProvider consumers, int i, S state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ElytraFeatureRenderer;getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;")) + private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int i, S state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); return id == null ? original : id; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index 3818803f9c..7f00f9610c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -8,11 +8,11 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; +import net.minecraft.client.model.Model; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EndCrystalEntityRenderer; -import net.minecraft.client.render.entity.model.EndCrystalEntityModel; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.EndCrystalEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; @@ -44,15 +44,15 @@ private void onInit(CallbackInfo info) { @Final private static Identifier TEXTURE; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At("HEAD")) - private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD")) + private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { END_CRYSTAL = RenderLayer.getEntityTranslucent((chams.isActive() && chams.crystals.get() && !chams.crystalsTexture.get()) ? Chams.BLANK : TEXTURE); } // Chams - Scale - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) - private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) + private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { if (!chams.isActive() || !chams.crystals.get()) return; float v = chams.crystalsScale.get().floatValue(); @@ -61,14 +61,19 @@ private void onInit(CallbackInfo info) { // Chams - Color - @Shadow - @Final - private EndCrystalEntityModel model; - - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EndCrystalEntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;II)V")) - private boolean render$color(EndCrystalEntityModel instance, MatrixStack matrices, VertexConsumer vertices, int light, int overlay) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;pushModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;III)V")) + private boolean render$color(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int outlineColor) { if (chams.isActive() && chams.crystals.get()) { - model.render(matrices, vertices, light, overlay, chams.crystalsColor.get().getPacked()); + instance.pushModel(model, + state, + matrices, + END_CRYSTAL, + ((EndCrystalEntityRenderState) state).light, + OverlayTexture.DEFAULT_UV, + chams.crystalsColor.get().getPacked(), + null, + ((EndCrystalEntityRenderState) state).outlineColor, + 0); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java index c903e8d1bd..2f3161a69c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java @@ -5,39 +5,23 @@ package meteordevelopment.meteorclient.mixin; -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; -import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes; -import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.client.render.Camera; -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.EntityHitbox; -import net.minecraft.client.render.entity.state.EntityHitboxAndView; -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.client.render.entity.EntityRenderManager; import net.minecraft.entity.Entity; -import net.minecraft.util.math.MathHelper; -import net.minecraft.world.WorldView; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(EntityRenderDispatcher.class) +@Mixin(EntityRenderManager.class) public abstract class EntityRenderDispatcherMixin { @Shadow public Camera camera; + /* + todo this needs to be updated for the new rendering system + @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) { @@ -90,6 +74,7 @@ private static void onRenderShadow(MatrixStack matrices, VertexConsumerProvider if (PostProcessShaders.rendering) 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) private void onGetSquaredDistanceToCameraEntity(Entity entity, CallbackInfoReturnable info) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 2df6e07fb4..3d7f7ee5f1 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -8,10 +8,12 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Fullbright; import meteordevelopment.meteorclient.systems.modules.render.Nametags; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.entity.EntityUtils; +import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.entity.EntityRenderer; @@ -22,12 +24,15 @@ import net.minecraft.text.Text; import net.minecraft.world.LightType; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(EntityRenderer.class) public abstract class EntityRendererMixin { + @Unique private ESP esp; @Inject(method = "getDisplayName", at = @At("HEAD"), cancellable = true) private void onRenderLabel(T entity, CallbackInfoReturnable cir) { @@ -58,4 +63,23 @@ private int onGetBlockLight(int original) { private int onGetLightLevel(int original) { return Math.max(Modules.get().get(Fullbright.class).getLuminance(LightType.BLOCK), original); } + + @Inject(method = "updateRenderState", at = @At(value = "FIELD", target = "Lnet/minecraft/client/render/entity/state/EntityRenderState;outlineColor:I", shift = At.Shift.AFTER)) + private void onGetOutlineColor(T entity, S state, float tickProgress, CallbackInfo ci) { + if (getESP().isGlow() && !getESP().shouldSkip(entity)) { + Color color = getESP().getColor(entity); + + if (color == null) return; + state.outlineColor = color.getPacked(); + } + } + + @Unique + private ESP getESP() { + if (esp == null) { + esp = Modules.get().get(ESP.class); + } + + return esp; + } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java index 348d2bda18..8330617c50 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.mixin; import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket; +import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; @@ -13,15 +14,7 @@ @Mixin(EntityVelocityUpdateS2CPacket.class) public interface EntityVelocityUpdateS2CPacketAccessor { @Mutable - @Accessor("velocityX") - void meteor$setX(int velocityX); - - @Mutable - @Accessor("velocityY") - void meteor$setY(int velocityY); - - @Mutable - @Accessor("velocityZ") - void meteor$setZ(int velocityZ); + @Accessor("field_61887") + void meteor$setVelocity(Vec3d velocity); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java index c575174308..61ad995e97 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.feature.HeadFeatureRenderer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.model.ModelWithHead; @@ -21,8 +21,8 @@ @Mixin(HeadFeatureRenderer.class) public abstract class HeadFeatureRendererMixin & ModelWithHead> { - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) - private void onRender(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, S livingEntityRenderState, float f, float g, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + private void onRender(MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int i, S livingEntityRenderState, float f, float g, CallbackInfo ci) { if (livingEntityRenderState instanceof PlayerEntityRenderState && Modules.get().get(NoRender.class).noArmor()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/InGameOverlayRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/InGameOverlayRendererMixin.java index c060488a1b..9b9bb7eed1 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/InGameOverlayRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/InGameOverlayRendererMixin.java @@ -20,7 +20,7 @@ @Mixin(InGameOverlayRenderer.class) public abstract class InGameOverlayRendererMixin { @Inject(method = "renderFireOverlay", at = @At("HEAD"), cancellable = true) - private static void onRenderFireOverlay(MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo ci) { + private static void onRenderFireOverlay(MatrixStack matrices, VertexConsumerProvider vertexConsumers, Sprite sprite, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noFireOverlay()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java index a6885427e3..57d653dc0d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -8,8 +8,8 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderItemEntityEvent; import net.minecraft.client.item.ItemModelManager; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.ItemEntityRenderer; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.ItemEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Final; @@ -27,9 +27,10 @@ public abstract class ItemEntityRendererMixin { @Final private ItemModelManager itemModelManager; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At("HEAD"), cancellable = true) - private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo ci) { - RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, vertexConsumerProvider, i, this.itemModelManager)); + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + // todo fix to work with entity render batching + RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager)); if (event.isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index a3b8586969..1cf5bc8ceb 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -14,17 +14,19 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.player.PlayerUtils; +import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.LivingEntityRenderer; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.state.LivingEntityRenderState; +import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.scoreboard.Team; +import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -62,12 +64,12 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/model/EntityModel;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;III)V")) - private boolean render$render(M instance, MatrixStack matrixStack, VertexConsumer vertexConsumer, int light, int overlay, int color, S state, MatrixStack matrices, VertexConsumerProvider consumers, int i) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;pushModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;II)V")) + private boolean render$render(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, int order) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; - instance.render(matrixStack, vertexConsumer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked()); + instance.pushModel(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, order); return false; } @@ -88,12 +90,12 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB // Chams - Through walls - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At("HEAD"), cancellable = true) - private void render$Head(S state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void render$Head(S state, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; - if (Modules.get().get(NoRender.class).noDeadEntities() && livingEntity.isDead()) info.cancel(); + if (Modules.get().get(NoRender.class).noDeadEntities() && livingEntity.isDead()) ci.cancel(); if (chams.shouldRender(entity)) { glEnable(GL_POLYGON_OFFSET_FILL); @@ -101,8 +103,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB } } - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", at = @At("TAIL")) - private void render$Tail(S state, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, CallbackInfo info) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("TAIL")) + private void render$Tail(S state, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index fb5993d294..8f9ca86e0d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java @@ -8,9 +8,9 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.class_11659; import net.minecraft.client.render.MapRenderState; import net.minecraft.client.render.MapRenderer; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.map.MapDecoration; import org.spongepowered.asm.mixin.Mixin; @@ -28,7 +28,7 @@ private List getIconsProxy(List original) { } @Inject(method = "draw", at = @At("HEAD"), cancellable = true) - private void onDraw(MapRenderState state, MatrixStack matrices, class_11659 arg, boolean bl, int light, CallbackInfo ci) { + private void onDraw(MapRenderState state, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, boolean bl, int light, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMapContents()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TextRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TextRendererMixin.java index 9fdfc235a0..35e2b80f9e 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TextRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TextRendererMixin.java @@ -8,12 +8,13 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import net.minecraft.client.font.TextRenderer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Mixin(targets = "net.minecraft.client.font.TextRenderer$Drawer") +@Mixin(TextRenderer.class) public abstract class TextRendererMixin { - @ModifyExpressionValue(method = "accept", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Style;isObfuscated()Z")) + @ModifyExpressionValue(method = "getGlyph", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/Style;isObfuscated()Z")) private boolean onRenderObfuscatedStyle(boolean original) { if (Modules.get() == null || Modules.get().get(NoRender.class) == null) { return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 7cd0cf805f..f116039ff9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -6,21 +6,14 @@ package meteordevelopment.meteorclient.mixin; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.llamalad7.mixinextras.sugar.Local; -import com.llamalad7.mixinextras.sugar.ref.LocalRef; import com.mojang.blaze3d.buffers.GpuBufferSlice; import it.unimi.dsi.fastutil.Stack; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import meteordevelopment.meteorclient.mixininterface.IWorldRenderer; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BlockSelection; -import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import meteordevelopment.meteorclient.utils.render.color.Color; -import meteordevelopment.meteorclient.utils.render.postprocess.EntityShader; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.block.BlockState; import net.minecraft.client.gl.Framebuffer; @@ -47,11 +40,6 @@ @Mixin(WorldRenderer.class) public abstract class WorldRendererMixin implements IWorldRenderer { - @Unique private ESP esp; - - @Shadow - protected abstract void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers); - @Inject(method = "checkEmpty", at = @At("HEAD"), cancellable = true) private void onCheckEmpty(MatrixStack matrixStack, CallbackInfo info) { info.cancel(); @@ -100,6 +88,11 @@ private void onRenderHead(ObjectAllocator allocator, PostProcessShaders.beginRender(); } + /* + todo Entity rendering is batched in pushEntityRenders before they are all rendered at once by calling + net.minecraft.client.render.entity.command.EntityRenderDispatcher.render + Our renders need to be rewritten + @Inject(method = "renderEntity", at = @At("HEAD")) private void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo info) { draw(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, PostProcessShaders.CHAMS, Color.WHITE); @@ -119,37 +112,18 @@ private void draw(Entity entity, double cameraX, double cameraY, double cameraZ, meteor$popEntityOutlineFramebuffer(); } } + */ @Inject(method = "method_62214", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;draw()V")) private void onRender(CallbackInfo ci) { PostProcessShaders.endRender(); } - @WrapOperation(method = "renderEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;setColor(IIII)V")) - private void setGlowColor(OutlineVertexConsumerProvider instance, int red, int green, int blue, int alpha, Operation original, @Local LocalRef entity) { - if (!getESP().isGlow() || getESP().shouldSkip(entity.get())) original.call(instance, red, green, blue, alpha); - else { - Color color = getESP().getColor(entity.get()); - - if (color == null) original.call(instance, red, green, blue, alpha); - else instance.setColor(color.getPacked()); - } - } - @Inject(method = "onResized", at = @At("HEAD")) private void onResized(int width, int height, CallbackInfo info) { PostProcessShaders.onResized(width, height); } - @Unique - private ESP getESP() { - if (esp == null) { - esp = Modules.get().get(ESP.class); - } - - return esp; - } - // IWorldRenderer @Shadow diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java index b930f6927a..2972f075c7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java @@ -17,6 +17,7 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket; +import net.minecraft.util.math.Vec3d; public class Velocity extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -151,12 +152,12 @@ private void onTick(TickEvent.Post event) { private void onPacketReceive(PacketEvent.Receive event) { if (knockback.get() && event.packet instanceof EntityVelocityUpdateS2CPacket packet && packet.getEntityId() == mc.player.getId()) { - double velX = (packet.getVelocityX() - mc.player.getVelocity().x) * knockbackHorizontal.get(); - double velY = (packet.getVelocityY() - mc.player.getVelocity().y) * knockbackVertical.get(); - double velZ = (packet.getVelocityZ() - mc.player.getVelocity().z) * knockbackHorizontal.get(); - ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setX((int) (velX * 8000 + mc.player.getVelocity().x * 8000)); - ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setY((int) (velY * 8000 + mc.player.getVelocity().y * 8000)); - ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setZ((int) (velZ * 8000 + mc.player.getVelocity().z * 8000)); + double velX = (packet.method_73085().getX() - mc.player.getVelocity().x) * knockbackHorizontal.get(); + double velY = (packet.method_73085().getY() - mc.player.getVelocity().y) * knockbackVertical.get(); + double velZ = (packet.method_73085().getZ() - mc.player.getVelocity().z) * knockbackHorizontal.get(); + ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setVelocity( + new Vec3d(velX * 8000 + mc.player.getVelocity().x * 8000, velY * 8000 + mc.player.getVelocity().y * 8000, velZ * 8000 + mc.player.getVelocity().z * 8000) + ); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 4bdb026a06..36bbc9447d 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -12,13 +12,13 @@ import meteordevelopment.meteorclient.renderer.Renderer3D; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.utils.render.color.Color; -import net.minecraft.class_11659; -import net.minecraft.class_11661; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.command.BatchingEntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; @@ -31,7 +31,7 @@ public class WireframeEntityRenderer { private static final MatrixStack matrices = new MatrixStack(); private static Renderer3D renderer; - private static final class_11659 class_11659 = new class_11661(); + private static final EntityRenderCommandQueue entityRenderCommandQueue = new BatchingEntityRenderCommandQueue(); private static Color sideColor; private static Color lineColor; @@ -67,7 +67,7 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo matrices.push(); matrices.scale((float) scale, (float) scale, (float) scale); - renderer.render(state, matrices, class_11659); + renderer.render(state, matrices, entityRenderCommandQueue); // todo this just adds the entities to a list, we need to actually render them somewhere by calling // net.minecraft.class_11688.method_73012 matrices.pop(); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 72c4a4a643..02c9d25136 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.utils.tooltip; -import meteordevelopment.meteorclient.mixin.BlockEntityRenderDispatcherAccessor; +import meteordevelopment.meteorclient.mixin.BlockEntityRenderManagerAccessor; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; @@ -81,7 +81,7 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers(); BannerBlockEntityRenderer.renderCanvas( - ((BlockEntityRenderDispatcherAccessor) mc.getBlockEntityRenderDispatcher()).getField_61783(), + ((BlockEntityRenderManagerAccessor) mc.getBlockEntityRenderDispatcher()).getSpriteHolder(), matrices, immediate, 15728880, diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java index 7bdfd93914..bf15394c41 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java @@ -65,7 +65,7 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he matrices2.scale((float) scale, (float) scale, 0); matrices2.translate(8, 8, 0); mc.getMapRenderer().update(new MapIdComponent(mapId), mapState, mapRenderState); - mc.getMapRenderer().draw(mapRenderState, matrices2, mc.gameRenderer.method_72910(), false, 0xF000F0); + mc.getMapRenderer().draw(mapRenderState, matrices2, mc.gameRenderer.getEntityRenderCommandQueue(), false, 0xF000F0); matrices2.pop(); } } diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 00753655dc..a38b6622d6 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -23,8 +23,8 @@ "BiomeColorsMixin", "BlockCollisionSpliteratorMixin", "BlockColorsMixin", - "BlockEntityRenderDispatcherAccessor", - "BlockEntityRenderDispatcherMixin", + "BlockEntityRenderManagerAccessor", + "BlockEntityRenderManagerMixin", "BlockHitResultAccessor", "BlockItemMixin", "BlockMixin", From ccd0be163265b92baef437f0b68bef47621f7ecb Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 12 Aug 2025 18:42:10 +0100 Subject: [PATCH 03/38] update to 25w33a --- gradle.properties | 6 +++--- .../meteordevelopment/meteorclient/MeteorClient.java | 2 +- .../meteorclient/mixin/CompassStateMixin.java | 8 ++++---- .../mixin/EntityVelocityUpdateS2CPacketAccessor.java | 2 +- .../meteorclient/mixin/FishingBobberEntityMixin.java | 2 +- .../meteorclient/mixin/PlayerEntityMixin.java | 10 +++++----- .../meteorclient/mixin/ServerPlayerEntityMixin.java | 2 +- .../meteorclient/systems/modules/combat/BowAimbot.java | 2 +- .../meteorclient/systems/modules/combat/KillAura.java | 2 +- .../meteorclient/systems/modules/movement/Flight.java | 2 +- .../meteorclient/systems/modules/player/NoRotate.java | 6 +++--- .../meteorclient/systems/modules/render/ESP.java | 2 +- .../meteorclient/systems/modules/render/Freecam.java | 2 +- .../meteorclient/systems/modules/render/Nametags.java | 2 +- .../meteorclient/utils/misc/FakeClientPlayer.java | 4 +++- .../meteorclient/utils/player/Rotations.java | 4 ++-- 16 files changed, 30 insertions(+), 28 deletions(-) diff --git a/gradle.properties b/gradle.properties index 213e856de5..6246b7c003 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w32a -yarn_mappings=25w32a+build.1 +minecraft_version=25w33a +yarn_mappings=25w33a+build.5 loader_version=0.17.0 -fapi_version=0.131.1+1.21.9 +fapi_version=0.131.3+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java index 27668a514d..46abc1d315 100644 --- a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java +++ b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java @@ -150,7 +150,7 @@ public void onInitializeClient() { @EventHandler private void onTick(TickEvent.Post event) { if (mc.currentScreen == null && mc.getOverlay() == null && KeyBinds.OPEN_COMMANDS.wasPressed()) { - mc.setScreen(new ChatScreen(Config.get().prefix.get())); + mc.setScreen(new ChatScreen(Config.get().prefix.get(), true)); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java index 31b3351925..723cc2f4d2 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java @@ -11,7 +11,7 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import net.minecraft.client.render.Camera; import net.minecraft.client.render.item.property.numeric.CompassState; -import net.minecraft.util.EntityPos; +import net.minecraft.util.HeldItemContext; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; @@ -21,14 +21,14 @@ @Mixin(CompassState.class) public abstract class CompassStateMixin { - @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/EntityPos;getBodyYaw()F")) + @ModifyExpressionValue(method = "getBodyYaw", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/HeldItemContext;getBodyYaw()F")) private static float callLivingEntityGetYaw(float original) { if (Modules.get().isActive(Freecam.class)) return mc.gameRenderer.getCamera().getYaw(); return original; } - @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/util/EntityPos;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) - private static double modifyGetAngleTo(double original, EntityPos from, BlockPos to) { + @ModifyReturnValue(method = "getAngleTo(Lnet/minecraft/util/HeldItemContext;Lnet/minecraft/util/math/BlockPos;)D", at = @At("RETURN")) + private static double modifyGetAngleTo(double original, HeldItemContext from, BlockPos to) { if (Modules.get().isActive(Freecam.class)) { Vec3d vec3d = Vec3d.ofCenter(to); Camera camera = mc.gameRenderer.getCamera(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java index 8330617c50..e4993afe5f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityVelocityUpdateS2CPacketAccessor.java @@ -14,7 +14,7 @@ @Mixin(EntityVelocityUpdateS2CPacket.class) public interface EntityVelocityUpdateS2CPacketAccessor { @Mutable - @Accessor("field_61887") + @Accessor("velocity") void meteor$setVelocity(Vec3d velocity); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java index 23b53d2ce8..ecd31e046f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java @@ -20,7 +20,7 @@ public abstract class FishingBobberEntityMixin { @WrapOperation(method = "handleStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/projectile/FishingBobberEntity;pullHookedEntity(Lnet/minecraft/entity/Entity;)V")) private void preventFishingRodPull(FishingBobberEntity instance, Entity entity, Operation original) { - if (!instance.getWorld().isClient() || entity != mc.player) original.call(instance, entity); + if (!instance.world().isClient() || entity != mc.player) original.call(instance, entity); Velocity velocity = Modules.get().get(Velocity.class); if (!velocity.isActive() || !velocity.fishing.get()) original.call(instance, entity); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java index e66acc2370..2377e95257 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java @@ -47,7 +47,7 @@ protected PlayerEntityMixin(EntityType entityType, World @Inject(method = "clipAtLedge", at = @At("HEAD"), cancellable = true) protected void clipAtLedge(CallbackInfoReturnable info) { - if (!getWorld().isClient()) return; + if (!world().isClient()) return; ClipAtLedgeEvent event = MeteorClient.EVENT_BUS.post(ClipAtLedgeEvent.get()); if (event.isSet()) info.setReturnValue(event.isClip()); @@ -55,7 +55,7 @@ protected void clipAtLedge(CallbackInfoReturnable info) { @Inject(method = "dropItem", at = @At("HEAD"), cancellable = true) private void onDropItem(ItemStack stack, boolean retainOwnership, CallbackInfoReturnable cir) { - if (getWorld().isClient() && !stack.isEmpty()) { + if (world().isClient() && !stack.isEmpty()) { if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(stack)).isCancelled()) cir.setReturnValue(null); } } @@ -72,7 +72,7 @@ private void onIsCreative(CallbackInfoReturnable info) { @ModifyReturnValue(method = "getBlockBreakingSpeed", at = @At(value = "RETURN")) public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { - if (!getWorld().isClient()) return breakSpeed; + if (!world().isClient()) return breakSpeed; SpeedMine speedMine = Modules.get().get(SpeedMine.class); if (!speedMine.isActive() || speedMine.mode.get() != SpeedMine.Mode.Normal || !speedMine.filter(block.getBlock())) return breakSpeed; @@ -93,7 +93,7 @@ public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { @ModifyReturnValue(method = "getMovementSpeed", at = @At("RETURN")) private float onGetMovementSpeed(float original) { - if (!getWorld().isClient()) return original; + if (!world().isClient()) return original; if (!Modules.get().get(NoSlow.class).slowness()) return original; float walkSpeed = getAbilities().getWalkSpeed(); @@ -108,7 +108,7 @@ private float onGetMovementSpeed(float original) { @Inject(method = "getOffGroundSpeed", at = @At("HEAD"), cancellable = true) private void onGetOffGroundSpeed(CallbackInfoReturnable info) { - if (!getWorld().isClient()) return; + if (!world().isClient()) return; float speed = Modules.get().get(Flight.class).getOffGroundSpeed(); if (speed != -1) info.setReturnValue(speed); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java index c6c95821cc..10af2cedf3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java @@ -25,7 +25,7 @@ protected ServerPlayerEntityMixin(EntityType entityType, @Inject(method = "jump", at = @At("HEAD"), cancellable = true) public void dontJump(CallbackInfo ci) { - if (!getWorld().isClient()) return; + if (!world().isClient()) return; Anchor module = Modules.get().get(Anchor.class); if (module.isActive() && module.cancelJump) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BowAimbot.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BowAimbot.java index 26c5104288..0b32b86eca 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BowAimbot.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BowAimbot.java @@ -97,7 +97,7 @@ private void onRender(Render3DEvent event) { if (!mc.player.getAbilities().creativeMode && !InvUtils.find(itemStack -> itemStack.getItem() instanceof ArrowItem).found()) return; target = TargetUtils.get(entity -> { - if (entity == mc.player || entity == mc.cameraEntity) return false; + if (entity == mc.player || entity == mc.getCameraEntity()) return false; if ((entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) || !entity.isAlive()) return false; if (!PlayerUtils.isWithin(entity, range.get())) return false; if (!entities.get().contains(entity.getType())) return false; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java index bb40111e86..178c69fb3c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java @@ -380,7 +380,7 @@ private boolean shouldShieldBreak() { } private boolean entityCheck(Entity entity) { - if (entity.equals(mc.player) || entity.equals(mc.cameraEntity)) return false; + if (entity.equals(mc.player) || entity.equals(mc.getCameraEntity())) return false; if ((entity instanceof LivingEntity livingEntity && livingEntity.isDead()) || !entity.isAlive()) return false; Box hitbox = entity.getBoundingBox(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java index e882d06ac6..c65fdac6e9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java @@ -253,7 +253,7 @@ private void abilitiesOff() { // Copied from ServerPlayNetworkHandler#isEntityOnAir private boolean isEntityOnAir(Entity entity) { - return entity.getWorld().getStatesInBox(entity.getBoundingBox().expand(0.0625).stretch(0.0, -0.55, 0.0)).allMatch(AbstractBlock.AbstractBlockState::isAir); + return entity.world().getStatesInBox(entity.getBoundingBox().expand(0.0625).stretch(0.0, -0.55, 0.0)).allMatch(AbstractBlock.AbstractBlockState::isAir); } public float getOffGroundSpeed() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java index f6d6340c6d..bf4bdf24a4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java @@ -9,7 +9,7 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; -import net.minecraft.entity.player.PlayerPosition; +import net.minecraft.entity.EntityPosition; import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket; public class NoRotate extends Module { @@ -20,8 +20,8 @@ public NoRotate() { @EventHandler private void onReceivePacket(PacketEvent.Receive event) { if (event.packet instanceof PlayerPositionLookS2CPacket packet) { - PlayerPosition oldPosition = packet.change(); - PlayerPosition newPosition = new PlayerPosition( + EntityPosition oldPosition = packet.change(); + EntityPosition newPosition = new EntityPosition( oldPosition.position(), oldPosition.deltaMovement(), mc.player.getYaw(), diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index 4fbd329724..4ea3267313 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -300,7 +300,7 @@ private boolean checkCorner(double x, double y, double z, Vector3d min, Vector3d public boolean shouldSkip(Entity entity) { if (!entities.get().contains(entity.getType())) return true; if (entity == mc.player && ignoreSelf.get()) return true; - if (entity == mc.cameraEntity && mc.options.getPerspective().isFirstPerson()) return true; + if (entity == mc.getCameraEntity() && mc.options.getPerspective().isFirstPerson()) return true; return !EntityUtils.isInRenderDistance(entity); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java index e79ba5a800..96a9623f9c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java @@ -209,7 +209,7 @@ private void unpress() { @EventHandler private void onTick(TickEvent.Post event) { - if (mc.cameraEntity.isInsideWall()) mc.getCameraEntity().noClip = true; + if (mc.getCameraEntity().isInsideWall()) mc.getCameraEntity().noClip = true; if (!perspective.isFirstPerson()) mc.options.setPerspective(Perspective.FIRST_PERSON); Vec3d forward = Vec3d.fromPolar(0, yaw); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Nametags.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Nametags.java index 7de7594abf..ccf56bef3a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Nametags.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Nametags.java @@ -443,7 +443,7 @@ private void renderNametagPlayer(Render2DEvent event, PlayerEntity player, boole double width = nameWidth; - boolean renderPlayerDistance = player != mc.cameraEntity || Modules.get().isActive(Freecam.class); + boolean renderPlayerDistance = player != mc.getCameraEntity() || Modules.get().isActive(Freecam.class); if (displayHealth.get()) width += healthWidth; if (displayGameMode.get()) width += gmWidth; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java index 028791af51..592b066bd0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java @@ -56,7 +56,9 @@ public static PlayerEntity getPlayer() { null, null, null, - null) + null, + null, + false) ), new ClientWorld.Properties(Difficulty.NORMAL, false, false), world.getRegistryKey(), diff --git a/src/main/java/meteordevelopment/meteorclient/utils/player/Rotations.java b/src/main/java/meteordevelopment/meteorclient/utils/player/Rotations.java index c10c4fff17..48dad606ab 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/player/Rotations.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/player/Rotations.java @@ -85,7 +85,7 @@ private static void resetLastRotation() { @EventHandler private static void onSendMovementPacketsPre(SendMovementPacketsEvent.Pre event) { - if (mc.cameraEntity != mc.player) return; + if (mc.getCameraEntity() != mc.player) return; sentLastRotation = false; if (!rotations.isEmpty()) { @@ -127,7 +127,7 @@ private static void setClientRotation(Rotation rotation) { @EventHandler private static void onSendMovementPacketsPost(SendMovementPacketsEvent.Post event) { if (!rotations.isEmpty()) { - if (mc.cameraEntity == mc.player) { + if (mc.getCameraEntity() == mc.player) { rotations.get(i - 1).runCallback(); if (rotations.size() == 1) lastRotation = rotations.get(i - 1); From e60837583e66b8df8cc8c33ef41610334eecd532 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Wed, 20 Aug 2025 17:24:19 +0100 Subject: [PATCH 04/38] update to 25w34b --- gradle.properties | 6 +-- .../events/render/RenderItemEntityEvent.java | 5 ++- .../mixin/BannerBlockEntityRendererMixin.java | 44 +++++++++++-------- .../mixin/BeaconBlockEntityRendererMixin.java | 6 ++- .../mixin/BlockEntityRenderManagerMixin.java | 10 +++-- ...chantingTableBlockEntityRendererMixin.java | 11 +++-- .../mixin/EndCrystalEntityRendererMixin.java | 16 +++---- .../mixin/FishingBobberEntityMixin.java | 2 +- .../mixin/HeldItemRendererMixin.java | 12 ++--- .../mixin/ItemEntityRendererMixin.java | 2 +- .../mixin/LivingEntityRendererMixin.java | 8 ++-- .../mixin/MinecraftClientAccessor.java | 22 +++------- .../mixin/MultiplayerScreenMixin.java | 2 +- .../meteorclient/mixin/PlayerEntityMixin.java | 10 ++--- .../mixin/PlayerEntityRendererMixin.java | 12 ++--- .../mixin/ServerPlayerEntityMixin.java | 2 +- .../systems/accounts/Account.java | 21 ++++----- .../accounts/types/TheAlteningAccount.java | 6 +-- .../systems/modules/movement/Flight.java | 2 +- .../systems/modules/render/EntityOwner.java | 2 +- .../systems/modules/render/ItemPhysics.java | 2 +- .../utils/render/SimpleBlockRenderer.java | 2 +- .../utils/tooltip/BannerTooltipComponent.java | 10 ++--- 23 files changed, 110 insertions(+), 105 deletions(-) diff --git a/gradle.properties b/gradle.properties index 6246b7c003..4a4c479f1e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w33a -yarn_mappings=25w33a+build.5 +minecraft_version=25w34b +yarn_mappings=25w34b+build.1 loader_version=0.17.0 -fapi_version=0.131.3+1.21.9 +fapi_version=0.132.1+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java index 14cd7fbcf4..901903d135 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java @@ -9,6 +9,7 @@ import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import net.minecraft.client.item.ItemModelManager; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.ItemEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.ItemEntity; @@ -23,8 +24,9 @@ public class RenderItemEntityEvent extends Cancellable { public VertexConsumerProvider vertexConsumerProvider; public int light; public ItemModelManager itemModelManager; + public EntityRenderCommandQueue renderCommandQueue; - public static RenderItemEntityEvent get(ItemEntityRenderState renderState, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, ItemModelManager itemModelManager) { + public static RenderItemEntityEvent get(ItemEntityRenderState renderState, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, ItemModelManager itemModelManager, EntityRenderCommandQueue renderCommandQueue) { INSTANCE.setCancelled(false); INSTANCE.itemEntity = (ItemEntity) ((IEntityRenderState) renderState).meteor$getEntity(); INSTANCE.renderState = renderState; @@ -33,6 +35,7 @@ public static RenderItemEntityEvent get(ItemEntityRenderState renderState, float INSTANCE.vertexConsumerProvider = vertexConsumerProvider; INSTANCE.light = light; INSTANCE.itemModelManager = itemModelManager; + INSTANCE.renderCommandQueue = renderCommandQueue; return INSTANCE; } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 719cf10180..698f9d5ca4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -5,22 +5,25 @@ package meteordevelopment.meteorclient.mixin; -import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BannerBlockEntity; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; +import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.render.model.ModelBaker; import net.minecraft.client.texture.SpriteHolder; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.component.type.BannerPatternsComponent; +import net.minecraft.util.DyeColor; +import net.minecraft.util.Unit; import net.minecraft.util.math.RotationAxis; import net.minecraft.util.math.Vec3d; -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.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -28,33 +31,38 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Shadow - public abstract void render(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d); - - @Shadow - @Final - private SpriteHolder field_61779; - - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(BannerBlockEntity bannerBlockEntity, float f, MatrixStack matrixStack, int i, int j, Vec3d vec3d, ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;)V"), cancellable = true) - private void injectRender2(BannerBlockEntity bannerBlockEntity, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, Vec3d vec3d, CallbackInfo ci, @Local(ordinal = 1) float rotation, @Local BannerBlockModel bannerBlockModel) { + @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V"), cancellable = true) + private static void injectRender2(SpriteHolder spriteHolder, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel bannerBlockModel, BannerFlagBlockModel bannerFlagBlockModel, float g, DyeColor dyeColor, BannerPatternsComponent bannerPatternsComponent, ModelCommandRenderer.class_11792 arg, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { - renderPillar(matrixStack, vertexConsumerProvider, light, overlay, rotation, bannerBlockModel); + renderPillar(matrixStack, entityRenderCommandQueue, light, overlay, rotation, bannerBlockModel, spriteHolder, arg); ci.cancel(); } } @Unique - private void renderPillar(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, float rotation, BannerBlockModel model) { + private static void renderPillar(MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel model, SpriteHolder spriteHolder, ModelCommandRenderer.class_11792 arg) { matrices.push(); matrices.translate(0.5F, 0.0F, 0.5F); matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(rotation)); matrices.scale(0.6666667F, -0.6666667F, -0.6666667F); - model.render(matrices, ModelBaker.BANNER_BASE.getVertexConsumer(this.field_61779, vertexConsumers, RenderLayer::getEntitySolid), light, overlay); + SpriteIdentifier spriteIdentifier = ModelBaker.BANNER_BASE; + entityRenderCommandQueue.method_73490( + model, + Unit.INSTANCE, + matrices, + spriteIdentifier.getRenderLayer(RenderLayer::getEntitySolid), + light, + overlay, + -1, + spriteHolder.getSprite(spriteIdentifier), + 0, + arg + ); matrices.pop(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java index 7f8c3a9d4e..53d986f942 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java @@ -9,11 +9,13 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BeamEmitter; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Vec3d; +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; @@ -22,7 +24,7 @@ @Mixin(BeaconBlockEntityRenderer.class) public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRender(T entity, float tickProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, Vec3d cameraPos, CallbackInfo ci) { + private void onRender(T entity, float tickProgress, MatrixStack matrices, int i, int light, Vec3d vec3d, @Nullable ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noBeaconBeams()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 397ff0a358..f68749de6c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -8,9 +8,11 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.util.math.MatrixStack; +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; @@ -18,9 +20,9 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { - @Inject(method = "render(Lnet/minecraft/block/entity/BlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(E blockEntity, float tickDelta, MatrixStack matrix, VertexConsumerProvider vertexConsumerProvider, CallbackInfo info) { + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void onRenderEntity(E blockEntity, float tickProgress, MatrixStack matrices, @Nullable ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); - if (event.isCancelled()) info.cancel(); + if (event.isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java index c3a97b0075..b3b54dafb9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java @@ -8,17 +8,20 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.model.Model; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.EnchantingTableBlockEntityRenderer; -import net.minecraft.client.render.entity.model.BookModel; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; +import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @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;IILnet/minecraft/util/math/Vec3d;)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) { + @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) + private boolean onRenderBookModelRenderProxy(EntityRenderCommandQueue instance, Model model, Object o, MatrixStack matrixStack, RenderLayer renderLayer, int i, int j, int k, Sprite sprite, int l, ModelCommandRenderer.class_11792 class11792) { return !Modules.get().get(NoRender.class).noEnchTableBook(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index 7f00f9610c..ebab5eac56 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -9,10 +9,10 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; import net.minecraft.client.model.Model; -import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.EndCrystalEntityRenderer; import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.render.entity.state.EndCrystalEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; @@ -61,19 +61,19 @@ private void onInit(CallbackInfo info) { // Chams - Color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;pushModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;III)V")) - private boolean render$color(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int outlineColor) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73489(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) + private boolean render$color(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrices, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.class_11792 class11792) { if (chams.isActive() && chams.crystals.get()) { - instance.pushModel(model, + instance.method_73490(model, state, matrices, END_CRYSTAL, - ((EndCrystalEntityRenderState) state).light, - OverlayTexture.DEFAULT_UV, + light, + uv, chams.crystalsColor.get().getPacked(), null, - ((EndCrystalEntityRenderState) state).outlineColor, - 0); + outlineColor, + null); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java index ecd31e046f..e9b8fd287d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java @@ -20,7 +20,7 @@ public abstract class FishingBobberEntityMixin { @WrapOperation(method = "handleStatus", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/projectile/FishingBobberEntity;pullHookedEntity(Lnet/minecraft/entity/Entity;)V")) private void preventFishingRodPull(FishingBobberEntity instance, Entity entity, Operation original) { - if (!instance.world().isClient() || entity != mc.player) original.call(instance, entity); + if (!instance.getEntityWorld().isClient() || entity != mc.player) original.call(instance, entity); Velocity velocity = Modules.get().get(Velocity.class); if (!velocity.isActive() || !velocity.fishing.get()) original.call(instance, entity); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java index fcea6516b8..c778f4c5f8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java @@ -13,7 +13,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.HandView; import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.item.HeldItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; @@ -47,7 +47,7 @@ public abstract class HeldItemRendererMixin { @Shadow protected abstract boolean shouldSkipHandAnimationOnSwap(ItemStack from, ItemStack to); - @ModifyVariable(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At(value = "STORE", ordinal = 0), index = 6) + @ModifyVariable(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At(value = "STORE", ordinal = 0), index = 6) private float modifySwing(float swingProgress) { HandView module = Modules.get().get(HandView.class); Hand hand = MoreObjects.firstNonNull(mc.player.preferredHand, Hand.MAIN_HAND); @@ -82,13 +82,13 @@ private float modifyEquipProgressOffhand(float value) { return (shouldSkipHandAnimationOnSwap(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/item/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;I)V", shift = At.Shift.BEFORE)) - 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) { + @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/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;I)V", shift = At.Shift.BEFORE)) + private void onRenderItem(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(HeldItemRendererEvent.get(hand, matrices)); } - @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderArmHoldingItem(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IFFLnet/minecraft/util/Arm;)V")) - private void onRenderArm(AbstractClientPlayerEntity player, float tickDelta, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, CallbackInfo ci) { + @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderArmHoldingItem(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;IFFLnet/minecraft/util/Arm;)V")) + private void onRenderArm(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(ArmRenderEvent.get(hand, matrices)); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java index 57d653dc0d..bfa2ce1a8b 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -30,7 +30,7 @@ public abstract class ItemEntityRendererMixin { @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { // todo fix to work with entity render batching - RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager)); + RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager, entityRenderCommandQueue)); if (event.isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index 1cf5bc8ceb..5d8dc9cadc 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -18,6 +18,7 @@ import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.client.texture.Sprite; @@ -26,7 +27,6 @@ import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.scoreboard.Team; -import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -64,12 +64,12 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;pushModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;II)V")) - private boolean render$render(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, int order) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) + private boolean render$render(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.class_11792 class11792) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; - instance.pushModel(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, order); + instance.method_73490(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, null); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java index 57b5ecb430..ed2c2919c8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java @@ -5,10 +5,8 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.authlib.minecraft.MinecraftSessionService; import com.mojang.authlib.minecraft.UserApiService; import com.mojang.authlib.yggdrasil.ProfileResult; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.SocialInteractionsManager; import net.minecraft.client.resource.ResourceReloadLogger; @@ -16,12 +14,12 @@ import net.minecraft.client.session.Session; import net.minecraft.client.session.report.AbuseReportContext; import net.minecraft.client.texture.PlayerSkinProvider; +import net.minecraft.util.ApiServices; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mutable; import org.spongepowered.asm.mixin.gen.Accessor; import org.spongepowered.asm.mixin.gen.Invoker; -import java.net.Proxy; import java.util.concurrent.CompletableFuture; @Mixin(MinecraftClient.class) @@ -35,9 +33,6 @@ public interface MinecraftClientAccessor { @Accessor("session") void meteor$setSession(Session session); - @Accessor("networkProxy") - Proxy meteor$getProxy(); - @Accessor("resourceReloadLogger") ResourceReloadLogger meteor$getResourceReloadLogger(); @@ -54,21 +49,10 @@ public interface MinecraftClientAccessor { @Accessor("profileKeys") void meteor$setProfileKeys(ProfileKeys keys); - @Accessor("authenticationService") - YggdrasilAuthenticationService meteor$getAuthenticationService(); - @Mutable @Accessor("userApiService") void meteor$setUserApiService(UserApiService apiService); - @Mutable - @Accessor("sessionService") - void meteor$setSessionService(MinecraftSessionService sessionService); - - @Mutable - @Accessor("authenticationService") - void meteor$setAuthenticationService(YggdrasilAuthenticationService authenticationService); - @Mutable @Accessor("skinProvider") void meteor$setSkinProvider(PlayerSkinProvider skinProvider); @@ -84,4 +68,8 @@ public interface MinecraftClientAccessor { @Mutable @Accessor("gameProfileFuture") void meteor$setGameProfileFuture(CompletableFuture future); + + @Mutable + @Accessor("field_62106") + void meteor$setApiServices(ApiServices apiServices); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java index 85e051fb80..a1e6b94bcd 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java @@ -63,7 +63,7 @@ private void onInit(CallbackInfo info) { ); } - @Inject(method = "render", at = @At("TAIL")) + //@Inject(method = "render", at = @At("TAIL")) private void onRender(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { int x = 3; int y = 3; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java index 2377e95257..71e8f01c61 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java @@ -47,7 +47,7 @@ protected PlayerEntityMixin(EntityType entityType, World @Inject(method = "clipAtLedge", at = @At("HEAD"), cancellable = true) protected void clipAtLedge(CallbackInfoReturnable info) { - if (!world().isClient()) return; + if (!getEntityWorld().isClient()) return; ClipAtLedgeEvent event = MeteorClient.EVENT_BUS.post(ClipAtLedgeEvent.get()); if (event.isSet()) info.setReturnValue(event.isClip()); @@ -55,7 +55,7 @@ protected void clipAtLedge(CallbackInfoReturnable info) { @Inject(method = "dropItem", at = @At("HEAD"), cancellable = true) private void onDropItem(ItemStack stack, boolean retainOwnership, CallbackInfoReturnable cir) { - if (world().isClient() && !stack.isEmpty()) { + if (getEntityWorld().isClient() && !stack.isEmpty()) { if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(stack)).isCancelled()) cir.setReturnValue(null); } } @@ -72,7 +72,7 @@ private void onIsCreative(CallbackInfoReturnable info) { @ModifyReturnValue(method = "getBlockBreakingSpeed", at = @At(value = "RETURN")) public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { - if (!world().isClient()) return breakSpeed; + if (!getEntityWorld().isClient()) return breakSpeed; SpeedMine speedMine = Modules.get().get(SpeedMine.class); if (!speedMine.isActive() || speedMine.mode.get() != SpeedMine.Mode.Normal || !speedMine.filter(block.getBlock())) return breakSpeed; @@ -93,7 +93,7 @@ public float onGetBlockBreakingSpeed(float breakSpeed, BlockState block) { @ModifyReturnValue(method = "getMovementSpeed", at = @At("RETURN")) private float onGetMovementSpeed(float original) { - if (!world().isClient()) return original; + if (!getEntityWorld().isClient()) return original; if (!Modules.get().get(NoSlow.class).slowness()) return original; float walkSpeed = getAbilities().getWalkSpeed(); @@ -108,7 +108,7 @@ private float onGetMovementSpeed(float original) { @Inject(method = "getOffGroundSpeed", at = @At("HEAD"), cancellable = true) private void onGetOffGroundSpeed(CallbackInfoReturnable info) { - if (!world().isClient()) return; + if (!getEntityWorld().isClient()) return; float speed = Modules.get().get(Flight.class).getOffGroundSpeed(); if (speed != -1) info.setReturnValue(speed); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java index 60e33cedce..5f7ea1c085 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -14,10 +14,10 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.PlayerEntityRenderer; +import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; +import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; @@ -57,7 +57,7 @@ public abstract class PlayerEntityRendererMixin { // Chams - Hand Texture @ModifyExpressionValue(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntityTranslucent(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;")) - private RenderLayer renderArm$texture(RenderLayer original, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, Identifier skinTexture, ModelPart arm, boolean sleeveVisible) { + private RenderLayer renderArm$texture(RenderLayer original, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int light, Identifier skinTexture, ModelPart modelPart, boolean sleeveVisible) { if (chams.isActive() && chams.hand.get()) { Identifier texture = chams.handTexture.get() ? skinTexture : Chams.BLANK; return RenderLayer.getEntityTranslucent(texture); @@ -68,10 +68,10 @@ public abstract class PlayerEntityRendererMixin { // Chams - Hand Color - @WrapWithCondition(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/model/ModelPart;render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;II)V")) - private boolean renderArm$color(ModelPart instance, MatrixStack matrices, VertexConsumer vertices, int light, int overlay) { + @WrapWithCondition(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73491(Lnet/minecraft/client/model/ModelPart;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IILnet/minecraft/client/texture/Sprite;)V")) + private boolean renderArm$color(EntityRenderCommandQueue instance, ModelPart modelPart, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, Sprite sprite) { if (chams.isActive() && chams.hand.get()) { - instance.render(matrices, vertices, light, overlay, chams.handColor.get().getPacked()); + instance.method_73492(modelPart, matrixStack, renderLayer, light, uv, null, chams.handColor.get().getPacked()); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java index 10af2cedf3..be0bf950b3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java @@ -25,7 +25,7 @@ protected ServerPlayerEntityMixin(EntityType entityType, @Inject(method = "jump", at = @At("HEAD"), cancellable = true) public void dontJump(CallbackInfo ci) { - if (!world().isClient()) return; + if (!getEntityWorld().isClient()) return; Anchor module = Modules.get().get(Anchor.class); if (module.isActive() && module.cancelJump) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java index 3b5e19e151..9f3c8c4cb5 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java @@ -5,7 +5,6 @@ package meteordevelopment.meteorclient.systems.accounts; -import com.mojang.authlib.minecraft.MinecraftSessionService; import com.mojang.authlib.minecraft.UserApiService; import com.mojang.authlib.yggdrasil.ServicesKeyType; import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; @@ -22,6 +21,7 @@ import net.minecraft.client.texture.PlayerSkinProvider; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.encryption.SignatureVerifier; +import net.minecraft.util.ApiServices; import net.minecraft.util.Util; import java.nio.file.Path; @@ -44,8 +44,8 @@ protected Account(AccountType type, String name) { public abstract boolean fetchInfo(); public boolean login() { - YggdrasilAuthenticationService authenticationService = new YggdrasilAuthenticationService(((MinecraftClientAccessor) mc).meteor$getProxy()); - applyLoginEnvironment(authenticationService, authenticationService.createMinecraftSessionService()); + YggdrasilAuthenticationService authenticationService = new YggdrasilAuthenticationService(mc.getNetworkProxy()); + applyLoginEnvironment(authenticationService); return true; } @@ -66,23 +66,24 @@ public AccountCache getCache() { public static void setSession(Session session) { MinecraftClientAccessor mca = (MinecraftClientAccessor) mc; mca.meteor$setSession(session); - UserApiService apiService; - apiService = mca.meteor$getAuthenticationService().createUserApiService(session.getAccessToken()); + + YggdrasilAuthenticationService yggdrasilAuthenticationService = new YggdrasilAuthenticationService(mc.getNetworkProxy()); + + UserApiService apiService = yggdrasilAuthenticationService.createUserApiService(session.getAccessToken()); mca.meteor$setUserApiService(apiService); mca.meteor$setSocialInteractionsManager(new SocialInteractionsManager(mc, apiService)); mca.meteor$setProfileKeys(ProfileKeys.create(apiService, session, mc.runDirectory.toPath())); mca.meteor$setAbuseReportContext(AbuseReportContext.create(ReporterEnvironment.ofIntegratedServer(), apiService)); - mca.meteor$setGameProfileFuture(CompletableFuture.supplyAsync(() -> mc.getSessionService().fetchProfile(mc.getSession().getUuidOrNull(), true), Util.getIoWorkerExecutor())); + mca.meteor$setGameProfileFuture(CompletableFuture.supplyAsync(() -> mc.method_73361().sessionService().fetchProfile(mc.getSession().getUuidOrNull(), true), Util.getIoWorkerExecutor())); } - public static void applyLoginEnvironment(YggdrasilAuthenticationService authService, MinecraftSessionService sessService) { + public static void applyLoginEnvironment(YggdrasilAuthenticationService authService) { MinecraftClientAccessor mca = (MinecraftClientAccessor) mc; - mca.meteor$setAuthenticationService(authService); SignatureVerifier.create(authService.getServicesKeySet(), ServicesKeyType.PROFILE_KEY); - mca.meteor$setSessionService(sessService); PlayerSkinProvider.FileCache skinCache = ((PlayerSkinProviderAccessor) mc.getSkinProvider()).meteor$getSkinCache(); Path skinCachePath = ((FileCacheAccessor) skinCache).meteor$getDirectory(); - mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, sessService, mc)); + mca.meteor$setApiServices(ApiServices.create(authService, mc.runDirectory)); + mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, mc.method_73361(), mc)); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java index 0e910ccbef..0ae88fb62f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java @@ -10,8 +10,6 @@ import de.florianmichael.waybackauthlib.InvalidCredentialsException; import de.florianmichael.waybackauthlib.WaybackAuthLib; import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.mixin.MinecraftClientAccessor; -import meteordevelopment.meteorclient.mixin.YggdrasilMinecraftSessionServiceAccessor; import meteordevelopment.meteorclient.systems.accounts.Account; import meteordevelopment.meteorclient.systems.accounts.AccountType; import meteordevelopment.meteorclient.systems.accounts.TokenAccount; @@ -26,7 +24,7 @@ public class TheAlteningAccount extends Account implements TokenAccount { private static final Environment ENVIRONMENT = new Environment("http://sessionserver.thealtening.com", "http://authserver.thealtening.com", "The Altening"); - private static final YggdrasilAuthenticationService SERVICE = new YggdrasilAuthenticationService(((MinecraftClientAccessor) mc).meteor$getProxy(), ENVIRONMENT); + private static final YggdrasilAuthenticationService SERVICE = new YggdrasilAuthenticationService(mc.getNetworkProxy(), ENVIRONMENT); private String token; private @Nullable WaybackAuthLib auth; @@ -59,7 +57,7 @@ public boolean fetchInfo() { @Override public boolean login() { if (auth == null) return false; - applyLoginEnvironment(SERVICE, YggdrasilMinecraftSessionServiceAccessor.meteor$createYggdrasilMinecraftSessionService(SERVICE.getServicesKeySet(), SERVICE.getProxy(), ENVIRONMENT)); + applyLoginEnvironment(SERVICE); try { setSession(new Session(auth.getCurrentProfile().getName(), auth.getCurrentProfile().getId(), auth.getAccessToken(), Optional.empty(), Optional.empty())); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java index c65fdac6e9..c85285fa57 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java @@ -253,7 +253,7 @@ private void abilitiesOff() { // Copied from ServerPlayNetworkHandler#isEntityOnAir private boolean isEntityOnAir(Entity entity) { - return entity.world().getStatesInBox(entity.getBoundingBox().expand(0.0625).stretch(0.0, -0.55, 0.0)).allMatch(AbstractBlock.AbstractBlockState::isAir); + return entity.getEntityWorld().getStatesInBox(entity.getBoundingBox().expand(0.0625).stretch(0.0, -0.55, 0.0)).allMatch(AbstractBlock.AbstractBlockState::isAir); } public float getOffGroundSpeed() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/EntityOwner.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/EntityOwner.java index dfc62934ee..97752de1b7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/EntityOwner.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/EntityOwner.java @@ -99,7 +99,7 @@ private void renderNametag(String name) { private String getOwnerName(LazyEntityReference owner) { // Check if the player is online - @Nullable LivingEntity ownerEntity = owner.resolve(mc.world, LivingEntity.class); + @Nullable LivingEntity ownerEntity = LazyEntityReference.resolve(owner, mc.world, LivingEntity.class); if (ownerEntity instanceof PlayerEntity playerEntity) return playerEntity.getName().getString(); UUID uuid = owner.getUuid(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java index 0eef408ffd..6d1e3171e6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -105,7 +105,7 @@ private void renderLayer(RenderItemEntityEvent event, ModelInfo info) { translate(matrices, info, x, 0, z); } - event.renderState.itemRenderState.render(matrices, event.vertexConsumerProvider, event.light, OverlayTexture.DEFAULT_UV); + event.renderState.itemRenderState.render(matrices, event.renderCommandQueue, event.light, OverlayTexture.DEFAULT_UV, event.renderState.outlineColor); matrices.pop(); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index d5a555190d..9a5349364d 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -41,7 +41,7 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { Vec3d camera = mc.gameRenderer.getCamera().getPos(); - renderer.render(blockEntity, tickDelta, MATRICES, vertexConsumerProvider, LightmapTextureManager.MAX_LIGHT_COORDINATE, OverlayTexture.DEFAULT_UV, camera); + renderer.render(blockEntity, tickDelta, MATRICES, LightmapTextureManager.MAX_LIGHT_COORDINATE, OverlayTexture.DEFAULT_UV, camera, null, mc.gameRenderer.getEntityRenderDispatcher().getQueue()); } vertexConsumerProvider.setOffset(0, 0, 0); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 02c9d25136..1654bde1ed 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -12,8 +12,9 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; +import net.minecraft.client.render.entity.command.BatchingEntityRenderCommandQueue; +import net.minecraft.client.render.entity.command.EntityRenderDispatcher; import net.minecraft.client.render.entity.model.EntityModelLayers; import net.minecraft.client.render.model.ModelBaker; import net.minecraft.client.util.math.MatrixStack; @@ -78,12 +79,13 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he float s = Math.min(width, height); matrices.scale(s * 0.75f, s * 0.75f, 1); - VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers(); + EntityRenderDispatcher entityRenderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); + BatchingEntityRenderCommandQueue batchingEntityRenderCommandQueue = entityRenderDispatcher.getQueue(); BannerBlockEntityRenderer.renderCanvas( ((BlockEntityRenderManagerAccessor) mc.getBlockEntityRenderDispatcher()).getSpriteHolder(), matrices, - immediate, + batchingEntityRenderCommandQueue, 15728880, OverlayTexture.DEFAULT_UV, bannerField, @@ -93,8 +95,6 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he patterns ); - immediate.draw(); - matrices.pop(); } } From 7f7e57f8a5029e17b0d2800ce5b5bddd1a72683d Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 26 Aug 2025 16:24:19 +0100 Subject: [PATCH 05/38] Update to 25w35a --- gradle.properties | 4 ++-- .../PlayerListEntryArgumentType.java | 4 ++-- .../commands/commands/FriendsCommand.java | 2 +- .../commands/commands/NameHistoryCommand.java | 4 ++-- .../events/render/RenderItemEntityEvent.java | 6 +++--- .../mixin/ArmorFeatureRendererMixin.java | 6 +++--- .../mixin/BannerBlockEntityRendererMixin.java | 18 ++++++++--------- .../mixin/BeaconBlockEntityRendererMixin.java | 6 +++--- .../mixin/BlockEntityRenderManagerMixin.java | 6 +++--- .../mixin/CapeFeatureRendererMixin.java | 6 +++--- .../mixin/ElytraFeatureRendererMixin.java | 6 +++--- ...chantingTableBlockEntityRendererMixin.java | 8 ++++---- .../mixin/EndCrystalEntityRendererMixin.java | 20 +++++++++---------- .../mixin/HeadFeatureRendererMixin.java | 6 +++--- .../mixin/HeldItemRendererMixin.java | 12 +++++------ .../mixin/ItemEntityRendererMixin.java | 8 ++++---- .../mixin/LivingEntityRendererMixin.java | 18 ++++++++--------- .../meteorclient/mixin/MapRendererMixin.java | 4 ++-- .../mixin/MinecraftClientAccessor.java | 2 +- .../mixin/PlayerEntityRendererMixin.java | 10 +++++----- .../mixin/PlayerListEntryMixin.java | 2 +- .../systems/accounts/Account.java | 3 ++- .../accounts/types/TheAlteningAccount.java | 6 +++--- .../meteorclient/systems/friends/Friends.java | 2 +- .../systems/modules/misc/BetterChat.java | 2 +- .../systems/modules/misc/BookBot.java | 2 +- .../systems/modules/misc/Notifier.java | 8 ++++---- .../systems/modules/movement/Blink.java | 2 +- .../systems/modules/render/BetterTab.java | 4 ++-- .../systems/modules/render/LogoutSpots.java | 2 +- .../systems/modules/render/Tracers.java | 4 ++-- .../utils/render/WireframeEntityRenderer.java | 6 +++--- .../utils/tooltip/BannerTooltipComponent.java | 13 ++++++------ 33 files changed, 107 insertions(+), 105 deletions(-) diff --git a/gradle.properties b/gradle.properties index 4a4c479f1e..778e188c78 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w34b -yarn_mappings=25w34b+build.1 +minecraft_version=25w35a +yarn_mappings=25w35a+build.1 loader_version=0.17.0 fapi_version=0.132.1+1.21.9 diff --git a/src/main/java/meteordevelopment/meteorclient/commands/arguments/PlayerListEntryArgumentType.java b/src/main/java/meteordevelopment/meteorclient/commands/arguments/PlayerListEntryArgumentType.java index db7c3eae36..8d195da02b 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/arguments/PlayerListEntryArgumentType.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/arguments/PlayerListEntryArgumentType.java @@ -44,7 +44,7 @@ public PlayerListEntry parse(StringReader reader) throws CommandSyntaxException PlayerListEntry playerListEntry = null; for (PlayerListEntry p : mc.getNetworkHandler().getPlayerList()) { - if (p.getProfile().getName().equalsIgnoreCase(argument)) { + if (p.getProfile().name().equalsIgnoreCase(argument)) { playerListEntry = p; break; } @@ -56,7 +56,7 @@ public PlayerListEntry parse(StringReader reader) throws CommandSyntaxException @Override public CompletableFuture listSuggestions(CommandContext context, SuggestionsBuilder builder) { - return CommandSource.suggestMatching(mc.getNetworkHandler().getPlayerList().stream().map(playerListEntry -> playerListEntry.getProfile().getName()), builder); + return CommandSource.suggestMatching(mc.getNetworkHandler().getPlayerList().stream().map(playerListEntry -> playerListEntry.getProfile().name()), builder); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/FriendsCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/FriendsCommand.java index 20c2996fbc..23ae209cad 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/FriendsCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/FriendsCommand.java @@ -27,7 +27,7 @@ public void build(LiteralArgumentBuilder builder) { .then(argument("player", PlayerListEntryArgumentType.create()) .executes(context -> { GameProfile profile = PlayerListEntryArgumentType.get(context).getProfile(); - Friend friend = new Friend(profile.getName(), profile.getId()); + Friend friend = new Friend(profile.name(), profile.id()); if (Friends.get().add(friend)) { ChatUtils.sendMsg(friend.hashCode(), Formatting.GRAY, "Added (highlight)%s (default)to friends.".formatted(friend.getName())); diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/NameHistoryCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/NameHistoryCommand.java index 4e443dacfa..db1a317183 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/NameHistoryCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/NameHistoryCommand.java @@ -35,7 +35,7 @@ public void build(LiteralArgumentBuilder builder) { builder.then(argument("player", PlayerListEntryArgumentType.create()).executes(context -> { MeteorExecutor.execute(() -> { PlayerListEntry lookUpTarget = PlayerListEntryArgumentType.get(context); - UUID uuid = lookUpTarget.getProfile().getId(); + UUID uuid = lookUpTarget.getProfile().id(); NameHistory history = Http.get("https://laby.net/api/v2/user/" + uuid + "/get-profile") .exceptionHandler(e -> error("There was an error fetching that users name history.")) @@ -47,7 +47,7 @@ public void build(LiteralArgumentBuilder builder) { error("There was an error fetching that users name history."); } - String name = lookUpTarget.getProfile().getName(); + String name = lookUpTarget.getProfile().name(); MutableText initial = Text.literal(name); initial.append(Text.literal(name.endsWith("s") ? "'" : "'s")); diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java index 901903d135..25fa0d8c7c 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java @@ -9,7 +9,7 @@ import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import net.minecraft.client.item.ItemModelManager; import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.state.ItemEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.ItemEntity; @@ -24,9 +24,9 @@ public class RenderItemEntityEvent extends Cancellable { public VertexConsumerProvider vertexConsumerProvider; public int light; public ItemModelManager itemModelManager; - public EntityRenderCommandQueue renderCommandQueue; + public OrderedRenderCommandQueue renderCommandQueue; - public static RenderItemEntityEvent get(ItemEntityRenderState renderState, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, ItemModelManager itemModelManager, EntityRenderCommandQueue renderCommandQueue) { + public static RenderItemEntityEvent get(ItemEntityRenderState renderState, float tickDelta, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, ItemModelManager itemModelManager, OrderedRenderCommandQueue renderCommandQueue) { INSTANCE.setCancelled(false); INSTANCE.itemEntity = (ItemEntity) ((IEntityRenderState) renderState).meteor$getEntity(); INSTANCE.renderState = renderState; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java index 70a81c217b..80a9b53858 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.ArmorFeatureRenderer; import net.minecraft.client.render.entity.model.BipedEntityModel; import net.minecraft.client.render.entity.state.BipedEntityRenderState; @@ -20,8 +20,8 @@ @Mixin(ArmorFeatureRenderer.class) public abstract class ArmorFeatureRendererMixin, A extends BipedEntityModel> { - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) - private void onRender(MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int i, S bipedEntityRenderState, float f, float g, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + private void onRender(MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, int i, S bipedEntityRenderState, float f, float g, CallbackInfo ci) { if (bipedEntityRenderState instanceof PlayerEntityRenderState && Modules.get().get(NoRender.class).noArmor()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 698f9d5ca4..90af179a78 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -12,8 +12,8 @@ import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.model.ModelBaker; import net.minecraft.client.texture.SpriteHolder; import net.minecraft.client.util.SpriteIdentifier; @@ -31,27 +31,27 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(BannerBlockEntity bannerBlockEntity, float f, MatrixStack matrixStack, int i, int j, Vec3d vec3d, ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(BannerBlockEntity bannerBlockEntity, float f, MatrixStack matrixStack, int i, int j, Vec3d vec3d, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V"), cancellable = true) - private static void injectRender2(SpriteHolder spriteHolder, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel bannerBlockModel, BannerFlagBlockModel bannerFlagBlockModel, float g, DyeColor dyeColor, BannerPatternsComponent bannerPatternsComponent, ModelCommandRenderer.class_11792 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V"), cancellable = true) + private static void injectRender2(SpriteHolder spriteHolder, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel bannerBlockModel, BannerFlagBlockModel bannerFlagBlockModel, float g, DyeColor dyeColor, BannerPatternsComponent bannerPatternsComponent, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { - renderPillar(matrixStack, entityRenderCommandQueue, light, overlay, rotation, bannerBlockModel, spriteHolder, arg); + renderPillar(matrixStack, orderedRenderCommandQueue, light, overlay, rotation, bannerBlockModel, spriteHolder, crumblingOverlayCommand); ci.cancel(); } } @Unique - private static void renderPillar(MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel model, SpriteHolder spriteHolder, ModelCommandRenderer.class_11792 arg) { + private static void renderPillar(MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel model, SpriteHolder spriteHolder, ModelCommandRenderer.CrumblingOverlayCommand arg) { matrices.push(); matrices.translate(0.5F, 0.0F, 0.5F); matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(rotation)); matrices.scale(0.6666667F, -0.6666667F, -0.6666667F); SpriteIdentifier spriteIdentifier = ModelBaker.BANNER_BASE; - entityRenderCommandQueue.method_73490( + entityRenderCommandQueue.submitModel( model, Unit.INSTANCE, matrices, diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java index 53d986f942..869adc3c08 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java @@ -11,8 +11,8 @@ import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Vec3d; import org.jetbrains.annotations.Nullable; @@ -24,7 +24,7 @@ @Mixin(BeaconBlockEntityRenderer.class) public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRender(T entity, float tickProgress, MatrixStack matrices, int i, int light, Vec3d vec3d, @Nullable ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + private void onRender(T entity, float tickProgress, MatrixStack matrices, int light, int overlay, Vec3d cameraPos, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noBeaconBeams()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index f68749de6c..5cb4142f24 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -9,8 +9,8 @@ import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -21,7 +21,7 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(E blockEntity, float tickProgress, MatrixStack matrices, @Nullable ModelCommandRenderer.class_11792 arg, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + private void onRenderEntity(E blockEntity, float tickProgress, MatrixStack matrices, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue queue, CallbackInfo ci) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); if (event.isCancelled()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index d28161b1f2..b4d57b43e7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -8,7 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.CapeFeatureRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; @@ -19,8 +19,8 @@ @Mixin(CapeFeatureRenderer.class) public abstract class CapeFeatureRendererMixin { - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;capeTexture()Lnet/minecraft/util/Identifier;")) - private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;capeTexture()Lnet/minecraft/util/Identifier;")) + private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); return id == null ? original : id; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java index bf72f14413..91aa29b3ff 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java @@ -8,7 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.ElytraFeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRenderer; import net.minecraft.client.render.entity.feature.FeatureRendererContext; @@ -26,8 +26,8 @@ public ElytraFeatureRendererMixin(FeatureRendererContext context) { super(context); } - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ElytraFeatureRenderer;getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;")) - private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int i, S state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/BipedEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/ElytraFeatureRenderer;getTexture(Lnet/minecraft/client/render/entity/state/BipedEntityRenderState;)Lnet/minecraft/util/Identifier;")) + private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, S state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); return id == null ? original : id; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java index b3b54dafb9..f01e6a9bc7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java @@ -11,8 +11,8 @@ import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.EnchantingTableBlockEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; @@ -20,8 +20,8 @@ @Mixin(EnchantingTableBlockEntityRenderer.class) public abstract class EnchantingTableBlockEntityRendererMixin { - @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) - private boolean onRenderBookModelRenderProxy(EntityRenderCommandQueue instance, Model model, Object o, MatrixStack matrixStack, RenderLayer renderLayer, int i, int j, int k, Sprite sprite, int l, ModelCommandRenderer.class_11792 class11792) { + @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + private boolean onRenderBookModelRenderProxy(OrderedRenderCommandQueue instance, Model model, Object o, MatrixStack matrixStack, RenderLayer renderLayer, int i, int j, int k, Sprite sprite, int l, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { return !Modules.get().get(NoRender.class).noEnchTableBook(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index ebab5eac56..ceb986b0cd 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -10,9 +10,9 @@ import meteordevelopment.meteorclient.systems.modules.render.Chams; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EndCrystalEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.render.entity.state.EndCrystalEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; @@ -44,15 +44,15 @@ private void onInit(CallbackInfo info) { @Final private static Identifier TEXTURE; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD")) - private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD")) + private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { END_CRYSTAL = RenderLayer.getEntityTranslucent((chams.isActive() && chams.crystals.get() && !chams.crystalsTexture.get()) ? Chams.BLANK : TEXTURE); } // Chams - Scale - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) - private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) + private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { if (!chams.isActive() || !chams.crystals.get()) return; float v = chams.crystalsScale.get().floatValue(); @@ -61,12 +61,12 @@ private void onInit(CallbackInfo info) { // Chams - Color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73489(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) - private boolean render$color(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrices, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.class_11792 class11792) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + private boolean render$color(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (chams.isActive() && chams.crystals.get()) { - instance.method_73490(model, + instance.submitModel(model, state, - matrices, + matrixStack, END_CRYSTAL, light, uv, diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java index 61ad995e97..fb0c4badd7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.HeadFeatureRenderer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.model.ModelWithHead; @@ -21,8 +21,8 @@ @Mixin(HeadFeatureRenderer.class) public abstract class HeadFeatureRendererMixin & ModelWithHead> { - @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) - private void onRender(MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int i, S livingEntityRenderState, float f, float g, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/LivingEntityRenderState;FF)V", at = @At("HEAD"), cancellable = true) + private void onRender(MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, int i, S livingEntityRenderState, float f, float g, CallbackInfo ci) { if (livingEntityRenderState instanceof PlayerEntityRenderState && Modules.get().get(NoRender.class).noArmor()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java index c778f4c5f8..fe33f79316 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HeldItemRendererMixin.java @@ -13,7 +13,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.HandView; import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.item.HeldItemRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; @@ -47,7 +47,7 @@ public abstract class HeldItemRendererMixin { @Shadow protected abstract boolean shouldSkipHandAnimationOnSwap(ItemStack from, ItemStack to); - @ModifyVariable(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At(value = "STORE", ordinal = 0), index = 6) + @ModifyVariable(method = "renderItem(FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/network/ClientPlayerEntity;I)V", at = @At(value = "STORE", ordinal = 0), index = 6) private float modifySwing(float swingProgress) { HandView module = Modules.get().get(HandView.class); Hand hand = MoreObjects.firstNonNull(mc.player.preferredHand, Hand.MAIN_HAND); @@ -82,13 +82,13 @@ private float modifyEquipProgressOffhand(float value) { return (shouldSkipHandAnimationOnSwap(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/item/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;I)V", shift = At.Shift.BEFORE)) - private void onRenderItem(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, CallbackInfo ci) { + @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/ItemDisplayContext;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;I)V", shift = At.Shift.BEFORE)) + private void onRenderItem(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(HeldItemRendererEvent.get(hand, matrices)); } - @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderArmHoldingItem(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;IFFLnet/minecraft/util/Arm;)V")) - private void onRenderArm(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, int light, CallbackInfo ci) { + @Inject(method = "renderFirstPersonItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/HeldItemRenderer;renderArmHoldingItem(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IFFLnet/minecraft/util/Arm;)V")) + private void onRenderArm(AbstractClientPlayerEntity player, float tickProgress, float pitch, Hand hand, float swingProgress, ItemStack item, float equipProgress, MatrixStack matrices, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, CallbackInfo ci) { MeteorClient.EVENT_BUS.post(ArmRenderEvent.get(hand, matrices)); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java index bfa2ce1a8b..fc0cc93530 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -8,8 +8,8 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderItemEntityEvent; import net.minecraft.client.item.ItemModelManager; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.ItemEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.ItemEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Final; @@ -27,10 +27,10 @@ public abstract class ItemEntityRendererMixin { @Final private ItemModelManager itemModelManager; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { // todo fix to work with entity render batching - RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager, entityRenderCommandQueue)); + RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager, orderedRenderCommandQueue)); if (event.isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index 5d8dc9cadc..bfa8a9da5f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -16,9 +16,9 @@ import meteordevelopment.meteorclient.utils.player.PlayerUtils; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.LivingEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.ModelCommandRenderer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.client.texture.Sprite; @@ -64,12 +64,12 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73490(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/entity/command/ModelCommandRenderer$class_11792;)V")) - private boolean render$render(EntityRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.class_11792 class11792) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + private boolean render$render(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; - instance.method_73490(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, null); + instance.submitModel(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, null); return false; } @@ -90,8 +90,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB // Chams - Through walls - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void render$Head(S state, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void render$Head(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; @@ -103,8 +103,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB } } - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;)V", at = @At("TAIL")) - private void render$Tail(S state, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("TAIL")) + private void render$Tail(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index 8f9ca86e0d..551b29c6dd 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java @@ -10,7 +10,7 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.client.render.MapRenderState; import net.minecraft.client.render.MapRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.map.MapDecoration; import org.spongepowered.asm.mixin.Mixin; @@ -28,7 +28,7 @@ private List getIconsProxy(List original) { } @Inject(method = "draw", at = @At("HEAD"), cancellable = true) - private void onDraw(MapRenderState state, MatrixStack matrices, EntityRenderCommandQueue entityRenderCommandQueue, boolean bl, int light, CallbackInfo ci) { + private void onDraw(MapRenderState state, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean bl, int light, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMapContents()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java index ed2c2919c8..ef985ca8d3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java @@ -70,6 +70,6 @@ public interface MinecraftClientAccessor { void meteor$setGameProfileFuture(CompletableFuture future); @Mutable - @Accessor("field_62106") + @Accessor("apiServices") void meteor$setApiServices(ApiServices apiServices); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java index 5f7ea1c085..172e091aef 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -14,8 +14,8 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.PlayerEntityRenderer; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; @@ -57,7 +57,7 @@ public abstract class PlayerEntityRendererMixin { // Chams - Hand Texture @ModifyExpressionValue(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntityTranslucent(Lnet/minecraft/util/Identifier;)Lnet/minecraft/client/render/RenderLayer;")) - private RenderLayer renderArm$texture(RenderLayer original, MatrixStack matrixStack, EntityRenderCommandQueue entityRenderCommandQueue, int light, Identifier skinTexture, ModelPart modelPart, boolean sleeveVisible) { + private RenderLayer renderArm$texture(RenderLayer original, MatrixStack matrixStack, OrderedRenderCommandQueue entityRenderCommandQueue, int light, Identifier skinTexture, ModelPart modelPart, boolean sleeveVisible) { if (chams.isActive() && chams.hand.get()) { Identifier texture = chams.handTexture.get() ? skinTexture : Chams.BLANK; return RenderLayer.getEntityTranslucent(texture); @@ -68,10 +68,10 @@ public abstract class PlayerEntityRendererMixin { // Chams - Hand Color - @WrapWithCondition(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/command/EntityRenderCommandQueue;method_73491(Lnet/minecraft/client/model/ModelPart;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IILnet/minecraft/client/texture/Sprite;)V")) - private boolean renderArm$color(EntityRenderCommandQueue instance, ModelPart modelPart, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, Sprite sprite) { + @WrapWithCondition(method = "renderArm", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModelPart(Lnet/minecraft/client/model/ModelPart;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IILnet/minecraft/client/texture/Sprite;)V")) + private boolean renderArm$color(OrderedRenderCommandQueue instance, ModelPart modelPart, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, Sprite sprite) { if (chams.isActive() && chams.hand.get()) { - instance.method_73492(modelPart, matrixStack, renderLayer, light, uv, null, chams.handColor.get().getPacked()); + instance.submitModelPart(modelPart, matrixStack, renderLayer, light, uv, null, chams.handColor.get().getPacked(), null); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java index 298b7e610e..d02c672c3d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java @@ -25,7 +25,7 @@ public abstract class PlayerListEntryMixin { @Inject(method = "getSkinTextures", at = @At("HEAD"), cancellable = true) private void onGetTexture(CallbackInfoReturnable info) { - if (getProfile().getName().equals(MinecraftClient.getInstance().getSession().getUsername())) { + if (getProfile().name().equals(MinecraftClient.getInstance().getSession().getUsername())) { if (Modules.get().get(NameProtect.class).skinProtect()) { info.setReturnValue(DefaultSkinHelper.getSkinTextures(getProfile())); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java index 9f3c8c4cb5..fe91d490c5 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java @@ -19,6 +19,7 @@ import net.minecraft.client.session.report.AbuseReportContext; import net.minecraft.client.session.report.ReporterEnvironment; import net.minecraft.client.texture.PlayerSkinProvider; +import net.minecraft.client.texture.PlayerSkinTextureDownloader; import net.minecraft.nbt.NbtCompound; import net.minecraft.network.encryption.SignatureVerifier; import net.minecraft.util.ApiServices; @@ -83,7 +84,7 @@ public static void applyLoginEnvironment(YggdrasilAuthenticationService authServ PlayerSkinProvider.FileCache skinCache = ((PlayerSkinProviderAccessor) mc.getSkinProvider()).meteor$getSkinCache(); Path skinCachePath = ((FileCacheAccessor) skinCache).meteor$getDirectory(); mca.meteor$setApiServices(ApiServices.create(authService, mc.runDirectory)); - mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, mc.method_73361(), mc)); + mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, mc.method_73361(), new PlayerSkinTextureDownloader(mc.getNetworkProxy(), mc.getTextureManager(), mc), mc)); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java index 0ae88fb62f..48fec20cd4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java @@ -40,8 +40,8 @@ public boolean fetchInfo() { try { auth.logIn(); - cache.username = auth.getCurrentProfile().getName(); - cache.uuid = auth.getCurrentProfile().getId().toString(); + cache.username = auth.getCurrentProfile().name(); + cache.uuid = auth.getCurrentProfile().id().toString(); cache.loadHead(); return true; @@ -60,7 +60,7 @@ public boolean login() { applyLoginEnvironment(SERVICE); try { - setSession(new Session(auth.getCurrentProfile().getName(), auth.getCurrentProfile().getId(), auth.getAccessToken(), Optional.empty(), Optional.empty())); + setSession(new Session(auth.getCurrentProfile().name(), auth.getCurrentProfile().id (), auth.getAccessToken(), Optional.empty(), Optional.empty())); return true; } catch (Exception e) { MeteorClient.LOG.error("Failed to login with TheAltening."); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friends.java b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friends.java index c6168edfdc..271d6ae92e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/friends/Friends.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/friends/Friends.java @@ -69,7 +69,7 @@ public Friend get(PlayerEntity player) { } public Friend get(PlayerListEntry player) { - return get(player.getProfile().getName()); + return get(player.getProfile().name()); } public boolean isFriend(PlayerEntity player) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BetterChat.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BetterChat.java index 89b212984f..e08f77d15e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BetterChat.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BetterChat.java @@ -465,7 +465,7 @@ private void drawTexture(DrawContext context, IChatHudLine line, int y, int colo GameProfile sender = getSender(line, text); if (sender == null) return; - PlayerListEntry entry = mc.getNetworkHandler().getPlayerListEntry(sender.getId()); + PlayerListEntry entry = mc.getNetworkHandler().getPlayerListEntry(sender.id()); if (entry == null) return; PlayerSkinDrawer.draw(context, entry.getSkinTextures(), 0, y, 8); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BookBot.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BookBot.java index 037678a497..7c467f3dce 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BookBot.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/BookBot.java @@ -317,7 +317,7 @@ private void writeBook(PrimitiveIterator.OfInt chars) { if (count.get() && bookCount != 0) title += " #" + bookCount; // Write data to book - mc.player.getMainHandStack().set(DataComponentTypes.WRITTEN_BOOK_CONTENT, new WrittenBookContentComponent(RawFilteredPair.of(title), mc.player.getGameProfile().getName(), 0, filteredPages, true)); + mc.player.getMainHandStack().set(DataComponentTypes.WRITTEN_BOOK_CONTENT, new WrittenBookContentComponent(RawFilteredPair.of(title), mc.player.getGameProfile().name(), 0, filteredPages, true)); // Send book update to server mc.player.networkHandler.sendPacket(new BookUpdateC2SPacket(mc.player.getInventory().getSelectedSlot(), pages, sign.get() ? Optional.of(title) : Optional.empty())); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java index 70f4156986..65e0bde320 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java @@ -369,12 +369,12 @@ private void createJoinNotifications(PlayerListS2CPacket packet) { Formatting.GRAY + "[" + Formatting.GREEN + "+" + Formatting.GRAY + "] " - + entry.profile().getName() + + entry.profile().name() )); } else { messageQueue.addLast(Text.literal( Formatting.WHITE - + entry.profile().getName() + + entry.profile().name() + Formatting.GRAY + " joined." )); } @@ -393,12 +393,12 @@ private void createLeaveNotification(PlayerRemoveS2CPacket packet) { Formatting.GRAY + "[" + Formatting.RED + "-" + Formatting.GRAY + "] " - + toRemove.getProfile().getName() + + toRemove.getProfile().name() )); } else { messageQueue.addLast(Text.literal( Formatting.WHITE - + toRemove.getProfile().getName() + + toRemove.getProfile().name() + Formatting.GRAY + " left." )); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java index 28f1817c2e..e161c1028d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java @@ -66,7 +66,7 @@ public Blink() { @Override public void onActivate() { if (renderOriginal.get()) { - model = new FakePlayerEntity(mc.player, mc.player.getGameProfile().getName(), 20, true); + model = new FakePlayerEntity(mc.player, mc.player.getGameProfile().name(), 20, true); model.doNotPush = true; model.hideWhenInsideCamera = true; model.noHit = true; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java index e0aa93a3d8..ac4ed36104 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTab.java @@ -88,9 +88,9 @@ public Text getPlayerName(PlayerListEntry playerListEntry) { Color color = null; name = playerListEntry.getDisplayName(); - if (name == null) name = Text.literal(playerListEntry.getProfile().getName()); + if (name == null) name = Text.literal(playerListEntry.getProfile().name()); - if (playerListEntry.getProfile().getId().toString().equals(mc.player.getGameProfile().getId().toString()) && self.get()) { + if (playerListEntry.getProfile().id().toString().equals(mc.player.getGameProfile().id().toString()) && self.get()) { color = selfColor.get(); } else if (friends.get() && Friends.get().isFriend(playerListEntry)) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java index 657242aa13..d6efcdc7d5 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/LogoutSpots.java @@ -152,7 +152,7 @@ private void onTick(TickEvent.Post event) { if (mc.getNetworkHandler().getPlayerList().stream().anyMatch(playerListEntry -> playerListEntry.getProfile().equals(entry.getProfile()))) continue; for (PlayerEntity player : lastPlayers) { - if (player.getUuid().equals(entry.getProfile().getId())) { + if (player.getUuid().equals(entry.getProfile().id())) { add(new Entry(player)); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java index 30c98d8757..6a19c73502 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java @@ -284,7 +284,7 @@ public void onRender2D(Render2DEvent event) { Color color = getEntityColor(entity); if (blinkOffscreen.get()) - color.a *= getAlpha(); + color.a *= (int) getAlpha(); Vec2f screenCenter = new Vec2f(mc.getWindow().getFramebufferWidth() / 2.f, mc.getWindow().getFramebufferHeight() / 2.f); @@ -365,7 +365,7 @@ private float getAlpha() { double speed = blinkOffscreenSpeed.get() / 4.0; double duration = Math.abs(Duration.between(Instant.now(), initTimer).toMillis()) * speed; - return (float)Math.abs((duration % 1000) - 500) / 500.f; + return (float) Math.abs((duration % 1000) - 500) / 500.f; } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 36bbc9447d..55fd734366 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -16,9 +16,9 @@ import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.client.render.entity.command.BatchingEntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.EntityRenderCommandQueue; import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; @@ -31,7 +31,7 @@ public class WireframeEntityRenderer { private static final MatrixStack matrices = new MatrixStack(); private static Renderer3D renderer; - private static final EntityRenderCommandQueue entityRenderCommandQueue = new BatchingEntityRenderCommandQueue(); + private static final OrderedRenderCommandQueue entityRenderCommandQueue = new OrderedRenderCommandQueueImpl(); private static Color sideColor; private static Color lineColor; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 1654bde1ed..5c2147b79c 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -13,8 +13,8 @@ import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; -import net.minecraft.client.render.entity.command.BatchingEntityRenderCommandQueue; -import net.minecraft.client.render.entity.command.EntityRenderDispatcher; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.command.RenderDispatcher; import net.minecraft.client.render.entity.model.EntityModelLayers; import net.minecraft.client.render.model.ModelBaker; import net.minecraft.client.util.math.MatrixStack; @@ -79,20 +79,21 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he float s = Math.min(width, height); matrices.scale(s * 0.75f, s * 0.75f, 1); - EntityRenderDispatcher entityRenderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); - BatchingEntityRenderCommandQueue batchingEntityRenderCommandQueue = entityRenderDispatcher.getQueue(); + RenderDispatcher entityRenderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); + OrderedRenderCommandQueue renderCommandQueue = entityRenderDispatcher.getQueue(); BannerBlockEntityRenderer.renderCanvas( ((BlockEntityRenderManagerAccessor) mc.getBlockEntityRenderDispatcher()).getSpriteHolder(), matrices, - batchingEntityRenderCommandQueue, + renderCommandQueue, 15728880, OverlayTexture.DEFAULT_UV, bannerField, ModelBaker.BANNER_BASE, true, color, - patterns + patterns, + null ); matrices.pop(); From c8f2f9afe6eb5b5f7386e1e0dcdf629667d3d8f9 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 2 Sep 2025 17:29:01 +0100 Subject: [PATCH 06/38] Update to 25w36a We need to do a lot of refactoring to deal with the vanilla changes to screens and such. A task for when the new stuff is mapped, maybe. --- gradle.properties | 8 ++-- .../meteorclient/MeteorClient.java | 4 +- .../commands/commands/SpectateCommand.java | 3 +- .../meteorclient/events/meteor/KeyEvent.java | 6 ++- .../events/meteor/MouseButtonEvent.java | 6 ++- .../events/render/RenderBlockEntityEvent.java | 8 ++-- .../meteorclient/gui/WidgetScreen.java | 42 ++++++++++++------- .../gui/themes/meteor/MeteorGuiTheme.java | 4 +- .../gui/widgets/input/WTextBox.java | 18 ++++---- .../mixin/BannerBlockEntityRendererMixin.java | 7 ++-- .../mixin/BeaconBlockEntityRendererMixin.java | 11 +++-- .../mixin/BlockEntityRenderManagerMixin.java | 6 +-- .../mixin/ClientPlayNetworkHandlerMixin.java | 4 +- .../meteorclient/mixin/ClientWorldMixin.java | 13 ++++++ .../mixin/FireworksSparkParticleSubMixin.java | 6 +-- .../mixin/HandledScreenMixin.java | 13 +++--- .../mixin/KeyBindingAccessor.java | 3 -- .../meteorclient/mixin/KeyboardMixin.java | 21 ++++++---- .../MobSpawnerBlockEntityRendererMixin.java | 5 ++- .../meteorclient/mixin/MouseMixin.java | 22 ++++++++-- .../mixin/ParticleManagerMixin.java | 16 ------- .../mixin/PlayerEntityRendererMixin.java | 21 +++++++--- .../meteorclient/mixin/ScreenMixin.java | 5 ++- .../meteorclient/mixin/TitleScreenMixin.java | 7 ++-- .../systems/accounts/Account.java | 4 +- .../systems/hud/screens/HudEditorScreen.java | 34 +++++++++------ .../systems/modules/combat/Burrow.java | 2 +- .../systems/modules/movement/AirJump.java | 4 +- .../systems/modules/movement/AutoWalk.java | 22 +++++----- .../systems/modules/movement/GUIMove.java | 6 +-- .../systems/modules/render/Freecam.java | 24 +++++------ .../systems/modules/render/NoRender.java | 2 +- .../systems/modules/render/Xray.java | 2 +- .../entity/fakeplayer/FakePlayerEntity.java | 8 +--- .../utils/misc/input/KeyBinds.java | 23 ++++------ .../meteorclient/utils/render/PeekScreen.java | 16 +++---- .../utils/render/SimpleBlockRenderer.java | 12 ++++-- 37 files changed, 232 insertions(+), 186 deletions(-) diff --git a/gradle.properties b/gradle.properties index 778e188c78..f801bd7f6a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w35a -yarn_mappings=25w35a+build.1 -loader_version=0.17.0 -fapi_version=0.132.1+1.21.9 +minecraft_version=25w36a +yarn_mappings=25w36a+build.3 +loader_version=0.17.2 +fapi_version=0.133.0+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java index 46abc1d315..2769f26c09 100644 --- a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java +++ b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java @@ -156,14 +156,14 @@ private void onTick(TickEvent.Post event) { @EventHandler private void onKey(KeyEvent event) { - if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.key, 0)) { + if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.arg)) { toggleGui(); } } @EventHandler private void onMouseButton(MouseButtonEvent event) { - if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.button)) { + if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.arg)) { toggleGui(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java index a3e21115a0..401e227ec8 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.commands.arguments.PlayerArgumentType; import meteordevelopment.meteorclient.events.meteor.KeyEvent; +import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.orbit.EventHandler; import net.minecraft.command.CommandSource; import net.minecraft.text.Text; @@ -40,7 +41,7 @@ public void build(LiteralArgumentBuilder builder) { private static class StaticListener { @EventHandler private void onKey(KeyEvent event) { - if (mc.options.sneakKey.matchesKey(event.key, 0) || mc.options.sneakKey.matchesMouse(event.key)) { + if (Input.isPressed(mc.options.sneakKey)) { mc.setCameraEntity(mc.player); event.cancel(); MeteorClient.EVENT_BUS.unsubscribe(this); diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index 97df70f8a5..a59afba490 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -7,15 +7,19 @@ import meteordevelopment.meteorclient.events.Cancellable; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; +import net.minecraft.class_11908; public class KeyEvent extends Cancellable { private static final KeyEvent INSTANCE = new KeyEvent(); public int key, modifiers; public KeyAction action; + public class_11908 arg; - public static KeyEvent get(int key, int modifiers, KeyAction action) { + // todo clean this up + public static KeyEvent get(class_11908 arg, int key, int modifiers, KeyAction action) { INSTANCE.setCancelled(false); + INSTANCE.arg = arg; INSTANCE.key = key; INSTANCE.modifiers = modifiers; INSTANCE.action = action; diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java index bb0e2b3b11..8644cab86a 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java @@ -7,15 +7,19 @@ import meteordevelopment.meteorclient.events.Cancellable; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; +import net.minecraft.class_11909; public class MouseButtonEvent extends Cancellable { private static final MouseButtonEvent INSTANCE = new MouseButtonEvent(); public int button; public KeyAction action; + public class_11909 arg; - public static MouseButtonEvent get(int button, KeyAction action) { + // todo cleanup + public static MouseButtonEvent get(class_11909 arg, int button, KeyAction action) { INSTANCE.setCancelled(false); + INSTANCE.arg = arg; INSTANCE.button = button; INSTANCE.action = action; return INSTANCE; diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java index f232273fc4..e1f2a13bf6 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java @@ -6,16 +6,16 @@ package meteordevelopment.meteorclient.events.render; import meteordevelopment.meteorclient.events.Cancellable; -import net.minecraft.block.entity.BlockEntity; +import net.minecraft.class_11954; public class RenderBlockEntityEvent extends Cancellable { private static final RenderBlockEntityEvent INSTANCE = new RenderBlockEntityEvent(); - public BlockEntity blockEntity; + public class_11954 blockEntityState; - public static RenderBlockEntityEvent get(BlockEntity blockEntity) { + public static RenderBlockEntityEvent get(class_11954 blockEntityState) { INSTANCE.setCancelled(false); - INSTANCE.blockEntity = blockEntity; + INSTANCE.blockEntityState = blockEntityState; return INSTANCE; } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 2df2b7747a..2c9677c50f 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -17,9 +17,13 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.CursorStyle; import meteordevelopment.meteorclient.utils.misc.input.Input; +import net.minecraft.class_11905; +import net.minecraft.class_11908; +import net.minecraft.class_11909; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.MacWindowUtil; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; @@ -115,25 +119,31 @@ public void onClosed(Runnable action) { @Override // todo rename bl when appropriate - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { + public boolean mouseClicked(class_11909 arg, boolean bl) { if (locked) return false; + double mouseX = arg.x(); + double mouseY = arg.y(); double s = mc.getWindow().getScaleFactor(); + mouseX *= s; mouseY *= s; - return root.mouseClicked(mouseX, mouseY, button, false); + return root.mouseClicked(mouseX, mouseY, arg.method_74245(), bl); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(class_11909 arg) { if (locked) return false; + double mouseX = arg.x(); + double mouseY = arg.y(); double s = mc.getWindow().getScaleFactor(); + mouseX *= s; mouseY *= s; - return root.mouseReleased(mouseX, mouseY, button); + return root.mouseReleased(mouseX, mouseY, arg.method_74245()); } @Override @@ -160,31 +170,31 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + public boolean keyReleased(class_11908 arg) { if (locked) return false; - if ((modifiers == GLFW_MOD_CONTROL || modifiers == GLFW_MOD_SUPER) && keyCode == GLFW_KEY_9) { + if ((arg.modifiers() == GLFW_MOD_CONTROL || arg.modifiers() == GLFW_MOD_SUPER) && arg.key() == GLFW_KEY_9) { debug = !debug; return true; } - if ((keyCode == GLFW_KEY_ENTER || keyCode == GLFW_KEY_KP_ENTER) && enterAction != null) { + if ((arg.key() == GLFW_KEY_ENTER || arg.key() == GLFW_KEY_KP_ENTER) && enterAction != null) { enterAction.run(); return true; } - return super.keyReleased(keyCode, scanCode, modifiers); + return super.keyReleased(arg); } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(class_11908 arg) { if (locked) return false; - boolean shouldReturn = root.keyPressed(keyCode, modifiers) || super.keyPressed(keyCode, scanCode, modifiers); + boolean shouldReturn = root.keyPressed(arg.key(), arg.modifiers()) || super.keyPressed(arg); if (shouldReturn) return true; // Select next text box if TAB was pressed - if (keyCode == GLFW_KEY_TAB) { + if (arg.key() == GLFW_KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); AtomicBoolean foundFocused = new AtomicBoolean(false); @@ -215,10 +225,10 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { return true; } - boolean control = MinecraftClient.IS_SYSTEM_MAC ? modifiers == GLFW_MOD_SUPER : modifiers == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? arg.modifiers() == GLFW_MOD_SUPER : arg.modifiers() == GLFW_MOD_CONTROL; - return (control && keyCode == GLFW_KEY_C && toClipboard()) - || (control && keyCode == GLFW_KEY_V && fromClipboard()); + return (control && arg.key() == GLFW_KEY_C && toClipboard()) + || (control && arg.key() == GLFW_KEY_V && fromClipboard()); } public void keyRepeated(int key, int modifiers) { @@ -228,10 +238,10 @@ public void keyRepeated(int key, int modifiers) { } @Override - public boolean charTyped(char chr, int keyCode) { + public boolean charTyped(class_11905 arg) { if (locked) return false; - return root.charTyped(chr); + return root.charTyped(((char) arg.codepoint())); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java index c59f195631..00f59a156b 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java @@ -30,9 +30,9 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import net.minecraft.client.util.MacWindowUtil; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static net.minecraft.client.MinecraftClient.IS_SYSTEM_MAC; public class MeteorGuiTheme extends GuiTheme { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -360,7 +360,7 @@ public TextRenderer textRenderer() { public double scale(double value) { double scaled = value * scale.get(); - if (IS_SYSTEM_MAC) { + if (MacWindowUtil.IS_MAC) { scaled /= (double) mc.getWindow().getWidth() / mc.getWindow().getFramebufferWidth(); } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java index 2aa35dc543..05eba15a01 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java @@ -14,7 +14,7 @@ import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.gui.widgets.containers.WContainer; import meteordevelopment.meteorclient.utils.render.color.Color; -import net.minecraft.client.MinecraftClient; +import net.minecraft.client.util.MacWindowUtil; import net.minecraft.util.math.MathHelper; import org.apache.commons.lang3.SystemUtils; @@ -200,7 +200,7 @@ else if (selectionEnd > preSelectionCursor && preSelectionCursor == selectionSta public boolean onKeyPressed(int key, int mods) { if (!focused) return false; - boolean control = MinecraftClient.IS_SYSTEM_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; if (control && key == GLFW_KEY_C) { if (cursor != selectionStart || cursor != selectionEnd) { @@ -221,7 +221,7 @@ else if (control && key == GLFW_KEY_A) { selectionStart = 0; selectionEnd = cursor; } - else if (mods == ((MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && key == GLFW_KEY_A) { + else if (mods == ((MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && key == GLFW_KEY_A) { resetSelection(); } else if (key == GLFW_KEY_ENTER || key == GLFW_KEY_KP_ENTER) { @@ -264,9 +264,9 @@ else if (key == GLFW_KEY_TAB && completionsW != null) { public boolean onKeyRepeated(int key, int mods) { if (!focused) return false; - boolean control = MinecraftClient.IS_SYSTEM_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; boolean shift = mods == GLFW_MOD_SHIFT; - boolean controlShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); + boolean controlShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); boolean altShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); if (control && key == GLFW_KEY_V) { @@ -298,7 +298,7 @@ else if (key == GLFW_KEY_BACKSPACE) { if (cursor > 0 && cursor == selectionStart && cursor == selectionEnd) { String preText = text; - int count = (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) + int count = (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) ? cursor : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(true) @@ -321,7 +321,7 @@ else if (key == GLFW_KEY_DELETE) { if (cursor < text.length()) { String preText = text; - int count = mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) + int count = mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) ? text.length() - cursor : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(false) @@ -343,7 +343,7 @@ else if (key == GLFW_KEY_LEFT) { cursor -= countToNextSpace(true); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = 0; resetSelection(); } @@ -402,7 +402,7 @@ else if (key == GLFW_KEY_RIGHT) { cursor += countToNextSpace(false); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = text.length(); resetSelection(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 90af179a78..7f533fc6af 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.block.entity.BannerBlockEntity; +import net.minecraft.class_11949; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; @@ -22,7 +22,6 @@ import net.minecraft.util.DyeColor; import net.minecraft.util.Unit; import net.minecraft.util.math.RotationAxis; -import net.minecraft.util.math.Vec3d; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; @@ -31,8 +30,8 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/block/entity/BannerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(BannerBlockEntity bannerBlockEntity, float f, MatrixStack matrixStack, int i, int j, Vec3d vec3d, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/class_11949;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(class_11949 arg, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java index 869adc3c08..7fa226d358 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java @@ -9,22 +9,21 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BeamEmitter; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.class_11950; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer; -import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Vec3d; -import org.jetbrains.annotations.Nullable; +import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(BeaconBlockEntityRenderer.class) -public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRender(T entity, float tickProgress, MatrixStack matrices, int light, int overlay, Vec3d cameraPos, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { +public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { + @Inject(method = "renderBeam(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/util/Identifier;FFIIIFF)V", at = @At("HEAD"), cancellable = true) + private static void onRender(MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, Identifier textureId, float tickProgress, float heightScale, int i, int j, int k, float f, float g, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noBeaconBeams()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 5cb4142f24..750923f6ff 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -7,12 +7,10 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; -import net.minecraft.block.entity.BlockEntity; +import net.minecraft.class_11954; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; -import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; -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; @@ -21,7 +19,7 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(E blockEntity, float tickProgress, MatrixStack matrices, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, OrderedRenderCommandQueue queue, CallbackInfo ci) { + private void onRenderEntity(S blockEntity, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); if (event.isCancelled()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java index 1bd58a0c6c..e4e836e0d2 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java @@ -84,7 +84,7 @@ private void onGameJoinTail(GameJoinS2CPacket packet, CallbackInfo info) { } // the server sends a GameJoin packet after the reconfiguration phase - @Inject(method = "onEnterReconfiguration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER)) + @Inject(method = "onEnterReconfiguration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/class_11980;)V", shift = At.Shift.AFTER)) private void onEnterReconfiguration(EnterReconfigurationS2CPacket packet, CallbackInfo info) { MeteorClient.EVENT_BUS.post(GameLeftEvent.get()); } @@ -117,7 +117,7 @@ private void onEntitiesDestroy(EntitiesDestroyS2CPacket packet, CallbackInfo ci) } } - @Inject(method = "onExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/util/thread/ThreadExecutor;)V", shift = At.Shift.AFTER)) + @Inject(method = "onExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/class_11980;)V", shift = At.Shift.AFTER)) private void onExplosionVelocity(ExplosionS2CPacket packet, CallbackInfo ci) { Velocity velocity = Modules.get().get(Velocity.class); if (!velocity.explosions.get()) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java index e47dd8e1b0..004a9c18f5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java @@ -11,10 +11,13 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.systems.modules.world.Ambience; +import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; import net.minecraft.client.render.DimensionEffects; import net.minecraft.client.world.ClientWorld; import net.minecraft.entity.Entity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -86,4 +89,14 @@ private void doRandomBlockDisplayTicks(Args args) { args.set(5, Blocks.BARRIER); } } + + @Inject(method = "addBlockBreakParticles", at = @At("HEAD"), cancellable = true) + private void onAddBlockBreakParticles(BlockPos blockPos, BlockState state, CallbackInfo info) { + if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); + } + + @Inject(method = "method_74254", at = @At("HEAD"), cancellable = true) + private void onAddBlockBreakingParticles(BlockPos blockPos, Direction direction, CallbackInfo info) { + if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java index 388a02cbdf..5a0b01113a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java @@ -7,9 +7,9 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import net.minecraft.class_11944; import net.minecraft.client.particle.FireworksSparkParticle; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.VertexConsumer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -18,7 +18,7 @@ @Mixin(value = {FireworksSparkParticle.Explosion.class, FireworksSparkParticle.Flash.class}) public abstract class FireworksSparkParticleSubMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void buildExplosionGeometry(VertexConsumer vertexConsumer, Camera camera, float tickDelta, CallbackInfo info) { - if (Modules.get().get(NoRender.class).noFireworkExplosions()) info.cancel(); + private void buildExplosionGeometry(class_11944 arg, Camera camera, float f, CallbackInfo ci) { + if (Modules.get().get(NoRender.class).noFireworkExplosions()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index 4c85e31603..a3dcfe0359 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.systems.modules.render.ItemHighlight; import meteordevelopment.meteorclient.utils.Utils; +import net.minecraft.class_11909; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.BookScreen; @@ -92,19 +93,19 @@ private void onInit(CallbackInfo info) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) - private void onMouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY, CallbackInfoReturnable info) { - if (button != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; + private void onMouseDragged(class_11909 arg, double d, double e, CallbackInfoReturnable cir) { + if (arg.method_74245() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; - Slot slot = getSlotAt(mouseX, mouseY); - if (slot != null && slot.hasStack() && hasShiftDown()) onMouseClick(slot, slot.id, button, SlotActionType.QUICK_MOVE); + Slot slot = getSlotAt(arg.x(), arg.y()); + if (slot != null && slot.hasStack() && mc.method_74187()) onMouseClick(slot, slot.id, arg.method_74245(), SlotActionType.QUICK_MOVE); } // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(double mouseX, double mouseY, int button, boolean bl, CallbackInfoReturnable cir) { + private void mouseClicked(class_11909 arg, boolean bl, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { cir.setReturnValue(Utils.openContainer(focusedSlot.getStack(), ITEMS, false)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyBindingAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyBindingAccessor.java index 4107d1585b..86feac3b16 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyBindingAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyBindingAccessor.java @@ -15,9 +15,6 @@ @Mixin(KeyBinding.class) public interface KeyBindingAccessor { - @Accessor("CATEGORY_ORDER_MAP") - static Map getCategoryOrderMap() { return null; } - @Accessor("KEYS_BY_ID") static Map getKeysById() { return null; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java index a174506f36..1a9fb83744 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -13,6 +13,8 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; +import net.minecraft.class_11905; +import net.minecraft.class_11908; import net.minecraft.client.Keyboard; import net.minecraft.client.MinecraftClient; import org.lwjgl.glfw.GLFW; @@ -28,31 +30,32 @@ public abstract class KeyboardMixin { @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) - public void onKey(long window, int key, int scancode, int action, int modifiers, CallbackInfo info) { - if (key != GLFW.GLFW_KEY_UNKNOWN) { + public void onKey(long window, int action, class_11908 arg, CallbackInfo ci) { // todo verify this is correct when they update the mappings + int modifiers = arg.modifiers(); + if (arg.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released // https://github.com/glfw/glfw/issues/1630 if (action == GLFW.GLFW_PRESS) { - modifiers |= Input.getModifier(key); + modifiers |= Input.getModifier(arg.key()); } else if (action == GLFW.GLFW_RELEASE) { - modifiers &= ~Input.getModifier(key); + modifiers &= ~Input.getModifier(arg.key()); } if (client.currentScreen instanceof WidgetScreen && action == GLFW.GLFW_REPEAT) { - ((WidgetScreen) client.currentScreen).keyRepeated(key, modifiers); + ((WidgetScreen) client.currentScreen).keyRepeated(arg.key(), modifiers); } if (GuiKeyEvents.canUseKeys) { - Input.setKeyState(key, action != GLFW.GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(KeyEvent.get(key, modifiers, KeyAction.get(action))).isCancelled()) info.cancel(); + Input.setKeyState(arg.key(), action != GLFW.GLFW_RELEASE); + if (MeteorClient.EVENT_BUS.post(KeyEvent.get(arg, arg.key(), modifiers, KeyAction.get(action))).isCancelled()) ci.cancel(); } } } @Inject(method = "onChar", at = @At("HEAD"), cancellable = true) - private void onChar(long window, int i, int j, CallbackInfo info) { + private void onChar(long window, class_11905 arg, CallbackInfo ci) { if (Utils.canUpdate() && !client.isPaused() && (client.currentScreen == null || client.currentScreen instanceof WidgetScreen)) { - if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) i)).isCancelled()) info.cancel(); + if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) arg.codepoint())).isCancelled()) ci.cancel(); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java index 52e75eb792..d43c723c52 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java @@ -8,6 +8,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.MobSpawnerBlockEntity; +import net.minecraft.class_11973; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.MobSpawnerBlockEntityRenderer; import org.spongepowered.asm.mixin.Mixin; @@ -16,8 +17,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MobSpawnerBlockEntityRenderer.class) -public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { - @Inject(method = "render(Lnet/minecraft/block/entity/MobSpawnerBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/util/math/Vec3d;)V", at = @At("HEAD"), cancellable = true) +public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { + @Inject(method = "render(Lnet/minecraft/class_11973;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) private void onRender(CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMobInSpawner()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java index 3e2b20d565..a1945244d5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java @@ -10,8 +10,14 @@ import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; +import net.minecraft.class_11909; +import net.minecraft.class_11910; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; +import net.minecraft.client.util.Window; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -20,11 +26,21 @@ @Mixin(Mouse.class) public abstract class MouseMixin { + @Shadow + public abstract double getScaledX(Window window); + + @Shadow + public abstract double getScaledY(Window window); + + @Shadow + @Final + private MinecraftClient client; + @Inject(method = "onMouseButton", at = @At("HEAD"), cancellable = true) - private void onMouseButton(long window, int button, int action, int mods, CallbackInfo info) { - Input.setButtonState(button, action != GLFW_RELEASE); + private void onMouseButton(long window, class_11910 arg, int action, CallbackInfo ci) { + Input.setButtonState(arg.button(), action != GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(button, KeyAction.get(action))).isCancelled()) info.cancel(); + if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(new class_11909(getScaledX(client.getWindow()), getScaledY(client.getWindow()), arg), arg.button(), KeyAction.get(action))).isCancelled()) ci.cancel(); } @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ParticleManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ParticleManagerMixin.java index 8f89772093..2167e68517 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ParticleManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ParticleManagerMixin.java @@ -7,21 +7,15 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.world.ParticleEvent; -import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.block.BlockState; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleManager; import net.minecraft.particle.ParticleEffect; import net.minecraft.particle.ParticleTypes; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Direction; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ParticleManager.class) @@ -39,14 +33,4 @@ private void onAddParticle(ParticleEffect parameters, double x, double y, double else info.cancel(); } } - - @Inject(method = "addBlockBreakParticles", at = @At("HEAD"), cancellable = true) - private void onAddBlockBreakParticles(BlockPos blockPos, BlockState state, CallbackInfo info) { - if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); - } - - @Inject(method = "addBlockBreakingParticles", at = @At("HEAD"), cancellable = true) - private void onAddBlockBreakingParticles(BlockPos blockPos, Direction direction, CallbackInfo info) { - if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); - } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java index 172e091aef..3245bdfd2e 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -11,11 +11,15 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; import meteordevelopment.meteorclient.utils.player.Rotations; +import net.minecraft.class_11890; +import net.minecraft.class_11901; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.network.AbstractClientPlayerEntity; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.entity.EntityRendererFactory; +import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.PlayerEntityRenderer; +import net.minecraft.client.render.entity.model.PlayerEntityModel; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; @@ -29,12 +33,17 @@ import static meteordevelopment.meteorclient.MeteorClient.mc; @Mixin(PlayerEntityRenderer.class) -public abstract class PlayerEntityRendererMixin { +public abstract class PlayerEntityRendererMixin + extends LivingEntityRenderer { // Chams @Unique private Chams chams; + public PlayerEntityRendererMixin(EntityRendererFactory.Context ctx, PlayerEntityModel model, float shadowRadius) { + super(ctx, model, shadowRadius); + } + @Inject(method = "", at = @At("RETURN")) private void init$chams(CallbackInfo info) { chams = Modules.get().get(Chams.class); @@ -42,8 +51,8 @@ public abstract class PlayerEntityRendererMixin { // Chams - Player scale - @Inject(method = "updateRenderState(Lnet/minecraft/client/network/AbstractClientPlayerEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) - private void updateRenderState$scale(AbstractClientPlayerEntity player, PlayerEntityRenderState state, float f, CallbackInfo info) { + @Inject(method = "updateRenderState(Lnet/minecraft/class_11890;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) + private void updateRenderState$scale(AvatarlikeEntity player, PlayerEntityRenderState state, float f, CallbackInfo ci) { if (!chams.isActive() || !chams.players.get()) return; if (chams.ignoreSelf.get() && player == mc.player) return; @@ -80,8 +89,8 @@ public abstract class PlayerEntityRendererMixin { // Rotations - @Inject(method = "updateRenderState(Lnet/minecraft/client/network/AbstractClientPlayerEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) - private void updateRenderState$rotations(AbstractClientPlayerEntity player, PlayerEntityRenderState state, float f, CallbackInfo info) { + @Inject(method = "updateRenderState(Lnet/minecraft/class_11890;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) + private void updateRenderState$rotations(AvatarlikeEntity player, PlayerEntityRenderState state, float f, CallbackInfo info) { if (Rotations.rotating && player == mc.player) { state.bodyYaw = Rotations.serverYaw; state.pitch = Rotations.serverPitch; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java index 55f66d72da..758262039f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java @@ -15,6 +15,7 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.text.MeteorClickEvent; import meteordevelopment.meteorclient.utils.misc.text.RunnableClickEvent; +import net.minecraft.class_11908; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.Screen; @@ -59,11 +60,11 @@ private static void onHandleBasicClickEvent(ClickEvent clickEvent, MinecraftClie } @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void onKeyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { + private void onKeyPressed(class_11908 arg, CallbackInfoReturnable cir) { if ((Object) (this) instanceof ChatScreen) return; GUIMove guiMove = Modules.get().get(GUIMove.class); List arrows = List.of(GLFW_KEY_RIGHT, GLFW_KEY_LEFT, GLFW_KEY_DOWN, GLFW_KEY_UP); - if ((guiMove.disableArrows() && arrows.contains(keyCode)) || (guiMove.disableSpace() && keyCode == GLFW_KEY_SPACE)) { + if ((guiMove.disableArrows() && arrows.contains(arg.key())) || (guiMove.disableSpace() && arg.key() == GLFW_KEY_SPACE)) { cir.setReturnValue(true); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 34bbcde34a..6987b22086 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.systems.config.Config; import meteordevelopment.meteorclient.utils.player.TitleScreenCredits; +import net.minecraft.class_11909; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; @@ -30,9 +31,9 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta, } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(double mouseX, double mouseY, int button, boolean bl, CallbackInfoReturnable info) { - if (Config.get().titleScreenCredits.get() && button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - if (TitleScreenCredits.onClicked(mouseX, mouseY)) info.setReturnValue(true); + private void onMouseClicked(class_11909 arg, boolean bl, CallbackInfoReturnable cir) { + if (Config.get().titleScreenCredits.get() && arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (TitleScreenCredits.onClicked(arg.x(), arg.y())) cir.setReturnValue(true); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java index fe91d490c5..30c4734ce9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java @@ -75,7 +75,7 @@ public static void setSession(Session session) { mca.meteor$setSocialInteractionsManager(new SocialInteractionsManager(mc, apiService)); mca.meteor$setProfileKeys(ProfileKeys.create(apiService, session, mc.runDirectory.toPath())); mca.meteor$setAbuseReportContext(AbuseReportContext.create(ReporterEnvironment.ofIntegratedServer(), apiService)); - mca.meteor$setGameProfileFuture(CompletableFuture.supplyAsync(() -> mc.method_73361().sessionService().fetchProfile(mc.getSession().getUuidOrNull(), true), Util.getIoWorkerExecutor())); + mca.meteor$setGameProfileFuture(CompletableFuture.supplyAsync(() -> mc.getApiServices().sessionService().fetchProfile(mc.getSession().getUuidOrNull(), true), Util.getIoWorkerExecutor())); } public static void applyLoginEnvironment(YggdrasilAuthenticationService authService) { @@ -84,7 +84,7 @@ public static void applyLoginEnvironment(YggdrasilAuthenticationService authServ PlayerSkinProvider.FileCache skinCache = ((PlayerSkinProviderAccessor) mc.getSkinProvider()).meteor$getSkinCache(); Path skinCachePath = ((FileCacheAccessor) skinCache).meteor$getDirectory(); mca.meteor$setApiServices(ApiServices.create(authService, mc.runDirectory)); - mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, mc.method_73361(), new PlayerSkinTextureDownloader(mc.getNetworkProxy(), mc.getTextureManager(), mc), mc)); + mca.meteor$setSkinProvider(new PlayerSkinProvider(skinCachePath, mc.getApiServices(), new PlayerSkinTextureDownloader(mc.getNetworkProxy(), mc.getTextureManager(), mc), mc)); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index 58a0be72c4..9b086b7f4c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -16,6 +16,8 @@ import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.other.Snapper; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.class_11908; +import net.minecraft.class_11909; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.util.math.MathHelper; @@ -65,13 +67,16 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { + public boolean mouseClicked(class_11909 arg, boolean bl) { double s = mc.getWindow().getScaleFactor(); + double mouseX = arg.x(); + double mouseY = arg.y(); + mouseX *= s; mouseY *= s; - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { pressed = true; selectionSnapBox = null; @@ -112,13 +117,16 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(class_11909 arg) { double s = mc.getWindow().getScaleFactor(); + double mouseX = arg.x(); + double mouseY = arg.y(); + mouseX *= s; mouseY *= s; - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; if (addedHoveredToSelectionWhenClickedElement != null) { selection.remove(addedHoveredToSelectionWhenClickedElement); @@ -126,14 +134,14 @@ public boolean mouseReleased(double mouseX, double mouseY, int button) { } if (moved) { - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); } else { - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) hovered.toggle(); } - else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + else if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) mc.setScreen(new HudElementScreen(theme, hovered)); @@ -141,7 +149,7 @@ else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } } - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { snapper.unsnap(); moved = dragging = false; } @@ -150,13 +158,13 @@ else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(class_11908 arg) { if (!pressed) { - if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { + if (arg.key() == GLFW.GLFW_KEY_ENTER || arg.key() == GLFW.GLFW_KEY_KP_ENTER) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.toggle(); } - else if (keyCode == GLFW.GLFW_KEY_DELETE) { + else if (arg.key() == GLFW.GLFW_KEY_DELETE) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.remove(); @@ -168,7 +176,7 @@ else if (keyCode == GLFW.GLFW_KEY_DELETE) { int pixels = (Input.isKeyPressed(GLFW.GLFW_KEY_LEFT_CONTROL) || Input.isKeyPressed(GLFW.GLFW_KEY_RIGHT_CONTROL)) ? 10 : 1; int dx = 0, dy = 0; - switch (keyCode) { + switch (arg.key()) { case GLFW.GLFW_KEY_UP -> dy = -pixels; case GLFW.GLFW_KEY_DOWN -> dy = pixels; case GLFW.GLFW_KEY_RIGHT -> dx = pixels; @@ -182,7 +190,7 @@ else if (keyCode == GLFW.GLFW_KEY_DELETE) { } } - return super.keyPressed(keyCode, scanCode, modifiers); + return super.keyPressed(arg); } private void fillSelection(int mouseX, int mouseY) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java index 232ea1837c..87b4dc2ae7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java @@ -176,7 +176,7 @@ private void onTick(TickEvent.Pre event) { @EventHandler private void onKey(KeyEvent event) { if (instant.get() && !shouldBurrow) { - if (event.action == KeyAction.Press && mc.options.jumpKey.matchesKey(event.key, 0)) { + if (event.action == KeyAction.Press && mc.options.jumpKey.matchesKey(event.arg)) { shouldBurrow = true; } blockPos.set(mc.player.getBlockPos()); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java index 6cf2293681..24e535b8bd 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java @@ -44,11 +44,11 @@ private void onKey(KeyEvent event) { if (event.action != KeyAction.Press) return; - if (mc.options.jumpKey.matchesKey(event.key, 0)) { + if (mc.options.jumpKey.matchesKey(event.arg)) { level = mc.player.getBlockPos().getY(); mc.player.jump(); } - else if (mc.options.sneakKey.matchesKey(event.key, 0)) { + else if (mc.options.sneakKey.matchesKey(event.arg)) { level--; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java index 42320ed2fc..c14bb2334a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java @@ -23,6 +23,8 @@ import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; +import net.minecraft.class_11908; +import net.minecraft.class_11909; public class AutoWalk extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -128,12 +130,12 @@ private void onMovement() { @EventHandler private void onKey(KeyEvent event) { - if (isMovementKey(event.key) && event.action == KeyAction.Press) onMovement(); + if (isMovementKey(event.arg) && event.action == KeyAction.Press) onMovement(); } @EventHandler private void onMouseButton(MouseButtonEvent event) { - if (isMovementButton(event.button) && event.action == KeyAction.Press) onMovement(); + if (isMovementButton(event.arg) && event.action == KeyAction.Press) onMovement(); } @EventHandler @@ -154,16 +156,16 @@ private void unpress() { mc.options.rightKey.setPressed(false); } - private boolean isMovementKey(int key) { - return mc.options.forwardKey.matchesKey(key, 0) - || mc.options.backKey.matchesKey(key, 0) - || mc.options.leftKey.matchesKey(key, 0) - || mc.options.rightKey.matchesKey(key, 0) - || mc.options.sneakKey.matchesKey(key, 0) - || mc.options.jumpKey.matchesKey(key, 0); + private boolean isMovementKey(class_11908 key) { + return mc.options.forwardKey.matchesKey(key) + || mc.options.backKey.matchesKey(key) + || mc.options.leftKey.matchesKey(key) + || mc.options.rightKey.matchesKey(key) + || mc.options.sneakKey.matchesKey(key) + || mc.options.jumpKey.matchesKey(key); } - private boolean isMovementButton(int button) { + private boolean isMovementButton(class_11909 button) { return mc.options.forwardKey.matchesMouse(button) || mc.options.backKey.matchesMouse(button) || mc.options.leftKey.matchesMouse(button) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java index a8ec88e3f4..e8a6e5843f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java @@ -127,7 +127,7 @@ private void onInput(int key, KeyAction action, boolean mouse) { @EventHandler private void onKey(KeyEvent event) { - onInput(event.key, event.action, false); + //onInput(event.arg, event.action, false); } @EventHandler @@ -173,8 +173,8 @@ private void onRender3D(Render3DEvent event) { } private void pass(KeyBinding bind, int key, KeyAction action, boolean mouse) { - if (!mouse && !bind.matchesKey(key, 0)) return; - if (mouse && !bind.matchesMouse(key)) return; + //if (!mouse && !bind.matchesKey(key)) return; + //if (mouse && !bind.matchesMouse(key)) return; if (action == KeyAction.Press) bind.setPressed(true); if (action == KeyAction.Release) bind.setPressed(false); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java index 96a9623f9c..55f72007ff 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java @@ -286,27 +286,27 @@ public void onKey(KeyEvent event) { boolean cancel = true; - if (mc.options.forwardKey.matchesKey(event.key, 0)) { + if (mc.options.forwardKey.matchesKey(event.arg)) { forward = event.action != KeyAction.Release; mc.options.forwardKey.setPressed(false); } - else if (mc.options.backKey.matchesKey(event.key, 0)) { + else if (mc.options.backKey.matchesKey(event.arg)) { backward = event.action != KeyAction.Release; mc.options.backKey.setPressed(false); } - else if (mc.options.rightKey.matchesKey(event.key, 0)) { + else if (mc.options.rightKey.matchesKey(event.arg)) { right = event.action != KeyAction.Release; mc.options.rightKey.setPressed(false); } - else if (mc.options.leftKey.matchesKey(event.key, 0)) { + else if (mc.options.leftKey.matchesKey(event.arg)) { left = event.action != KeyAction.Release; mc.options.leftKey.setPressed(false); } - else if (mc.options.jumpKey.matchesKey(event.key, 0)) { + else if (mc.options.jumpKey.matchesKey(event.arg)) { up = event.action != KeyAction.Release; mc.options.jumpKey.setPressed(false); } - else if (mc.options.sneakKey.matchesKey(event.key, 0)) { + else if (mc.options.sneakKey.matchesKey(event.arg)) { down = event.action != KeyAction.Release; mc.options.sneakKey.setPressed(false); } @@ -323,27 +323,27 @@ private void onMouseButton(MouseButtonEvent event) { boolean cancel = true; - if (mc.options.forwardKey.matchesMouse(event.button)) { + if (mc.options.forwardKey.matchesMouse(event.arg)) { forward = event.action != KeyAction.Release; mc.options.forwardKey.setPressed(false); } - else if (mc.options.backKey.matchesMouse(event.button)) { + else if (mc.options.backKey.matchesMouse(event.arg)) { backward = event.action != KeyAction.Release; mc.options.backKey.setPressed(false); } - else if (mc.options.rightKey.matchesMouse(event.button)) { + else if (mc.options.rightKey.matchesMouse(event.arg)) { right = event.action != KeyAction.Release; mc.options.rightKey.setPressed(false); } - else if (mc.options.leftKey.matchesMouse(event.button)) { + else if (mc.options.leftKey.matchesMouse(event.arg)) { left = event.action != KeyAction.Release; mc.options.leftKey.setPressed(false); } - else if (mc.options.jumpKey.matchesMouse(event.button)) { + else if (mc.options.jumpKey.matchesMouse(event.arg)) { up = event.action != KeyAction.Release; mc.options.jumpKey.setPressed(false); } - else if (mc.options.sneakKey.matchesMouse(event.button)) { + else if (mc.options.sneakKey.matchesMouse(event.arg)) { down = event.action != KeyAction.Release; mc.options.sneakKey.setPressed(false); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java index a6503f91ce..e200004168 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java @@ -576,7 +576,7 @@ public boolean noTextureRotations() { @EventHandler private void onRenderBlockEntity(RenderBlockEntityEvent event) { - if (blockEntities.get().contains(event.blockEntity.getCachedState().getBlock())) event.cancel(); + if (blockEntities.get().contains(event.blockEntityState.field_62674.getBlock())) event.cancel(); } // Entity diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java index 4664987c29..8dca5850b2 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java @@ -87,7 +87,7 @@ public WWidget getWidget(GuiTheme theme) { @EventHandler private void onRenderBlockEntity(RenderBlockEntityEvent event) { - if (isBlocked(event.blockEntity.getCachedState().getBlock(), event.blockEntity.getPos())) event.cancel(); + if (isBlocked(event.blockEntityState.field_62674.getBlock(), event.blockEntityState.field_62673)) event.cancel(); } @EventHandler diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java index eddc2f6a44..ba3bdfba8a 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java @@ -31,16 +31,12 @@ public FakePlayerEntity(PlayerEntity player, String name, float health, boolean bodyYaw = player.bodyYaw; lastBodyYaw = bodyYaw; - Byte playerModel = player.getDataTracker().get(PlayerEntity.PLAYER_MODEL_PARTS); - dataTracker.set(PlayerEntity.PLAYER_MODEL_PARTS, playerModel); + Byte playerModel = player.getDataTracker().get(PlayerEntity.field_62514); + dataTracker.set(PlayerEntity.field_62514, playerModel); getAttributes().setFrom(player.getAttributes()); setPose(player.getPose()); - capeX = getX(); - capeY = getY(); - capeZ = getZ(); - if (health <= 20) { setHealth(health); } else { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java index 50de9a9314..2fcd170220 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -5,33 +5,26 @@ package meteordevelopment.meteorclient.utils.misc.input; -import meteordevelopment.meteorclient.mixin.KeyBindingAccessor; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; -import java.util.Map; - public class KeyBinds { + /* + todo + mojang changed how keybindings work, they used to take a String for the category but now take one of an enum + hopefully fabric adds a helper method to sort this out because the alternative will be doing it ourselves + with ASM or Unsafe, which will be a pain + */ private static final String CATEGORY = "Meteor Client"; - public static KeyBinding OPEN_GUI = new KeyBinding("key.meteor-client.open-gui", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, CATEGORY); - public static KeyBinding OPEN_COMMANDS = new KeyBinding("key.meteor-client.open-commands", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, CATEGORY); + public static KeyBinding OPEN_GUI = new KeyBinding("key.meteor-client.open-gui", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, KeyBinding.class_11900.INTERFACE); + public static KeyBinding OPEN_COMMANDS = new KeyBinding("key.meteor-client.open-commands", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, KeyBinding.class_11900.INTERFACE); private KeyBinds() { } public static KeyBinding[] apply(KeyBinding[] binds) { - // Add category - Map categories = KeyBindingAccessor.getCategoryOrderMap(); - - int highest = 0; - for (int i : categories.values()) { - if (i > highest) highest = i; - } - - categories.put(CATEGORY, highest + 1); - // Add key binding KeyBinding[] newBinds = new KeyBinding[binds.length + 2]; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index dc12ebef16..1ffa1dcac1 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -9,6 +9,8 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.class_11908; +import net.minecraft.class_11909; import net.minecraft.client.gl.RenderPipelines; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.BookScreen; @@ -36,10 +38,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl) { + public boolean mouseClicked(class_11909 arg, boolean bl) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (button == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { return Utils.openContainer(focusedSlot.getStack(), contents, false); @@ -54,13 +56,13 @@ public boolean mouseClicked(double mouseX, double mouseY, int button, boolean bl } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(class_11909 arg) { return false; } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (keyCode == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(keyCode, scanCode)) { + public boolean keyPressed(class_11908 arg) { + if (arg.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(arg)) { close(); return true; } @@ -68,8 +70,8 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { - if (keyCode == GLFW.GLFW_KEY_ESCAPE) { + public boolean keyReleased(class_11908 arg) { + if (arg.key() == GLFW.GLFW_KEY_ESCAPE) { close(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 9a5349364d..59320681e3 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -9,7 +9,10 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.render.*; +import net.minecraft.class_11954; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BlockModelPart; @@ -37,11 +40,12 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt vertexConsumerProvider.setOffset(blockEntity.getPos().getX(), blockEntity.getPos().getY(), blockEntity.getPos().getZ()); SimpleBlockRenderer.render(blockEntity.getPos(), blockEntity.getCachedState(), vertexConsumerProvider); - BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); + BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { - Vec3d camera = mc.gameRenderer.getCamera().getPos(); - renderer.render(blockEntity, tickDelta, MATRICES, LightmapTextureManager.MAX_LIGHT_COORDINATE, OverlayTexture.DEFAULT_UV, camera, null, mc.gameRenderer.getEntityRenderDispatcher().getQueue()); + class_11954 c = new class_11954(); + class_11954.method_74399(blockEntity, c, null); + renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue()); } vertexConsumerProvider.setOffset(0, 0, 0); From dc923d80d275e3565d7cc0eccd33dbcb94e0ebe1 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 9 Sep 2025 17:44:20 +0100 Subject: [PATCH 07/38] Update to 25w37a --- gradle.properties | 6 ++--- .../commands/commands/InputCommand.java | 4 ++-- .../meteorclient/events/meteor/KeyEvent.java | 6 ++--- .../events/meteor/MouseButtonEvent.java | 6 ++--- .../events/render/RenderBlockEntityEvent.java | 6 ++--- .../meteorclient/gui/WidgetScreen.java | 20 ++++++++--------- .../mixin/BannerBlockEntityRendererMixin.java | 6 ++--- .../mixin/BeaconBlockEntityRendererMixin.java | 4 ++-- .../mixin/BlockEntityRenderManagerMixin.java | 4 ++-- .../mixin/ChunkSkyLightProviderMixin.java | 22 ------------------- .../mixin/ClientPlayNetworkHandlerMixin.java | 4 ++-- .../mixin/ClientPlayerEntityMixin.java | 9 +------- .../meteorclient/mixin/ClientWorldMixin.java | 2 +- .../mixin/FireworksSparkParticleSubMixin.java | 4 ++-- .../meteorclient/mixin/GameRendererMixin.java | 8 +++---- .../mixin/HandledScreenMixin.java | 12 +++++----- .../meteorclient/mixin/KeyboardMixin.java | 8 +++---- .../MobSpawnerBlockEntityRendererMixin.java | 6 ++--- .../meteorclient/mixin/MouseMixin.java | 8 +++---- .../mixin/PlayerEntityRendererMixin.java | 10 ++++----- .../meteorclient/mixin/ScreenMixin.java | 4 ++-- .../meteorclient/mixin/TitleScreenMixin.java | 6 ++--- .../mixin/WorldRendererMixin.java | 3 ++- .../systems/hud/screens/HudEditorScreen.java | 22 +++++++++---------- .../systems/modules/movement/AutoWalk.java | 8 +++---- .../systems/modules/render/NoRender.java | 13 +---------- .../systems/modules/render/Xray.java | 2 +- .../entity/fakeplayer/FakePlayerEntity.java | 3 --- .../utils/misc/input/KeyBinds.java | 15 +++++-------- .../meteorclient/utils/render/PeekScreen.java | 14 ++++++------ .../utils/render/SimpleBlockRenderer.java | 8 +++---- .../utils/tooltip/BannerTooltipComponent.java | 7 +++++- .../assets/meteor-client/lang/en_gb.json | 3 ++- .../assets/meteor-client/lang/en_us.json | 3 ++- src/main/resources/meteor-client.mixins.json | 1 - 35 files changed, 113 insertions(+), 154 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/ChunkSkyLightProviderMixin.java diff --git a/gradle.properties b/gradle.properties index f801bd7f6a..bb07651b87 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w36a -yarn_mappings=25w36a+build.3 +minecraft_version=25w37a +yarn_mappings=25w37a+build.1 loader_version=0.17.2 -fapi_version=0.133.0+1.21.9 +fapi_version=0.133.4+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java index 8852feccce..323785bbe7 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java @@ -67,7 +67,7 @@ public void build(LiteralArgumentBuilder builder) { } for (KeyBinding keyBinding : mc.options.hotbarKeys) { - builder.then(literal(keyBinding.getTranslationKey().substring(4)) + builder.then(literal(keyBinding.getBoundKeyTranslationKey().substring(4)) .executes(context -> { press(keyBinding); return SINGLE_SUCCESS; @@ -91,7 +91,7 @@ public void build(LiteralArgumentBuilder builder) { info("Active keypress handlers: "); for (int i = 0; i < activeHandlers.size(); i++) { KeypressHandler handler = activeHandlers.get(i); - info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getTranslationKey()), handler.ticks, handler.totalTicks); + info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getBoundKeyTranslationKey()), handler.ticks, handler.totalTicks); } } return SINGLE_SUCCESS; diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index a59afba490..1c230e3cc6 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -7,17 +7,17 @@ import meteordevelopment.meteorclient.events.Cancellable; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; -import net.minecraft.class_11908; +import net.minecraft.client.input.KeyInput; public class KeyEvent extends Cancellable { private static final KeyEvent INSTANCE = new KeyEvent(); public int key, modifiers; public KeyAction action; - public class_11908 arg; + public KeyInput arg; // todo clean this up - public static KeyEvent get(class_11908 arg, int key, int modifiers, KeyAction action) { + public static KeyEvent get(KeyInput arg, int key, int modifiers, KeyAction action) { INSTANCE.setCancelled(false); INSTANCE.arg = arg; INSTANCE.key = key; diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java index 8644cab86a..fc7f3bc0b5 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java @@ -7,17 +7,17 @@ import meteordevelopment.meteorclient.events.Cancellable; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; -import net.minecraft.class_11909; +import net.minecraft.client.gui.Click; public class MouseButtonEvent extends Cancellable { private static final MouseButtonEvent INSTANCE = new MouseButtonEvent(); public int button; public KeyAction action; - public class_11909 arg; + public Click arg; // todo cleanup - public static MouseButtonEvent get(class_11909 arg, int button, KeyAction action) { + public static MouseButtonEvent get(Click arg, int button, KeyAction action) { INSTANCE.setCancelled(false); INSTANCE.arg = arg; INSTANCE.button = button; diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java index e1f2a13bf6..27c1595816 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/RenderBlockEntityEvent.java @@ -6,14 +6,14 @@ package meteordevelopment.meteorclient.events.render; import meteordevelopment.meteorclient.events.Cancellable; -import net.minecraft.class_11954; +import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; public class RenderBlockEntityEvent extends Cancellable { private static final RenderBlockEntityEvent INSTANCE = new RenderBlockEntityEvent(); - public class_11954 blockEntityState; + public BlockEntityRenderState blockEntityState; - public static RenderBlockEntityEvent get(class_11954 blockEntityState) { + public static RenderBlockEntityEvent get(BlockEntityRenderState blockEntityState) { INSTANCE.setCancelled(false); INSTANCE.blockEntityState = blockEntityState; return INSTANCE; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 2c9677c50f..64608d17fc 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -17,12 +17,12 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.CursorStyle; import meteordevelopment.meteorclient.utils.misc.input.Input; -import net.minecraft.class_11905; -import net.minecraft.class_11908; -import net.minecraft.class_11909; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.client.util.MacWindowUtil; import net.minecraft.text.Text; import net.minecraft.util.math.MathHelper; @@ -119,7 +119,7 @@ public void onClosed(Runnable action) { @Override // todo rename bl when appropriate - public boolean mouseClicked(class_11909 arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean bl) { if (locked) return false; double mouseX = arg.x(); @@ -129,11 +129,11 @@ public boolean mouseClicked(class_11909 arg, boolean bl) { mouseX *= s; mouseY *= s; - return root.mouseClicked(mouseX, mouseY, arg.method_74245(), bl); + return root.mouseClicked(mouseX, mouseY, arg.button(), bl); } @Override - public boolean mouseReleased(class_11909 arg) { + public boolean mouseReleased(Click arg) { if (locked) return false; double mouseX = arg.x(); @@ -143,7 +143,7 @@ public boolean mouseReleased(class_11909 arg) { mouseX *= s; mouseY *= s; - return root.mouseReleased(mouseX, mouseY, arg.method_74245()); + return root.mouseReleased(mouseX, mouseY, arg.button()); } @Override @@ -170,7 +170,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyReleased(class_11908 arg) { + public boolean keyReleased(KeyInput arg) { if (locked) return false; if ((arg.modifiers() == GLFW_MOD_CONTROL || arg.modifiers() == GLFW_MOD_SUPER) && arg.key() == GLFW_KEY_9) { @@ -187,7 +187,7 @@ public boolean keyReleased(class_11908 arg) { } @Override - public boolean keyPressed(class_11908 arg) { + public boolean keyPressed(KeyInput arg) { if (locked) return false; boolean shouldReturn = root.keyPressed(arg.key(), arg.modifiers()) || super.keyPressed(arg); @@ -238,7 +238,7 @@ public void keyRepeated(int key, int modifiers) { } @Override - public boolean charTyped(class_11905 arg) { + public boolean charTyped(CharInput arg) { if (locked) return false; return root.charTyped(((char) arg.codepoint())); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 7f533fc6af..71490a80c3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -7,11 +7,11 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.class_11949; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; +import net.minecraft.client.render.block.entity.state.BannerBlockEntityRenderState; import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.model.ModelBaker; @@ -30,8 +30,8 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/class_11949;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(class_11949 arg, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(BannerBlockEntityRenderState arg, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java index 7fa226d358..49e45c49db 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java @@ -9,9 +9,9 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.BeamEmitter; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.class_11950; import net.minecraft.client.render.block.entity.BeaconBlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.block.entity.state.BeaconBlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; @@ -21,7 +21,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(BeaconBlockEntityRenderer.class) -public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { +public abstract class BeaconBlockEntityRendererMixin implements BlockEntityRenderer { @Inject(method = "renderBeam(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/util/Identifier;FFIIIFF)V", at = @At("HEAD"), cancellable = true) private static void onRender(MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, Identifier textureId, float tickProgress, float heightScale, int i, int j, int k, float f, float g, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noBeaconBeams()) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 750923f6ff..ca0366c2fe 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -7,8 +7,8 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; -import net.minecraft.class_11954; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; +import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; @@ -19,7 +19,7 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(S blockEntity, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + private void onRenderEntity(S blockEntity, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); if (event.isCancelled()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ChunkSkyLightProviderMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ChunkSkyLightProviderMixin.java deleted file mode 100644 index e05e1e90f4..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ChunkSkyLightProviderMixin.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.world.chunk.light.ChunkSkyLightProvider; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(ChunkSkyLightProvider.class) -public abstract class ChunkSkyLightProviderMixin { - @Inject(at = @At("HEAD"), method = "method_51531", cancellable = true) - private void recalculateLevel(long blockPos, long l, int lightLevel, CallbackInfo ci) { - if (Modules.get().get(NoRender.class).noSkylightUpdates()) ci.cancel(); - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java index e4e836e0d2..7f2beede27 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayNetworkHandlerMixin.java @@ -84,7 +84,7 @@ private void onGameJoinTail(GameJoinS2CPacket packet, CallbackInfo info) { } // the server sends a GameJoin packet after the reconfiguration phase - @Inject(method = "onEnterReconfiguration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/class_11980;)V", shift = At.Shift.AFTER)) + @Inject(method = "onEnterReconfiguration", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/network/PacketApplyBatcher;)V", shift = At.Shift.AFTER)) private void onEnterReconfiguration(EnterReconfigurationS2CPacket packet, CallbackInfo info) { MeteorClient.EVENT_BUS.post(GameLeftEvent.get()); } @@ -117,7 +117,7 @@ private void onEntitiesDestroy(EntitiesDestroyS2CPacket packet, CallbackInfo ci) } } - @Inject(method = "onExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/class_11980;)V", shift = At.Shift.AFTER)) + @Inject(method = "onExplosion", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/NetworkThreadUtils;forceMainThread(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;Lnet/minecraft/network/PacketApplyBatcher;)V", shift = At.Shift.AFTER)) private void onExplosionVelocity(ExplosionS2CPacket packet, CallbackInfo ci) { Velocity velocity = Modules.get().get(Velocity.class); if (!velocity.explosions.get()) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java index cce4b62324..cb95e58c6c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java @@ -74,19 +74,12 @@ private void onPushOutOfBlocks(double x, double d, CallbackInfo info) { } } - @ModifyExpressionValue(method = "canSprint", at = @At(value = "CONSTANT", args = "floatValue=6.0f")) + @ModifyExpressionValue(method = "canSprint()Z", at = @At(value = "CONSTANT", args = "floatValue=6.0f")) private float onHunger(float constant) { if (Modules.get().get(NoSlow.class).hunger()) return -1; return constant; } - /* - @ModifyExpressionValue(method = "sendSneakingPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSneaking()Z")) - private boolean isSneaking(boolean sneaking) { - return Modules.get().get(Sneak.class).doPacket() || Modules.get().get(NoSlow.class).airStrict() || sneaking; - } - */ - @Inject(method = "tickMovement", at = @At("HEAD")) private void preTickMovement(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(PlayerTickMovementEvent.get()); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java index 004a9c18f5..7ace512dcf 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientWorldMixin.java @@ -95,7 +95,7 @@ private void onAddBlockBreakParticles(BlockPos blockPos, BlockState state, Callb if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); } - @Inject(method = "method_74254", at = @At("HEAD"), cancellable = true) + @Inject(method = "spawnBlockBreakingParticle", at = @At("HEAD"), cancellable = true) private void onAddBlockBreakingParticles(BlockPos blockPos, Direction direction, CallbackInfo info) { if (Modules.get().get(NoRender.class).noBlockBreakParticles()) info.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java index 5a0b01113a..225501c517 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.class_11944; +import net.minecraft.client.particle.BillboardParticleSubmittable; import net.minecraft.client.particle.FireworksSparkParticle; import net.minecraft.client.render.Camera; import org.spongepowered.asm.mixin.Mixin; @@ -18,7 +18,7 @@ @Mixin(value = {FireworksSparkParticle.Explosion.class, FireworksSparkParticle.Flash.class}) public abstract class FireworksSparkParticleSubMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void buildExplosionGeometry(class_11944 arg, Camera camera, float f, CallbackInfo ci) { + private void buildExplosionGeometry(BillboardParticleSubmittable arg, Camera camera, float f, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noFireworkExplosions()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index a3c6ae5d44..243cc51f69 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -79,7 +79,7 @@ public abstract class GameRendererMixin { protected abstract void tiltViewWhenHurt(MatrixStack matrices, float tickDelta); @Inject(method = "renderWorld", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = {"ldc=hand"})) - private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 0) Matrix4f projection, @Local(ordinal = 2) Matrix4f view, @Local(ordinal = 1) float tickDelta, @Local MatrixStack matrixStack) { + private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 0) Matrix4f projection, @Local(ordinal = 1) Matrix4f position, @Local(ordinal = 1) float tickDelta, @Local MatrixStack matrixStack) { if (!Utils.canUpdate()) return; Profilers.get().push(MeteorClient.MOD_ID + "_render"); @@ -92,12 +92,12 @@ private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Loca // Call utility classes - RenderUtils.updateScreenCenter(projection, view); - NametagUtils.onRender(view); + RenderUtils.updateScreenCenter(projection, position); + NametagUtils.onRender(position); // Update model view matrix - RenderSystem.getModelViewStack().pushMatrix().mul(view); + RenderSystem.getModelViewStack().pushMatrix().mul(position); matrices.push(); tiltViewWhenHurt(matrices, camera.getLastTickProgress()); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index a3dcfe0359..86c3d2b6dd 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -10,7 +10,7 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.systems.modules.render.ItemHighlight; import meteordevelopment.meteorclient.utils.Utils; -import net.minecraft.class_11909; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.BookScreen; @@ -93,19 +93,19 @@ private void onInit(CallbackInfo info) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) - private void onMouseDragged(class_11909 arg, double d, double e, CallbackInfoReturnable cir) { - if (arg.method_74245() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; + private void onMouseDragged(Click arg, double d, double e, CallbackInfoReturnable cir) { + if (arg.button() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; Slot slot = getSlotAt(arg.x(), arg.y()); - if (slot != null && slot.hasStack() && mc.method_74187()) onMouseClick(slot, slot.id, arg.method_74245(), SlotActionType.QUICK_MOVE); + if (slot != null && slot.hasStack() && mc.isShiftPressed()) onMouseClick(slot, slot.id, arg.button(), SlotActionType.QUICK_MOVE); } // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(class_11909 arg, boolean bl, CallbackInfoReturnable cir) { + private void mouseClicked(Click arg, boolean bl, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { cir.setReturnValue(Utils.openContainer(focusedSlot.getStack(), ITEMS, false)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java index 1a9fb83744..242503648a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -13,10 +13,10 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; -import net.minecraft.class_11905; -import net.minecraft.class_11908; import net.minecraft.client.Keyboard; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -30,7 +30,7 @@ public abstract class KeyboardMixin { @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) - public void onKey(long window, int action, class_11908 arg, CallbackInfo ci) { // todo verify this is correct when they update the mappings + public void onKey(long window, int action, KeyInput arg, CallbackInfo ci) { // todo verify this is correct when they update the mappings int modifiers = arg.modifiers(); if (arg.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released @@ -53,7 +53,7 @@ public void onKey(long window, int action, class_11908 arg, CallbackInfo ci) { / } @Inject(method = "onChar", at = @At("HEAD"), cancellable = true) - private void onChar(long window, class_11905 arg, CallbackInfo ci) { + private void onChar(long window, CharInput arg, CallbackInfo ci) { if (Utils.canUpdate() && !client.isPaused() && (client.currentScreen == null || client.currentScreen instanceof WidgetScreen)) { if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) arg.codepoint())).isCancelled()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java index d43c723c52..01adef9cc3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java @@ -8,17 +8,17 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.block.entity.MobSpawnerBlockEntity; -import net.minecraft.class_11973; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.MobSpawnerBlockEntityRenderer; +import net.minecraft.client.render.block.entity.state.MobSpawnerBlockEntityRenderState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(MobSpawnerBlockEntityRenderer.class) -public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { - @Inject(method = "render(Lnet/minecraft/class_11973;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) +public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/MobSpawnerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) private void onRender(CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMobInSpawner()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java index a1945244d5..776b6d0a66 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java @@ -10,10 +10,10 @@ import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; -import net.minecraft.class_11909; -import net.minecraft.class_11910; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.MouseInput; import net.minecraft.client.util.Window; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -37,10 +37,10 @@ public abstract class MouseMixin { private MinecraftClient client; @Inject(method = "onMouseButton", at = @At("HEAD"), cancellable = true) - private void onMouseButton(long window, class_11910 arg, int action, CallbackInfo ci) { + private void onMouseButton(long window, MouseInput arg, int action, CallbackInfo ci) { Input.setButtonState(arg.button(), action != GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(new class_11909(getScaledX(client.getWindow()), getScaledY(client.getWindow()), arg), arg.button(), KeyAction.get(action))).isCancelled()) ci.cancel(); + if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(new Click(getScaledX(client.getWindow()), getScaledY(client.getWindow()), arg), arg.button(), KeyAction.get(action))).isCancelled()) ci.cancel(); } @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java index 3245bdfd2e..f429f4782e 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -11,9 +11,8 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; import meteordevelopment.meteorclient.utils.player.Rotations; -import net.minecraft.class_11890; -import net.minecraft.class_11901; import net.minecraft.client.model.ModelPart; +import net.minecraft.client.network.ClientPlayerLikeEntity; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRendererFactory; @@ -23,6 +22,7 @@ import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.PlayerLikeEntity; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -33,7 +33,7 @@ import static meteordevelopment.meteorclient.MeteorClient.mc; @Mixin(PlayerEntityRenderer.class) -public abstract class PlayerEntityRendererMixin +public abstract class PlayerEntityRendererMixin extends LivingEntityRenderer { // Chams @@ -51,7 +51,7 @@ public PlayerEntityRendererMixin(EntityRendererFactory.Context ctx, PlayerEntity // Chams - Player scale - @Inject(method = "updateRenderState(Lnet/minecraft/class_11890;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) + @Inject(method = "updateRenderState(Lnet/minecraft/entity/PlayerLikeEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) private void updateRenderState$scale(AvatarlikeEntity player, PlayerEntityRenderState state, float f, CallbackInfo ci) { if (!chams.isActive() || !chams.players.get()) return; if (chams.ignoreSelf.get() && player == mc.player) return; @@ -89,7 +89,7 @@ public PlayerEntityRendererMixin(EntityRendererFactory.Context ctx, PlayerEntity // Rotations - @Inject(method = "updateRenderState(Lnet/minecraft/class_11890;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) + @Inject(method = "updateRenderState(Lnet/minecraft/entity/PlayerLikeEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) private void updateRenderState$rotations(AvatarlikeEntity player, PlayerEntityRenderState state, float f, CallbackInfo info) { if (Rotations.rotating && player == mc.player) { state.bodyYaw = Rotations.serverYaw; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java index 758262039f..7d299935de 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java @@ -15,10 +15,10 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.text.MeteorClickEvent; import meteordevelopment.meteorclient.utils.misc.text.RunnableClickEvent; -import net.minecraft.class_11908; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.ChatScreen; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.KeyInput; import net.minecraft.text.ClickEvent; import net.minecraft.text.Style; import org.jetbrains.annotations.Nullable; @@ -60,7 +60,7 @@ private static void onHandleBasicClickEvent(ClickEvent clickEvent, MinecraftClie } @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void onKeyPressed(class_11908 arg, CallbackInfoReturnable cir) { + private void onKeyPressed(KeyInput arg, CallbackInfoReturnable cir) { if ((Object) (this) instanceof ChatScreen) return; GUIMove guiMove = Modules.get().get(GUIMove.class); List arrows = List.of(GLFW_KEY_RIGHT, GLFW_KEY_LEFT, GLFW_KEY_DOWN, GLFW_KEY_UP); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 6987b22086..07dcd38db1 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.systems.config.Config; import meteordevelopment.meteorclient.utils.player.TitleScreenCredits; -import net.minecraft.class_11909; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; @@ -31,8 +31,8 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta, } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(class_11909 arg, boolean bl, CallbackInfoReturnable cir) { - if (Config.get().titleScreenCredits.get() && arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + private void onMouseClicked(Click arg, boolean bl, CallbackInfoReturnable cir) { + if (Config.get().titleScreenCredits.get() && arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if (TitleScreenCredits.onClicked(arg.x(), arg.y())) cir.setReturnValue(true); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index f116039ff9..2db90f7fe5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -50,7 +50,7 @@ private void onDrawHighlightedBlockOutline(MatrixStack matrices, VertexConsumer if (Modules.get().isActive(BlockSelection.class)) ci.cancel(); } - @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;setupTerrain(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;ZZ)V"), index = 3) + @ModifyArg(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;method_74752(Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Z)V"), index = 2) private boolean renderSetupTerrainModifyArg(boolean spectator) { return Modules.get().isActive(Freecam.class) || spectator; } @@ -81,6 +81,7 @@ private void onRenderHead(ObjectAllocator allocator, Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, + Matrix4f matrix4f2, GpuBufferSlice fog, Vector4f fogColor, boolean shouldRenderSky, diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index 9b086b7f4c..1404a12bdf 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -16,10 +16,10 @@ import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.other.Snapper; import meteordevelopment.meteorclient.utils.render.color.Color; -import net.minecraft.class_11908; -import net.minecraft.class_11909; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.KeyInput; import net.minecraft.util.math.MathHelper; import org.lwjgl.glfw.GLFW; @@ -67,7 +67,7 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(class_11909 arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean bl) { double s = mc.getWindow().getScaleFactor(); double mouseX = arg.x(); @@ -76,7 +76,7 @@ public boolean mouseClicked(class_11909 arg, boolean bl) { mouseX *= s; mouseY *= s; - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { pressed = true; selectionSnapBox = null; @@ -117,7 +117,7 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseReleased(class_11909 arg) { + public boolean mouseReleased(Click arg) { double s = mc.getWindow().getScaleFactor(); double mouseX = arg.x(); @@ -126,7 +126,7 @@ public boolean mouseReleased(class_11909 arg) { mouseX *= s; mouseY *= s; - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; if (addedHoveredToSelectionWhenClickedElement != null) { selection.remove(addedHoveredToSelectionWhenClickedElement); @@ -134,14 +134,14 @@ public boolean mouseReleased(class_11909 arg) { } if (moved) { - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); } else { - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) hovered.toggle(); } - else if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + else if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) mc.setScreen(new HudElementScreen(theme, hovered)); @@ -149,7 +149,7 @@ else if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } } - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { snapper.unsnap(); moved = dragging = false; } @@ -158,7 +158,7 @@ else if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } @Override - public boolean keyPressed(class_11908 arg) { + public boolean keyPressed(KeyInput arg) { if (!pressed) { if (arg.key() == GLFW.GLFW_KEY_ENTER || arg.key() == GLFW.GLFW_KEY_KP_ENTER) { HudElement hovered = getHovered(lastMouseX, lastMouseY); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java index c14bb2334a..2b2e56a97b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java @@ -23,8 +23,8 @@ import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; -import net.minecraft.class_11908; -import net.minecraft.class_11909; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; public class AutoWalk extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -156,7 +156,7 @@ private void unpress() { mc.options.rightKey.setPressed(false); } - private boolean isMovementKey(class_11908 key) { + private boolean isMovementKey(KeyInput key) { return mc.options.forwardKey.matchesKey(key) || mc.options.backKey.matchesKey(key) || mc.options.leftKey.matchesKey(key) @@ -165,7 +165,7 @@ private boolean isMovementKey(class_11908 key) { || mc.options.jumpKey.matchesKey(key); } - private boolean isMovementButton(class_11909 button) { + private boolean isMovementButton(Click button) { return mc.options.forwardKey.matchesMouse(button) || mc.options.backKey.matchesMouse(button) || mc.options.leftKey.matchesMouse(button) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java index e200004168..145a1ee45a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java @@ -244,13 +244,6 @@ public class NoRender extends Module { .build() ); - private final Setting noSkylightUpdates = sgWorld.add(new BoolSetting.Builder() - .name("skylight-updates") - .description("Disables rendering of skylight updates.") - .defaultValue(false) - .build() - ); - private final Setting noBeaconBeams = sgWorld.add(new BoolSetting.Builder() .name("beacon-beams") .description("Disables rendering of beacon beams.") @@ -525,10 +518,6 @@ public boolean noBlockBreakOverlay() { return isActive() && noBlockBreakOverlay.get(); } - public boolean noSkylightUpdates() { - return isActive() && noSkylightUpdates.get(); - } - public boolean noBeaconBeams() { return isActive() && noBeaconBeams.get(); } @@ -576,7 +565,7 @@ public boolean noTextureRotations() { @EventHandler private void onRenderBlockEntity(RenderBlockEntityEvent event) { - if (blockEntities.get().contains(event.blockEntityState.field_62674.getBlock())) event.cancel(); + if (blockEntities.get().contains(event.blockEntityState.blockState.getBlock())) event.cancel(); } // Entity diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java index 8dca5850b2..c93e81283c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java @@ -87,7 +87,7 @@ public WWidget getWidget(GuiTheme theme) { @EventHandler private void onRenderBlockEntity(RenderBlockEntityEvent event) { - if (isBlocked(event.blockEntityState.field_62674.getBlock(), event.blockEntityState.field_62673)) event.cancel(); + if (isBlocked(event.blockEntityState.blockState.getBlock(), event.blockEntityState.pos)) event.cancel(); } @EventHandler diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java index ba3bdfba8a..ecddcc750b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java @@ -31,9 +31,6 @@ public FakePlayerEntity(PlayerEntity player, String name, float health, boolean bodyYaw = player.bodyYaw; lastBodyYaw = bodyYaw; - Byte playerModel = player.getDataTracker().get(PlayerEntity.field_62514); - dataTracker.set(PlayerEntity.field_62514, playerModel); - getAttributes().setFrom(player.getAttributes()); setPose(player.getPose()); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java index 2fcd170220..1e6d68de16 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -5,21 +5,16 @@ package meteordevelopment.meteorclient.utils.misc.input; +import meteordevelopment.meteorclient.MeteorClient; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; public class KeyBinds { - /* - todo - mojang changed how keybindings work, they used to take a String for the category but now take one of an enum - hopefully fabric adds a helper method to sort this out because the alternative will be doing it ourselves - with ASM or Unsafe, which will be a pain - */ - private static final String CATEGORY = "Meteor Client"; - - public static KeyBinding OPEN_GUI = new KeyBinding("key.meteor-client.open-gui", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, KeyBinding.class_11900.INTERFACE); - public static KeyBinding OPEN_COMMANDS = new KeyBinding("key.meteor-client.open-commands", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, KeyBinding.class_11900.INTERFACE); + private static final KeyBinding.Category CATEGORY = KeyBinding.Category.method_74698(MeteorClient.identifier("meteor-client")); + + public static KeyBinding OPEN_GUI = new KeyBinding("key.meteor-client.open-gui", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, CATEGORY); + public static KeyBinding OPEN_COMMANDS = new KeyBinding("key.meteor-client.open-commands", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, CATEGORY); private KeyBinds() { } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index 1ffa1dcac1..2f5b439825 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -9,12 +9,12 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.color.Color; -import net.minecraft.class_11908; -import net.minecraft.class_11909; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.BookScreen; import net.minecraft.client.gui.screen.ingame.ShulkerBoxScreen; +import net.minecraft.client.input.KeyInput; import net.minecraft.component.DataComponentTypes; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; @@ -38,10 +38,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(class_11909 arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean bl) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (arg.method_74245() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { return Utils.openContainer(focusedSlot.getStack(), contents, false); @@ -56,12 +56,12 @@ public boolean mouseClicked(class_11909 arg, boolean bl) { } @Override - public boolean mouseReleased(class_11909 arg) { + public boolean mouseReleased(Click arg) { return false; } @Override - public boolean keyPressed(class_11908 arg) { + public boolean keyPressed(KeyInput arg) { if (arg.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(arg)) { close(); return true; @@ -70,7 +70,7 @@ public boolean keyPressed(class_11908 arg) { } @Override - public boolean keyReleased(class_11908 arg) { + public boolean keyReleased(KeyInput arg) { if (arg.key() == GLFW.GLFW_KEY_ESCAPE) { close(); return true; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 59320681e3..3ebbf1b618 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -9,11 +9,11 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.class_11954; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderer; +import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BlockModelPart; import net.minecraft.client.render.model.BlockStateModel; @@ -40,11 +40,11 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt vertexConsumerProvider.setOffset(blockEntity.getPos().getX(), blockEntity.getPos().getY(), blockEntity.getPos().getZ()); SimpleBlockRenderer.render(blockEntity.getPos(), blockEntity.getCachedState(), vertexConsumerProvider); - BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); + BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { - class_11954 c = new class_11954(); - class_11954.method_74399(blockEntity, c, null); + BlockEntityRenderState c = new BlockEntityRenderState(); + BlockEntityRenderState.updateBlockEntityRenderState(blockEntity, c, null); renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue()); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 5c2147b79c..27210c6bb4 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -13,6 +13,7 @@ import net.minecraft.client.render.DiffuseLighting; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; +import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.command.RenderDispatcher; import net.minecraft.client.render.entity.model.EntityModelLayers; @@ -30,18 +31,21 @@ public class BannerTooltipComponent implements MeteorTooltipData, TooltipCompone private final DyeColor color; private final BannerPatternsComponent patterns; private final ModelPart bannerField; + private final BannerFlagBlockModel bannerFlag; // should only be used when the ItemStack is a banner public BannerTooltipComponent(ItemStack banner) { this.color = ((BannerItem) banner.getItem()).getColor(); this.patterns = banner.getOrDefault(DataComponentTypes.BANNER_PATTERNS, BannerPatternsComponent.DEFAULT); this.bannerField = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG).getChild("flag"); + this.bannerFlag = new BannerFlagBlockModel(bannerField); } public BannerTooltipComponent(DyeColor color, BannerPatternsComponent patterns) { this.color = color; this.patterns = patterns; this.bannerField = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG).getChild("flag"); + this.bannerFlag = new BannerFlagBlockModel(bannerField); } @Override @@ -88,7 +92,8 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he renderCommandQueue, 15728880, OverlayTexture.DEFAULT_UV, - bannerField, + bannerFlag, + null, ModelBaker.BANNER_BASE, true, color, diff --git a/src/main/resources/assets/meteor-client/lang/en_gb.json b/src/main/resources/assets/meteor-client/lang/en_gb.json index eba1690a62..7b02207810 100644 --- a/src/main/resources/assets/meteor-client/lang/en_gb.json +++ b/src/main/resources/assets/meteor-client/lang/en_gb.json @@ -1,4 +1,5 @@ { "key.meteor-client.open-gui": "Open GUI", - "key.meteor-client.open-commands": "Open Commands" + "key.meteor-client.open-commands": "Open Commands", + "key.category.meteor-client.meteor-client": "Meteor Client" } diff --git a/src/main/resources/assets/meteor-client/lang/en_us.json b/src/main/resources/assets/meteor-client/lang/en_us.json index eba1690a62..7b02207810 100644 --- a/src/main/resources/assets/meteor-client/lang/en_us.json +++ b/src/main/resources/assets/meteor-client/lang/en_us.json @@ -1,4 +1,5 @@ { "key.meteor-client.open-gui": "Open GUI", - "key.meteor-client.open-commands": "Open Commands" + "key.meteor-client.open-commands": "Open Commands", + "key.category.meteor-client.meteor-client": "Meteor Client" } diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index a38b6622d6..e1bd2370a3 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -49,7 +49,6 @@ "ChunkAccessor", "ChunkBorderDebugRendererMixin", "ChunkOcclusionDataBuilderMixin", - "ChunkSkyLightProviderMixin", "ClientChunkManagerAccessor", "ClientChunkMapAccessor", "ClientConnectionAccessor", From 28b3c5e2cf077916e46d3d890d86b8e007d86075 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Wed, 17 Sep 2025 12:52:55 +0100 Subject: [PATCH 08/38] Update to 1.21.9-pre.1 Regenerated PacketUtils --- gradle.properties | 6 +++--- .../mixin/BannerBlockEntityRendererMixin.java | 5 +++-- .../mixin/BlockEntityRenderManagerMixin.java | 5 +++-- .../mixin/CapeFeatureRendererMixin.java | 7 ++++--- .../mixin/EndCrystalEntityRendererMixin.java | 11 ++++++----- .../mixin/EntityRenderDispatcherMixin.java | 5 ----- .../mixin/ItemEntityRendererMixin.java | 5 +++-- .../mixin/LivingEntityRendererMixin.java | 11 ++++++----- .../meteorclient/mixin/WorldRendererMixin.java | 18 ++++++++---------- .../utils/network/PacketUtils.java | 18 ++++++++++++++++-- .../utils/render/SimpleBlockRenderer.java | 3 ++- .../utils/render/WireframeEntityRenderer.java | 3 ++- 12 files changed, 56 insertions(+), 41 deletions(-) diff --git a/gradle.properties b/gradle.properties index bb07651b87..c48545c20e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=25w37a -yarn_mappings=25w37a+build.1 +minecraft_version=1.21.9-pre1 +yarn_mappings=1.21.9-pre1+build.2 loader_version=0.17.2 -fapi_version=0.133.4+1.21.9 +fapi_version=0.133.7+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 71490a80c3..857b593a23 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; @@ -30,8 +31,8 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(BannerBlockEntityRenderState arg, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(BannerBlockEntityRenderState bannerBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index ca0366c2fe..91b4cb2d58 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; +import net.minecraft.class_12075; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; @@ -19,8 +20,8 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(S blockEntity, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { - RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(blockEntity)); + private void onRenderEntity(S renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, class_12075 arg, CallbackInfo ci) { + RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(renderState)); if (event.isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index b4d57b43e7..ee5993692f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -8,6 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; +import net.minecraft.class_12079; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.CapeFeatureRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; @@ -19,11 +20,11 @@ @Mixin(CapeFeatureRenderer.class) public abstract class CapeFeatureRendererMixin { - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;capeTexture()Lnet/minecraft/util/Identifier;")) - private Identifier modifyCapeTexture(Identifier original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;cape()Lnet/minecraft/class_12079$class_12081;")) + private class_12079.class_12081 modifyCapeTexture(class_12079.class_12081 original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); - return id == null ? original : id; + return id == null ? original : new class_12079.AssetInfo(id); } return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index ceb986b0cd..1f7e24bdc7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -8,6 +8,7 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; +import net.minecraft.class_12075; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.ModelCommandRenderer; @@ -44,15 +45,15 @@ private void onInit(CallbackInfo info) { @Final private static Identifier TEXTURE; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD")) - private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD")) + private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { END_CRYSTAL = RenderLayer.getEntityTranslucent((chams.isActive() && chams.crystals.get() && !chams.crystalsTexture.get()) ? Chams.BLANK : TEXTURE); } // Chams - Scale - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) - private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) + private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { if (!chams.isActive() || !chams.crystals.get()) return; float v = chams.crystalsScale.get().floatValue(); @@ -61,7 +62,7 @@ private void onInit(CallbackInfo info) { // Chams - Color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) private boolean render$color(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (chams.isActive() && chams.crystals.get()) { instance.submitModel(model, diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java index 2f3161a69c..23ef96a7f9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java @@ -80,9 +80,4 @@ private static void onRenderShadow(MatrixStack matrices, VertexConsumerProvider private void onGetSquaredDistanceToCameraEntity(Entity entity, CallbackInfoReturnable info) { if (camera == null) info.setReturnValue(0.0); } - - @Inject(method = "getSquaredDistanceToCamera(DDD)D", at = @At("HEAD"), cancellable = true) - private void onGetSquaredDistanceToCameraXYZ(double x, double y, double z, CallbackInfoReturnable info) { - if (camera == null) info.setReturnValue(0.0); - } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java index fc0cc93530..72120aea4a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderItemEntityEvent; +import net.minecraft.class_12075; import net.minecraft.client.item.ItemModelManager; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.ItemEntityRenderer; @@ -27,8 +28,8 @@ public abstract class ItemEntityRendererMixin { @Final private ItemModelManager itemModelManager; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) + private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { // todo fix to work with entity render batching RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager, orderedRenderCommandQueue)); if (event.isCancelled()) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index bfa8a9da5f..166cf0edd4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -14,6 +14,7 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.player.PlayerUtils; +import net.minecraft.class_12075; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.ModelCommandRenderer; @@ -64,7 +65,7 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) private boolean render$render(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; @@ -90,8 +91,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB // Chams - Through walls - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void render$Head(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) + private void render$Head(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; @@ -103,8 +104,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB } } - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("TAIL")) - private void render$Tail(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("TAIL")) + private void render$Tail(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 2db90f7fe5..efcb623765 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -15,17 +15,15 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; -import net.minecraft.block.BlockState; +import net.minecraft.class_12074; +import net.minecraft.class_12077; +import net.minecraft.class_12078; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.render.*; import net.minecraft.client.util.Handle; import net.minecraft.client.util.ObjectAllocator; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.Entity; -import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.world.World; -import net.minecraft.world.border.WorldBorder; import org.joml.Matrix4f; import org.joml.Vector4f; import org.spongepowered.asm.mixin.Final; @@ -46,7 +44,7 @@ private void onCheckEmpty(MatrixStack matrixStack, CallbackInfo info) { } @Inject(method = "drawBlockOutline", at = @At("HEAD"), cancellable = true) - private void onDrawHighlightedBlockOutline(MatrixStack matrices, VertexConsumer vertexConsumer, Entity entity, double cameraX, double cameraY, double cameraZ, BlockPos pos, BlockState state, int i, CallbackInfo ci) { + private void onDrawHighlightedBlockOutline(MatrixStack matrixStack, VertexConsumer vertexConsumer, double d, double e, double f, class_12074 arg, int i, CallbackInfo ci) { if (Modules.get().isActive(BlockSelection.class)) ci.cancel(); } @@ -57,13 +55,13 @@ private boolean renderSetupTerrainModifyArg(boolean spectator) { // No Render - @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WeatherRendering;renderPrecipitation(Lnet/minecraft/world/World;Lnet/minecraft/client/render/VertexConsumerProvider;IFLnet/minecraft/util/math/Vec3d;)V")) - private boolean shouldRenderPrecipitation(WeatherRendering instance, World world, VertexConsumerProvider vertexConsumers, int ticks, float tickProgress, Vec3d pos) { + @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WeatherRendering;renderPrecipitation(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/class_12077;)V")) + private boolean shouldRenderPrecipitation(WeatherRendering instance, VertexConsumerProvider vertexConsumers, Vec3d pos, class_12077 arg) { return !Modules.get().get(NoRender.class).noWeather(); } - @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldBorderRendering;render(Lnet/minecraft/world/border/WorldBorder;Lnet/minecraft/util/math/Vec3d;DD)V")) - private boolean shouldRenderWorldBorder(WorldBorderRendering instance, WorldBorder border, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance) { + @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldBorderRendering;render(Lnet/minecraft/class_12078;Lnet/minecraft/util/math/Vec3d;DD)V")) + private boolean shouldRenderWorldBorder(WorldBorderRendering instance, class_12078 arg, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance) { return !Modules.get().get(NoRender.class).noWorldBorder(); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java index 7039e5f11d..ed3a3fef4c 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java @@ -23,6 +23,8 @@ public class PacketUtils { public static final Set>> PACKETS = Sets.union(getC2SPackets(), getS2CPackets()); static { + C2S_PACKETS.put(net.minecraft.network.packet.c2s.config.AcceptCodeOfConductC2SPacket.class, "AcceptCodeOfConductC2SPacket"); + C2S_PACKETS_R.put("AcceptCodeOfConductC2SPacket", net.minecraft.network.packet.c2s.config.AcceptCodeOfConductC2SPacket.class); C2S_PACKETS.put(net.minecraft.network.packet.c2s.play.AcknowledgeChunksC2SPacket.class, "AcknowledgeChunksC2SPacket"); C2S_PACKETS_R.put("AcknowledgeChunksC2SPacket", net.minecraft.network.packet.c2s.play.AcknowledgeChunksC2SPacket.class); C2S_PACKETS.put(net.minecraft.network.packet.c2s.play.AcknowledgeReconfigurationC2SPacket.class, "AcknowledgeReconfigurationC2SPacket"); @@ -69,8 +71,8 @@ public class PacketUtils { C2S_PACKETS_R.put("CustomClickActionC2SPacket", net.minecraft.network.packet.c2s.common.CustomClickActionC2SPacket.class); C2S_PACKETS.put(net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket.class, "CustomPayloadC2SPacket"); C2S_PACKETS_R.put("CustomPayloadC2SPacket", net.minecraft.network.packet.c2s.common.CustomPayloadC2SPacket.class); - C2S_PACKETS.put(net.minecraft.network.packet.c2s.play.DebugSampleSubscriptionC2SPacket.class, "DebugSampleSubscriptionC2SPacket"); - C2S_PACKETS_R.put("DebugSampleSubscriptionC2SPacket", net.minecraft.network.packet.c2s.play.DebugSampleSubscriptionC2SPacket.class); + C2S_PACKETS.put(net.minecraft.network.packet.c2s.play.DebugSubscriptionRequestC2SPacket.class, "DebugSubscriptionRequestC2SPacket"); + C2S_PACKETS_R.put("DebugSubscriptionRequestC2SPacket", net.minecraft.network.packet.c2s.play.DebugSubscriptionRequestC2SPacket.class); C2S_PACKETS.put(net.minecraft.network.packet.c2s.login.EnterConfigurationC2SPacket.class, "EnterConfigurationC2SPacket"); C2S_PACKETS_R.put("EnterConfigurationC2SPacket", net.minecraft.network.packet.c2s.login.EnterConfigurationC2SPacket.class); C2S_PACKETS.put(net.minecraft.network.packet.c2s.play.HandSwingC2SPacket.class, "HandSwingC2SPacket"); @@ -184,6 +186,8 @@ public class PacketUtils { S2C_PACKETS_R.put("BlockEventS2CPacket", net.minecraft.network.packet.s2c.play.BlockEventS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket.class, "BlockUpdateS2CPacket"); S2C_PACKETS_R.put("BlockUpdateS2CPacket", net.minecraft.network.packet.s2c.play.BlockUpdateS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.BlockValueDebugS2CPacket.class, "BlockValueDebugS2CPacket"); + S2C_PACKETS_R.put("BlockValueDebugS2CPacket", net.minecraft.network.packet.s2c.play.BlockValueDebugS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.BossBarS2CPacket.class, "BossBarS2CPacket"); S2C_PACKETS_R.put("BossBarS2CPacket", net.minecraft.network.packet.s2c.play.BossBarS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ChatMessageS2CPacket.class, "ChatMessageS2CPacket"); @@ -202,12 +206,16 @@ public class PacketUtils { S2C_PACKETS_R.put("ChunkRenderDistanceCenterS2CPacket", net.minecraft.network.packet.s2c.play.ChunkRenderDistanceCenterS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ChunkSentS2CPacket.class, "ChunkSentS2CPacket"); S2C_PACKETS_R.put("ChunkSentS2CPacket", net.minecraft.network.packet.s2c.play.ChunkSentS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ChunkValueDebugS2CPacket.class, "ChunkValueDebugS2CPacket"); + S2C_PACKETS_R.put("ChunkValueDebugS2CPacket", net.minecraft.network.packet.s2c.play.ChunkValueDebugS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.common.ClearDialogS2CPacket.class, "ClearDialogS2CPacket"); S2C_PACKETS_R.put("ClearDialogS2CPacket", net.minecraft.network.packet.s2c.common.ClearDialogS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ClearTitleS2CPacket.class, "ClearTitleS2CPacket"); S2C_PACKETS_R.put("ClearTitleS2CPacket", net.minecraft.network.packet.s2c.play.ClearTitleS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.CloseScreenS2CPacket.class, "CloseScreenS2CPacket"); S2C_PACKETS_R.put("CloseScreenS2CPacket", net.minecraft.network.packet.s2c.play.CloseScreenS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.config.CodeOfConductS2CPacket.class, "CodeOfConductS2CPacket"); + S2C_PACKETS_R.put("CodeOfConductS2CPacket", net.minecraft.network.packet.s2c.config.CodeOfConductS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket.class, "CommandSuggestionsS2CPacket"); S2C_PACKETS_R.put("CommandSuggestionsS2CPacket", net.minecraft.network.packet.s2c.play.CommandSuggestionsS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket.class, "CommandTreeS2CPacket"); @@ -278,8 +286,12 @@ public class PacketUtils { S2C_PACKETS_R.put("EntityStatusS2CPacket", net.minecraft.network.packet.s2c.play.EntityStatusS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.EntityTrackerUpdateS2CPacket.class, "EntityTrackerUpdateS2CPacket"); S2C_PACKETS_R.put("EntityTrackerUpdateS2CPacket", net.minecraft.network.packet.s2c.play.EntityTrackerUpdateS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.EntityValueDebugS2CPacket.class, "EntityValueDebugS2CPacket"); + S2C_PACKETS_R.put("EntityValueDebugS2CPacket", net.minecraft.network.packet.s2c.play.EntityValueDebugS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket.class, "EntityVelocityUpdateS2CPacket"); S2C_PACKETS_R.put("EntityVelocityUpdateS2CPacket", net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.EventDebugS2CPacket.class, "EventDebugS2CPacket"); + S2C_PACKETS_R.put("EventDebugS2CPacket", net.minecraft.network.packet.s2c.play.EventDebugS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ExperienceBarUpdateS2CPacket.class, "ExperienceBarUpdateS2CPacket"); S2C_PACKETS_R.put("ExperienceBarUpdateS2CPacket", net.minecraft.network.packet.s2c.play.ExperienceBarUpdateS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.ExplosionS2CPacket.class, "ExplosionS2CPacket"); @@ -292,6 +304,8 @@ public class PacketUtils { S2C_PACKETS_R.put("GameMessageS2CPacket", net.minecraft.network.packet.s2c.play.GameMessageS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.GameStateChangeS2CPacket.class, "GameStateChangeS2CPacket"); S2C_PACKETS_R.put("GameStateChangeS2CPacket", net.minecraft.network.packet.s2c.play.GameStateChangeS2CPacket.class); + S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.GameTestHighlightPosS2CPacket.class, "GameTestHighlightPosS2CPacket"); + S2C_PACKETS_R.put("GameTestHighlightPosS2CPacket", net.minecraft.network.packet.s2c.play.GameTestHighlightPosS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.HealthUpdateS2CPacket.class, "HealthUpdateS2CPacket"); S2C_PACKETS_R.put("HealthUpdateS2CPacket", net.minecraft.network.packet.s2c.play.HealthUpdateS2CPacket.class); S2C_PACKETS.put(net.minecraft.network.packet.s2c.play.InventoryS2CPacket.class, "InventoryS2CPacket"); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 3ebbf1b618..95dd02bdab 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -9,6 +9,7 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; +import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; @@ -45,7 +46,7 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { BlockEntityRenderState c = new BlockEntityRenderState(); BlockEntityRenderState.updateBlockEntityRenderState(blockEntity, c, null); - renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue()); + renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), new class_12075()); } vertexConsumerProvider.setOffset(0, 0, 0); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 55fd734366..72bcdd5ae7 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -12,6 +12,7 @@ import meteordevelopment.meteorclient.renderer.Renderer3D; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; @@ -67,7 +68,7 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo matrices.push(); matrices.scale((float) scale, (float) scale, (float) scale); - renderer.render(state, matrices, entityRenderCommandQueue); + renderer.render(state, matrices, entityRenderCommandQueue, new class_12075()); // todo this just adds the entities to a list, we need to actually render them somewhere by calling // net.minecraft.class_11688.method_73012 matrices.pop(); From 2dcdae8d7a46fafdf7e3f99221b7cdff1819ec3a Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 19 Sep 2025 18:48:23 +0100 Subject: [PATCH 09/38] Update to 1.21.9-pre.2 Just mapping changes --- gradle.properties | 4 ++-- .../mixin/BannerBlockEntityRendererMixin.java | 6 +++--- .../mixin/BlockEntityRenderManagerMixin.java | 4 ++-- .../mixin/CapeFeatureRendererMixin.java | 8 ++++---- .../mixin/EndCrystalEntityRendererMixin.java | 12 ++++++------ .../mixin/ItemEntityRendererMixin.java | 6 +++--- .../mixin/LivingEntityRendererMixin.java | 12 ++++++------ .../meteorclient/mixin/PlayerListEntryMixin.java | 2 +- .../meteorclient/mixin/WorldRendererMixin.java | 16 ++++++++-------- .../meteorclient/utils/misc/input/KeyBinds.java | 2 +- .../utils/render/SimpleBlockRenderer.java | 4 ++-- .../utils/render/WireframeEntityRenderer.java | 4 ++-- 12 files changed, 40 insertions(+), 40 deletions(-) diff --git a/gradle.properties b/gradle.properties index c48545c20e..e025813e02 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,8 +2,8 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=1.21.9-pre1 -yarn_mappings=1.21.9-pre1+build.2 +minecraft_version=1.21.9-pre2 +yarn_mappings=1.21.9-pre2+build.2 loader_version=0.17.2 fapi_version=0.133.7+1.21.9 diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 857b593a23..b28637c137 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -7,7 +7,6 @@ import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; @@ -16,6 +15,7 @@ import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.model.ModelBaker; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.texture.SpriteHolder; import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.math.MatrixStack; @@ -31,8 +31,8 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { - @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) - private void injectRender1(BannerBlockEntityRenderState bannerBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) + private void injectRender1(BannerBlockEntityRenderState bannerBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 91b4cb2d58..4fc4ef95fc 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -7,10 +7,10 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; -import net.minecraft.class_12075; import net.minecraft.client.render.block.entity.BlockEntityRenderManager; import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -20,7 +20,7 @@ @Mixin(BlockEntityRenderManager.class) public abstract class BlockEntityRenderManagerMixin { @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderEntity(S renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, class_12075 arg, CallbackInfo ci) { + private void onRenderEntity(S renderState, MatrixStack matrices, OrderedRenderCommandQueue queue, CameraRenderState arg, CallbackInfo ci) { RenderBlockEntityEvent event = MeteorClient.EVENT_BUS.post(RenderBlockEntityEvent.get(renderState)); if (event.isCancelled()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index ee5993692f..92e488d0aa 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -8,23 +8,23 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.utils.network.Capes; -import net.minecraft.class_12079; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.feature.CapeFeatureRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.AssetInfo; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @Mixin(CapeFeatureRenderer.class) public abstract class CapeFeatureRendererMixin { - @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/SkinTextures;cape()Lnet/minecraft/class_12079$class_12081;")) - private class_12079.class_12081 modifyCapeTexture(class_12079.class_12081 original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { + @ModifyExpressionValue(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/SkinTextures;cape()Lnet/minecraft/util/AssetInfo$TextureAsset;")) + private AssetInfo.TextureAsset modifyCapeTexture(AssetInfo.TextureAsset original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); - return id == null ? original : new class_12079.AssetInfo(id); + return id == null ? original : new AssetInfo.TextureAssetInfo(id); } return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index 1f7e24bdc7..5be7a80469 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -8,13 +8,13 @@ import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Chams; -import net.minecraft.class_12075; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EndCrystalEntityRenderer; import net.minecraft.client.render.entity.state.EndCrystalEntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.*; @@ -45,15 +45,15 @@ private void onInit(CallbackInfo info) { @Final private static Identifier TEXTURE; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD")) - private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD")) + private void render$renderLayer(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { END_CRYSTAL = RenderLayer.getEntityTranslucent((chams.isActive() && chams.crystals.get() && !chams.crystalsTexture.get()) ? Chams.BLANK : TEXTURE); } // Chams - Scale - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) - private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;scale(FFF)V")) + private void render$scale(EndCrystalEntityRenderState endCrystalEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { if (!chams.isActive() || !chams.crystals.get()) return; float v = chams.crystalsScale.get().floatValue(); @@ -62,7 +62,7 @@ private void onInit(CallbackInfo info) { // Chams - Color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) private boolean render$color(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (chams.isActive() && chams.crystals.get()) { instance.submitModel(model, diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java index 72120aea4a..8d22ab70ce 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -7,11 +7,11 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.RenderItemEntityEvent; -import net.minecraft.class_12075; import net.minecraft.client.item.ItemModelManager; import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.ItemEntityRenderer; import net.minecraft.client.render.entity.state.ItemEntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -28,8 +28,8 @@ public abstract class ItemEntityRendererMixin { @Final private ItemModelManager itemModelManager; - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) - private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/ItemEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) + private void renderStack(ItemEntityRenderState itemEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { // todo fix to work with entity render batching RenderItemEntityEvent event = MeteorClient.EVENT_BUS.post(RenderItemEntityEvent.get(itemEntityRenderState, mc.getRenderTickCounter().getTickProgress(true), matrixStack, null, itemEntityRenderState.light, this.itemModelManager, orderedRenderCommandQueue)); if (event.isCancelled()) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index 166cf0edd4..4ea46c1a6a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -14,7 +14,6 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.player.PlayerUtils; -import net.minecraft.class_12075; import net.minecraft.client.model.Model; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.command.ModelCommandRenderer; @@ -22,6 +21,7 @@ import net.minecraft.client.render.entity.LivingEntityRenderer; import net.minecraft.client.render.entity.model.EntityModel; import net.minecraft.client.render.entity.state.LivingEntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; @@ -65,7 +65,7 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color - @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) private boolean render$render(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; @@ -91,8 +91,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB // Chams - Through walls - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("HEAD"), cancellable = true) - private void render$Head(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) + private void render$Head(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; @@ -104,8 +104,8 @@ private RenderLayer getRenderPlayer(RenderLayer original, S state, boolean showB } } - @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/class_12075;)V", at = @At("TAIL")) - private void render$Tail(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, class_12075 arg, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("TAIL")) + private void render$Tail(S state, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { Entity entity = ((IEntityRenderState) state).meteor$getEntity(); if (!(entity instanceof LivingEntity livingEntity)) return; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java index d02c672c3d..6b330236b2 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java @@ -11,7 +11,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.PlayerListEntry; import net.minecraft.client.util.DefaultSkinHelper; -import net.minecraft.client.util.SkinTextures; +import net.minecraft.entity.player.SkinTextures; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index efcb623765..21bc407fac 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -15,11 +15,11 @@ import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; -import net.minecraft.class_12074; -import net.minecraft.class_12077; -import net.minecraft.class_12078; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.render.*; +import net.minecraft.client.render.state.OutlineRenderState; +import net.minecraft.client.render.state.WeatherRenderState; +import net.minecraft.client.render.state.WorldBorderRenderState; import net.minecraft.client.util.Handle; import net.minecraft.client.util.ObjectAllocator; import net.minecraft.client.util.math.MatrixStack; @@ -44,7 +44,7 @@ private void onCheckEmpty(MatrixStack matrixStack, CallbackInfo info) { } @Inject(method = "drawBlockOutline", at = @At("HEAD"), cancellable = true) - private void onDrawHighlightedBlockOutline(MatrixStack matrixStack, VertexConsumer vertexConsumer, double d, double e, double f, class_12074 arg, int i, CallbackInfo ci) { + private void onDrawHighlightedBlockOutline(MatrixStack matrices, VertexConsumer vertexConsumer, double x, double y, double z, OutlineRenderState state, int i, CallbackInfo ci) { if (Modules.get().isActive(BlockSelection.class)) ci.cancel(); } @@ -55,13 +55,13 @@ private boolean renderSetupTerrainModifyArg(boolean spectator) { // No Render - @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WeatherRendering;renderPrecipitation(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/class_12077;)V")) - private boolean shouldRenderPrecipitation(WeatherRendering instance, VertexConsumerProvider vertexConsumers, Vec3d pos, class_12077 arg) { + @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WeatherRendering;renderPrecipitation(Lnet/minecraft/client/render/VertexConsumerProvider;Lnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/state/WeatherRenderState;)V")) + private boolean shouldRenderPrecipitation(WeatherRendering instance, VertexConsumerProvider vertexConsumers, Vec3d pos, WeatherRenderState weatherRenderState) { return !Modules.get().get(NoRender.class).noWeather(); } - @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldBorderRendering;render(Lnet/minecraft/class_12078;Lnet/minecraft/util/math/Vec3d;DD)V")) - private boolean shouldRenderWorldBorder(WorldBorderRendering instance, class_12078 arg, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance) { + @WrapWithCondition(method = "method_62216", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldBorderRendering;render(Lnet/minecraft/client/render/state/WorldBorderRenderState;Lnet/minecraft/util/math/Vec3d;DD)V")) + private boolean shouldRenderWorldBorder(WorldBorderRendering instance, WorldBorderRenderState state, Vec3d cameraPos, double viewDistanceBlocks, double farPlaneDistance) { return !Modules.get().get(NoRender.class).noWorldBorder(); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java index 1e6d68de16..6830326c87 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -11,7 +11,7 @@ import org.lwjgl.glfw.GLFW; public class KeyBinds { - private static final KeyBinding.Category CATEGORY = KeyBinding.Category.method_74698(MeteorClient.identifier("meteor-client")); + private static final KeyBinding.Category CATEGORY = KeyBinding.Category.create(MeteorClient.identifier("meteor-client")); public static KeyBinding OPEN_GUI = new KeyBinding("key.meteor-client.open-gui", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_RIGHT_SHIFT, CATEGORY); public static KeyBinding OPEN_COMMANDS = new KeyBinding("key.meteor-client.open-commands", InputUtil.Type.KEYSYM, GLFW.GLFW_KEY_PERIOD, CATEGORY); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 95dd02bdab..1eee522ca1 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -9,7 +9,6 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; @@ -18,6 +17,7 @@ import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BlockModelPart; import net.minecraft.client.render.model.BlockStateModel; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -46,7 +46,7 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { BlockEntityRenderState c = new BlockEntityRenderState(); BlockEntityRenderState.updateBlockEntityRenderState(blockEntity, c, null); - renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), new class_12075()); + renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), new CameraRenderState()); } vertexConsumerProvider.setOffset(0, 0, 0); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 72bcdd5ae7..571af5470a 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -12,7 +12,6 @@ import meteordevelopment.meteorclient.renderer.Renderer3D; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.utils.render.color.Color; -import net.minecraft.class_12075; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; @@ -21,6 +20,7 @@ import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.util.math.MathHelper; @@ -68,7 +68,7 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo matrices.push(); matrices.scale((float) scale, (float) scale, (float) scale); - renderer.render(state, matrices, entityRenderCommandQueue, new class_12075()); + renderer.render(state, matrices, entityRenderCommandQueue, new CameraRenderState()); // todo this just adds the entities to a list, we need to actually render them somewhere by calling // net.minecraft.class_11688.method_73012 matrices.pop(); From fe075ee6de17506c2bd94810937be8105aecbf09 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Wed, 24 Sep 2025 20:15:24 +0100 Subject: [PATCH 10/38] Update to 1.21.9-pre.4 --- gradle.properties | 6 ++-- .../commands/commands/DamageCommand.java | 2 +- .../entity/player/CanWalkOnFluidEvent.java | 2 +- .../player/SendMovementPacketsEvent.java | 4 +-- .../gui/utils/SettingsWidgetFactory.java | 2 +- .../mixin/BannerBlockEntityRendererMixin.java | 6 ++-- .../meteorclient/mixin/BeaconScreenMixin.java | 5 +++- .../meteorclient/mixin/GameRendererMixin.java | 4 +-- .../pathing/BaritonePathManager.java | 3 +- .../systems/hud/elements/CompassHud.java | 2 +- .../systems/modules/combat/ArrowDodge.java | 4 +-- .../systems/modules/combat/AutoWeb.java | 2 +- .../systems/modules/combat/CrystalAura.java | 10 +++---- .../systems/modules/combat/HoleFiller.java | 2 +- .../systems/modules/combat/Surround.java | 2 +- .../systems/modules/misc/Notifier.java | 6 ++-- .../systems/modules/movement/AutoWasp.java | 2 +- .../systems/modules/movement/Blink.java | 2 +- .../systems/modules/movement/NoFall.java | 2 +- .../systems/modules/movement/SafeWalk.java | 2 +- .../systems/modules/movement/Scaffold.java | 8 ++--- .../systems/modules/movement/Step.java | 2 +- .../modules/movement/elytrafly/ElytraFly.java | 6 ++-- .../systems/modules/player/AutoRespawn.java | 2 +- .../systems/modules/render/HoleESP.java | 2 +- .../systems/modules/render/PopChams.java | 2 +- .../modules/render/WaypointsModule.java | 2 +- .../systems/modules/world/Flamethrower.java | 2 +- .../systems/modules/world/HighwayBuilder.java | 8 ++--- .../systems/modules/world/Nuker.java | 8 ++--- .../utils/entity/DamageUtils.java | 6 ++-- .../utils/misc/MeteorStarscript.java | 2 +- .../utils/misc/text/TextVisitor.java | 4 +-- .../meteorclient/utils/player/PathFinder.java | 14 ++++----- .../utils/player/PlayerUtils.java | 3 +- .../utils/tooltip/BannerTooltipComponent.java | 29 ++++++++++--------- .../resources/meteor-client.accesswidener | 2 ++ 37 files changed, 89 insertions(+), 83 deletions(-) diff --git a/gradle.properties b/gradle.properties index e025813e02..77e728d0c4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=1.21.9-pre2 -yarn_mappings=1.21.9-pre2+build.2 +minecraft_version=1.21.9-pre4 +yarn_mappings=1.21.9-pre4+build.2 loader_version=0.17.2 -fapi_version=0.133.7+1.21.9 +fapi_version=0.133.11+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/DamageCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/DamageCommand.java index 89f48f34d8..973c10bb0c 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/DamageCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/DamageCommand.java @@ -46,7 +46,7 @@ private void damagePlayer(int amount) { boolean antiHunger = Modules.get().isActive(AntiHunger.class); if (antiHunger) Modules.get().get(AntiHunger.class).toggle(); - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); for(int i = 0; i < 80; i++) { sendPositionPacket(pos.x, pos.y + amount + 2.1, pos.z, false); diff --git a/src/main/java/meteordevelopment/meteorclient/events/entity/player/CanWalkOnFluidEvent.java b/src/main/java/meteordevelopment/meteorclient/events/entity/player/CanWalkOnFluidEvent.java index f89d5d38db..e5fbfabe68 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/entity/player/CanWalkOnFluidEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/entity/player/CanWalkOnFluidEvent.java @@ -15,7 +15,7 @@ * Getting the pose calls {@link meteordevelopment.meteorclient.mixin.EntityMixin#modifyGetPose(net.minecraft.entity.EntityPose)}, * which calls {@link PlayerEntity#canChangeIntoPose(net.minecraft.entity.EntityPose)}, which * calculates whether there is enough space to fit your bounding box if you change into that pose. This method ends up - * calling {@link LivingEntity#canWalkOnFluid(net.minecraft.fluid.FluidState)}, causing this event to fire + * calling {@link LivingEntity#canWalkOnFluid(FluidState)}, causing this event to fire * again and leading to a stack overflow crash. Introduced in * this pull request */ diff --git a/src/main/java/meteordevelopment/meteorclient/events/entity/player/SendMovementPacketsEvent.java b/src/main/java/meteordevelopment/meteorclient/events/entity/player/SendMovementPacketsEvent.java index 4c603397d3..cc3396c054 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/entity/player/SendMovementPacketsEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/entity/player/SendMovementPacketsEvent.java @@ -9,7 +9,7 @@ public class SendMovementPacketsEvent { public static class Pre { private static final Pre INSTANCE = new Pre(); - public static SendMovementPacketsEvent.Pre get() { + public static Pre get() { return INSTANCE; } } @@ -17,7 +17,7 @@ public static SendMovementPacketsEvent.Pre get() { public static class Post { private static final Post INSTANCE = new Post(); - public static SendMovementPacketsEvent.Post get() { + public static Post get() { return INSTANCE; } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java b/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java index 6e890fadf7..3ba3d98ce1 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/utils/SettingsWidgetFactory.java @@ -16,7 +16,7 @@ import java.util.function.Function; public abstract class SettingsWidgetFactory { - private static final Map, Function> customFactories = new HashMap<>(); + private static final Map, Function> customFactories = new HashMap<>(); protected final GuiTheme theme; protected final Map, Factory> factories = new HashMap<>(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index b28637c137..560484ab68 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -36,10 +36,10 @@ private void injectRender1(BannerBlockEntityRenderState bannerBlockEntityRenderS if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V"), cancellable = true) - private static void injectRender2(SpriteHolder spriteHolder, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel bannerBlockModel, BannerFlagBlockModel bannerFlagBlockModel, float g, DyeColor dyeColor, BannerPatternsComponent bannerPatternsComponent, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V"), cancellable = true) + private static void injectRender2(SpriteHolder materials, MatrixStack matrices, OrderedRenderCommandQueue queue, int light, int overlay, float yaw, BannerBlockModel model, BannerFlagBlockModel flagModel, float pitch, DyeColor dyeColor, BannerPatternsComponent bannerPatterns, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int outline, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { - renderPillar(matrixStack, orderedRenderCommandQueue, light, overlay, rotation, bannerBlockModel, spriteHolder, crumblingOverlayCommand); + renderPillar(matrices, queue, light, overlay, yaw, model, materials, crumblingOverlay); ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconScreenMixin.java index eb9f7250d5..9f1e6046a6 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconScreenMixin.java @@ -36,11 +36,14 @@ public BeaconScreenMixin(BeaconScreenHandler handler, PlayerInventory inventory, super(handler, inventory, title); } - @Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ingame/BeaconScreen;addButton(Lnet/minecraft/client/gui/widget/ClickableWidget;)V", ordinal = 1, shift = At.Shift.AFTER), cancellable = true) + @Inject(method = "init", at = @At(value = "INVOKE", target = "Ljava/util/List;clear()V", shift = At.Shift.AFTER), cancellable = true) private void changeButtons(CallbackInfo ci) { if (!Modules.get().get(BetterBeacons.class).isActive()) return; List> effects = BeaconBlockEntity.EFFECTS_BY_LEVEL.stream().flatMap(Collection::stream).toList(); if (MinecraftClient.getInstance().currentScreen instanceof BeaconScreen beaconScreen) { + addButton(beaconScreen.new DoneButtonWidget(this.x + 164, this.y + 107)); + addButton(beaconScreen.new CancelButtonWidget(this.x + 190, this.y + 107)); + for (int x = 0; x < 3; x++) { for (int y = 0; y < 2; y++) { RegistryEntry effect = effects.get(x * 2 + y); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index 243cc51f69..6641233904 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -191,7 +191,7 @@ private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) { cameraE.setYaw(camera.getYaw()); cameraE.setPitch(camera.getPitch()); } else { - ((IVec3d) cameraE.getPos()).meteor$set(freecam.pos.x, freecam.pos.y - cameraE.getEyeHeight(cameraE.getPose()), freecam.pos.z); + ((IVec3d) cameraE.getEntityPos()).meteor$set(freecam.pos.x, freecam.pos.y - cameraE.getEyeHeight(cameraE.getPose()), freecam.pos.z); cameraE.lastX = freecam.prevPos.x; cameraE.lastY = freecam.prevPos.y - cameraE.getEyeHeight(cameraE.getPose()); cameraE.lastZ = freecam.prevPos.z; @@ -205,7 +205,7 @@ private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) { updateCrosshairTarget(tickDelta); freecamSet = false; - ((IVec3d) cameraE.getPos()).meteor$set(x, y, z); + ((IVec3d) cameraE.getEntityPos()).meteor$set(x, y, z); cameraE.lastX = lastX; cameraE.lastY = lastY; cameraE.lastZ = lastZ; diff --git a/src/main/java/meteordevelopment/meteorclient/pathing/BaritonePathManager.java b/src/main/java/meteordevelopment/meteorclient/pathing/BaritonePathManager.java index 3fffe3720f..5a7ce7d4d1 100644 --- a/src/main/java/meteordevelopment/meteorclient/pathing/BaritonePathManager.java +++ b/src/main/java/meteordevelopment/meteorclient/pathing/BaritonePathManager.java @@ -12,7 +12,6 @@ import baritone.api.process.IBaritoneProcess; import baritone.api.process.PathingCommand; import baritone.api.process.PathingCommandType; -import baritone.api.utils.Rotation; import baritone.api.utils.SettingsUtil; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.world.TickEvent; @@ -158,7 +157,7 @@ public void tick() { if (timer <= 0) { timer = 20; - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); float theta = (float) Math.toRadians(yaw); x = (int) Math.floor(pos.x - (double) MathHelper.sin(theta) * 100); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CompassHud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CompassHud.java index 610382aad7..fcd83dbdea 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CompassHud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CompassHud.java @@ -24,7 +24,7 @@ public class CompassHud extends HudElement { // General - private final Setting mode = sgGeneral.add(new EnumSetting.Builder() + private final Setting mode = sgGeneral.add(new EnumSetting.Builder() .name("type") .description("Which type of direction information to show.") .defaultValue(Mode.Axis) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java index fd27e9500e..05bbed0e0b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java @@ -157,7 +157,7 @@ private void move(double velX, double velY, double velZ) { switch (moveType.get()) { case Velocity -> mc.player.setVelocity(velX, velY, velZ); case Packet -> { - Vec3d newPos = mc.player.getPos().add(velX, velY, velZ); + Vec3d newPos = mc.player.getEntityPos().add(velX, velY, velZ); mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.x, newPos.y, newPos.z, false, mc.player.horizontalCollision)); mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.x, newPos.y - 0.01, newPos.z, true, mc.player.horizontalCollision)); } @@ -165,7 +165,7 @@ private void move(double velX, double velY, double velZ) { } private boolean isValid(Vec3d velocity, boolean checkGround) { - Vec3d playerPos = mc.player.getPos().add(velocity); + Vec3d playerPos = mc.player.getEntityPos().add(velocity); Vec3d headPos = playerPos.add(0, 1, 0); for (Vector3d pos : points) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java index 6c9361cd32..0199240000 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java @@ -161,7 +161,7 @@ private void onTick(TickEvent.Pre event) { FindItemResult webs = InvUtils.findInHotbar(Items.COBWEB); if (!webs.found()) return; - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); // Prediction mode via target's movement delta if (predictMovement.get()) { 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 a2d646d35e..5a2f769e84 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java @@ -698,7 +698,7 @@ private void onPreTick(TickEvent.Pre event) { } // Set player eye pos - ((IVec3d) playerEyePos).meteor$set(mc.player.getPos().x, mc.player.getPos().y + mc.player.getEyeHeight(mc.player.getPose()), mc.player.getPos().z); + ((IVec3d) playerEyePos).meteor$set(mc.player.getEntityPos().x, mc.player.getEntityPos().y + mc.player.getEyeHeight(mc.player.getPose()), mc.player.getEntityPos().z); // Find targets, break and place findTargets(); @@ -794,15 +794,15 @@ private float getBreakDamage(Entity entity, boolean checkCrystalAge) { if (checkCrystalAge && entity.age < ticksExisted.get()) return 0; // Check range - if (isOutOfRange(entity.getPos(), entity.getBlockPos(), false)) return 0; + if (isOutOfRange(entity.getEntityPos(), entity.getBlockPos(), false)) return 0; // Check damage to self and anti suicide blockPos.set(entity.getBlockPos()).move(0, -1, 0); - float selfDamage = DamageUtils.crystalDamage(mc.player, entity.getPos(), predictMovement.get(), blockPos); + float selfDamage = DamageUtils.crystalDamage(mc.player, entity.getEntityPos(), predictMovement.get(), blockPos); if (selfDamage > maxDamage.get() || (antiSuicide.get() && selfDamage >= EntityUtils.getTotalHealth(mc.player))) return 0; // Check damage to targets and face place - float damage = getDamageToTargets(entity.getPos(), blockPos, true, false); + float damage = getDamageToTargets(entity.getEntityPos(), blockPos, true, false); boolean shouldFacePlace = shouldFacePlace(); double minimumDamage = shouldFacePlace ? Math.min(minDamage.get(), 1.5d) : minDamage.get(); @@ -838,7 +838,7 @@ private void doBreak(Entity crystal) { double pitch = Rotations.getPitch(crystal, Target.Feet); if (doYawSteps(yaw, pitch)) { - setRotation(true, crystal.getPos(), 0, 0); + setRotation(true, crystal.getEntityPos(), 0, 0); Rotations.rotate(yaw, pitch, 50, () -> attackCrystal(crystal)); breakTimer = breakDelay.get(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java index 907b8e2347..25ea0b41cf 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java @@ -385,7 +385,7 @@ private boolean isOutOfRange(BlockPos blockPos) { } private boolean isCloseToHolePos(PlayerEntity target, BlockPos blockPos) { - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); // Prediction mode via target's movement delta if (predictMovement.get()) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java index 83f3766a9a..588af5b095 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java @@ -378,7 +378,7 @@ private boolean place(CardinalDirection direction, int y) { placePos.getX() + 1, placePos.getY() + 1, placePos.getZ() + 1 ); - Predicate entityPredicate = entity -> entity instanceof EndCrystalEntity && DamageUtils.crystalDamage(mc.player, entity.getPos()) < PlayerUtils.getTotalHealth(); + Predicate entityPredicate = entity -> entity instanceof EndCrystalEntity && DamageUtils.crystalDamage(mc.player, entity.getEntityPos()) < PlayerUtils.getTotalHealth(); for (Entity crystal : mc.world.getOtherEntities(null, box, entityPredicate)) { if (rotate.get()) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java index 65e0bde320..aee4004eef 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java @@ -216,7 +216,7 @@ private void onEntityAdded(EntityAddedEvent event) { } else { MutableText text = Text.literal(event.entity.getType().getName().getString()).formatted(Formatting.WHITE); text.append(Text.literal(" has spawned at ").formatted(Formatting.GRAY)); - text.append(formatCoords(event.entity.getPos())); + text.append(formatCoords(event.entity.getEntityPos())); text.append(Text.literal(".").formatted(Formatting.GRAY)); info(text); } @@ -240,7 +240,7 @@ private void onEntityRemoved(EntityRemovedEvent event) { } else { MutableText text = Text.literal(event.entity.getType().getName().getString()).formatted(Formatting.WHITE); text.append(Text.literal(" has despawned at ").formatted(Formatting.GRAY)); - text.append(formatCoords(event.entity.getPos())); + text.append(formatCoords(event.entity.getEntityPos())); text.append(Text.literal(".").formatted(Formatting.GRAY)); info(text); } @@ -252,7 +252,7 @@ private void onEntityRemoved(EntityRemovedEvent event) { if (pearlStartPosMap.containsKey(i)) { EnderPearlEntity pearl = (EnderPearlEntity) e; if (pearl.getOwner() != null && pearl.getOwner() instanceof PlayerEntity p) { - double d = pearlStartPosMap.get(i).distanceTo(e.getPos()); + double d = pearlStartPosMap.get(i).distanceTo(e.getEntityPos()); if ((!Friends.get().isFriend(p) || !pearlIgnoreFriends.get()) && (!p.equals(mc.player) || !pearlIgnoreOwn.get())) { info("(highlight)%s's(default) pearl landed at %d, %d, %d (highlight)(%.1fm away, travelled %.1fm)(default).", pearl.getOwner().getName().getString(), pearl.getBlockPos().getX(), pearl.getBlockPos().getY(), pearl.getBlockPos().getZ(), pearl.distanceTo(mc.player), d); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWasp.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWasp.java index 8fe128a8e5..34921e0a4b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWasp.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWasp.java @@ -162,7 +162,7 @@ private void onMove(PlayerMoveEvent event) { double xVel = 0, yVel = 0, zVel = 0; - Vec3d targetPos = target.getPos().add(offset.get().x, offset.get().y, offset.get().z); + Vec3d targetPos = target.getEntityPos().add(offset.get().x, offset.get().y, offset.get().z); if (predictMovement.get()) targetPos.add(PlayerEntity.adjustMovementForCollisions(target, target.getVelocity(), target.getBoundingBox(), mc.world, mc.world.getEntityCollisions(target, target.getBoundingBox().stretch(target.getVelocity())))); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java index e161c1028d..d5305d412e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java @@ -73,7 +73,7 @@ public void onActivate() { model.spawn(); } - Utils.set(start, mc.player.getPos()); + Utils.set(start, mc.player.getEntityPos()); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java index c6b900dc51..e9271a290c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java @@ -170,7 +170,7 @@ else if (mode.get() == Mode.Place) { if (anchor.get()) PlayerUtils.centerPlayer(); // Check if there is a block within 5 blocks - BlockHitResult result = mc.world.raycast(new RaycastContext(mc.player.getPos(), mc.player.getPos().subtract(0, 5, 0), RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, mc.player)); + BlockHitResult result = mc.world.raycast(new RaycastContext(mc.player.getEntityPos(), mc.player.getEntityPos().subtract(0, 5, 0), RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, mc.player)); // Place if (result != null && result.getType() == HitResult.Type.BLOCK) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java index d4a097bd33..d908103c99 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java @@ -96,7 +96,7 @@ private void onClipAtLedge(ClipAtLedgeEvent event) { } else { - BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(mc.player.getPos(), new Vec3d(mc.player.getX(), mc.world.getBottomY(), mc.player.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, mc.player)); + BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(mc.player.getEntityPos(), new Vec3d(mc.player.getX(), mc.world.getBottomY(), mc.player.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, mc.player)); if (raycastResult.getType() != HitResult.Type.MISS) { if ((int) (mc.player.getY() - raycastResult.getBlockPos().up().getY()) < fallDistance.get()) return; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java index 1427b9e01c..ad02674d0f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java @@ -190,11 +190,11 @@ public Scaffold() { private void onTick(TickEvent.Pre event) { if (onlyOnClick.get() && !mc.options.useKey.isPressed()) return; - Vec3d vec = mc.player.getPos().add(mc.player.getVelocity()).add(0, -0.75, 0); + Vec3d vec = mc.player.getEntityPos().add(mc.player.getVelocity()).add(0, -0.75, 0); if (airPlace.get()) { bp.set(vec.getX(), vec.getY(), vec.getZ()); } else { - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); if (aheadDistance.get() != 0 && !towering() && !mc.world.getBlockState(mc.player.getBlockPos().down()).getCollisionShape(mc.world, mc.player.getBlockPos()).isEmpty()) { Vec3d dir = Vec3d.fromPolar(0, mc.player.getYaw()).multiply(aheadDistance.get(), 0, aheadDistance.get()); if (mc.options.forwardKey.isPressed()) pos = pos.add(dir.x, 0, dir.z); @@ -213,7 +213,7 @@ private void onTick(TickEvent.Pre event) { BlockPos targetBlock = bp.toImmutable(); if (!airPlace.get() && (BlockUtils.getPlaceSide(bp) == null)) { - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); pos = pos.add(0, -0.98f, 0); pos.add(mc.player.getVelocity()); @@ -241,7 +241,7 @@ private void onTick(TickEvent.Pre event) { for (int x = (int) (bp.getX() - radius.get()); x <= bp.getX() + radius.get(); x++) { for (int z = (int) (bp.getZ() - radius.get()); z <= bp.getZ() + radius.get(); z++) { BlockPos blockPos = BlockPos.ofFloored(x, bp.getY(), z); - if (mc.player.getPos().distanceTo(Vec3d.ofCenter(blockPos)) <= radius.get() || (x == bp.getX() && z == bp.getZ())) { + if (mc.player.getEntityPos().distanceTo(Vec3d.ofCenter(blockPos)) <= radius.get() || (x == bp.getX() && z == bp.getZ())) { blocks.add(blockPos); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java index 7ddb44f8bb..6686830c48 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java @@ -96,7 +96,7 @@ private double getExplosionDamage() { OptionalDouble crystalDamage = Streams.stream(mc.world.getEntities()) .filter(entity -> entity instanceof EndCrystalEntity) .filter(Entity::isAlive) - .mapToDouble(entity -> DamageUtils.crystalDamage(mc.player, entity.getPos())) + .mapToDouble(entity -> DamageUtils.crystalDamage(mc.player, entity.getEntityPos())) .max(); return crystalDamage.orElse(0.0); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java index 9727a3e552..e63d84aa22 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java @@ -431,8 +431,8 @@ private void onPlayerMove(PlayerMoveEvent event) { } if (noCrash.get() && mc.player.isGliding() && flightMode.get() != ElytraFlightModes.Bounce) { - Vec3d lookAheadPos = mc.player.getPos().add(mc.player.getVelocity().normalize().multiply(crashLookAhead.get())); - RaycastContext raycastContext = new RaycastContext(mc.player.getPos(), new Vec3d(lookAheadPos.getX(), mc.player.getY(), lookAheadPos.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); + Vec3d lookAheadPos = mc.player.getEntityPos().add(mc.player.getVelocity().normalize().multiply(crashLookAhead.get())); + RaycastContext raycastContext = new RaycastContext(mc.player.getEntityPos(), new Vec3d(lookAheadPos.getX(), mc.player.getY(), lookAheadPos.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); BlockHitResult hitResult = mc.world.raycast(raycastContext); if (hitResult != null && hitResult.getType() == HitResult.Type.BLOCK) { ((IVec3d) event.movement).meteor$set(0, currentMode.velY, 0); @@ -459,7 +459,7 @@ private void onPlayerMove(PlayerMoveEvent event) { mc.player.setPitch(MathHelper.clamp(mc.player.getPitch(0), -50.f, 20.f)); - if (mc.player.getPos().y <= mc.player.getBlockPos().down().getY() + 1.34f) { + if (mc.player.getEntityPos().y <= mc.player.getBlockPos().down().getY() + 1.34f) { ((IVec3d)event.movement).meteor$set(event.movement.x, 0, event.movement.z); mc.player.setSneaking(false); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java index a5335b8d6c..67dbafdb66 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java @@ -23,7 +23,7 @@ public AutoRespawn() { private void onOpenScreenEvent(OpenScreenEvent event) { if (!(event.screen instanceof DeathScreen)) return; - Modules.get().get(WaypointsModule.class).addDeath(mc.player.getPos()); + Modules.get().get(WaypointsModule.class).addDeath(mc.player.getEntityPos()); mc.player.requestRespawn(); event.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HoleESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HoleESP.java index feaeb1e539..4d1d755d8e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HoleESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HoleESP.java @@ -230,7 +230,7 @@ private boolean validHole(BlockPos pos) { @EventHandler private void onRender(Render3DEvent event) { - for (HoleESP.Hole hole : holes) hole.render(event.renderer, shapeMode.get(), height.get(), topQuad.get(), bottomQuad.get()); + for (Hole hole : holes) hole.render(event.renderer, shapeMode.get(), height.get(), topQuad.get(), bottomQuad.get()); } private static class Hole { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/PopChams.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/PopChams.java index bca4882df9..470750abab 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/PopChams.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/PopChams.java @@ -140,7 +140,7 @@ public boolean render(Render3DEvent event) { // Y Modifier lastRenderY = getY(); - ((IVec3d) getPos()).meteor$setY(getY() + yModifier.get() * event.frameTime); + ((IVec3d) getEntityPos()).meteor$setY(getY() + yModifier.get() * event.frameTime); // Scale Modifier scale += scaleModifier.get() * event.frameTime; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java index 752bc1dfa7..3499119b13 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java @@ -151,7 +151,7 @@ private void onRender2D(Render2DEvent event) { private void onOpenScreen(OpenScreenEvent event) { if (!(event.screen instanceof DeathScreen)) return; - if (!event.isCancelled()) addDeath(mc.player.getPos()); + if (!event.isCancelled()) addDeath(mc.player.getEntityPos()); } public void addDeath(Vec3d deathPos) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Flamethrower.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Flamethrower.java index e8603f326b..4b4c2719a3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Flamethrower.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Flamethrower.java @@ -138,7 +138,7 @@ private void interact() { } else { if (ticks >= tickInterval.get() && !entity.isOnFire()) { mc.interactionManager.interactBlock(mc.player, hand, new BlockHitResult( - entity.getPos().subtract(new Vec3d(0, 1, 0)), Direction.UP, entity.getBlockPos().down(), false)); + entity.getEntityPos().subtract(new Vec3d(0, 1, 0)), Direction.UP, entity.getBlockPos().down(), false)); ticks = 0; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java index 3673a48ecf..70e939765f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java @@ -488,7 +488,7 @@ public void onActivate() { setState(State.Center); lastBreakingPos.set(0, 0, 0); - start = mc.player.getPos(); + start = mc.player.getEntityPos(); blocksBroken = blocksPlaced = 0; displayInfo = true; suspended = false; @@ -764,7 +764,7 @@ private enum State { Center { @Override protected void start(HighwayBuilder b) { - if (b.mc.player.getPos().isInRange(Vec3d.ofBottomCenter(b.mc.player.getBlockPos()), 0.1)) { + if (b.mc.player.getEntityPos().isInRange(Vec3d.ofBottomCenter(b.mc.player.getBlockPos()), 0.1)) { stop(b); } } @@ -894,7 +894,7 @@ protected void start(HighwayBuilder b) { @Override protected void tick(HighwayBuilder b) { - Vec3d vec = b.mc.player.getPos().add(b.mc.player.getVelocity()).add(0, -0.75, 0); + Vec3d vec = b.mc.player.getEntityPos().add(b.mc.player.getVelocity()).add(0, -0.75, 0); pos.set(b.mc.player.getBlockX(), vec.y, b.mc.player.getBlockZ()); if (pos.getY() >= b.mc.player.getBlockPos().getY()) { @@ -1828,7 +1828,7 @@ private float aim(HighwayBuilder b, Entity target) { float velocity = BowItem.getPullProgress(b.mc.player.getItemUseTime()); // Positions - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); double relativeX = pos.x - b.mc.player.getX(); double relativeY = pos.y + 0.5 - b.mc.player.getEyeY(); // aiming a little bit above the bottom of the crystal, hopefully prevents shooting the floor or failing the raytrace check diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java index 2ac884d29f..8d067c8244 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java @@ -58,10 +58,10 @@ public class Nuker extends Module { .build() ); - private final Setting mode = sgGeneral.add(new EnumSetting.Builder() + private final Setting mode = sgGeneral.add(new EnumSetting.Builder() .name("mode") .description("The way the blocks are broken.") - .defaultValue(Nuker.Mode.Flatten) + .defaultValue(Mode.Flatten) .build() ); @@ -152,10 +152,10 @@ public class Nuker extends Module { .build() ); - private final Setting sortMode = sgGeneral.add(new EnumSetting.Builder() + private final Setting sortMode = sgGeneral.add(new EnumSetting.Builder() .name("sort-mode") .description("The blocks you want to mine first.") - .defaultValue(Nuker.SortMode.Closest) + .defaultValue(SortMode.Closest) .build() ); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java index 6a61d621ed..3c2dfba7df 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/DamageUtils.java @@ -127,7 +127,7 @@ private static float explosionDamage(LivingEntity target, Vec3d explosionPos, fl if (target == null) return 0f; if (target instanceof PlayerEntity player && EntityUtils.getGameMode(player) == GameMode.CREATIVE && !(player instanceof FakePlayerEntity)) return 0f; - Vec3d position = predictMovement ? target.getPos().add(target.getVelocity()) : target.getPos(); + Vec3d position = predictMovement ? target.getEntityPos().add(target.getVelocity()) : target.getEntityPos(); Box box = target.getBoundingBox(); if (predictMovement) box = box.offset(target.getVelocity()); @@ -238,7 +238,7 @@ private static float modifyAttackDamage(LivingEntity attacker, Entity target, It // Fall Damage /** - * @see LivingEntity#computeFallDamage(float, float) + * @see LivingEntity#computeFallDamage(double, float) */ public static float fallDamage(LivingEntity entity) { if (entity instanceof PlayerEntity player && player.getAbilities().flying) return 0f; @@ -249,7 +249,7 @@ public static float fallDamage(LivingEntity entity) { if (entity.getBlockY() >= surface) return fallDamageReductions(entity, surface); // Under the surface - BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(entity.getPos(), new Vec3d(entity.getX(), mc.world.getBottomY(), entity.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, entity)); + BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(entity.getEntityPos(), new Vec3d(entity.getX(), mc.world.getBottomY(), entity.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, entity)); if (raycastResult.getType() == HitResult.Type.MISS) return 0; return fallDamageReductions(entity, raycastResult.getBlockPos().getY()); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java index 28ddcda44f..6402216b56 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/MeteorStarscript.java @@ -543,7 +543,7 @@ private static Value baritoneDistanceToGoal() { private static Value posString(boolean opposite, boolean camera) { Vec3d pos; if (camera) pos = mc.gameRenderer.getCamera().getPos(); - else pos = mc.player != null ? mc.player.getPos() : Vec3d.ZERO; + else pos = mc.player != null ? mc.player.getEntityPos() : Vec3d.ZERO; double x = pos.x; double z = pos.z; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/text/TextVisitor.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/text/TextVisitor.java index c1bf774d7f..a11cbf7ce1 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/text/TextVisitor.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/text/TextVisitor.java @@ -15,8 +15,8 @@ import java.util.Queue; /** - * An extension of {@link net.minecraft.text.StringVisitable.StyledVisitor} with access to the underlying {@link Text} objects. - * @param the optional short circuit return type, to match the semantics of {@link net.minecraft.text.StringVisitable.Visitor} and {@link net.minecraft.text.StringVisitable.StyledVisitor}. + * An extension of {@link StringVisitable.StyledVisitor} with access to the underlying {@link Text} objects. + * @param the optional short circuit return type, to match the semantics of {@link StringVisitable.Visitor} and {@link StringVisitable.StyledVisitor}. * @author Crosby */ @FunctionalInterface diff --git a/src/main/java/meteordevelopment/meteorclient/utils/player/PathFinder.java b/src/main/java/meteordevelopment/meteorclient/utils/player/PathFinder.java index 08fda11305..18b19821ef 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/player/PathFinder.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/player/PathFinder.java @@ -59,7 +59,7 @@ public boolean isAirAbove(BlockPos blockPos) { public Vec3d getNextStraightPos() { Vec3d nextPos = new Vec3d(mc.player.getX(), mc.player.getY(), mc.player.getZ()); double multiplier = 1.0; - while (nextPos == mc.player.getPos()) { + while (nextPos == mc.player.getEntityPos()) { nextPos = new Vec3d((int) (mc.player.getX() + multiplier * Math.cos(Math.toRadians(mc.player.getYaw()))), (int) (mc.player.getY()), (int) (mc.player.getZ() + multiplier * Math.sin(Math.toRadians(mc.player.getYaw())))); multiplier += .1; } @@ -68,9 +68,9 @@ public Vec3d getNextStraightPos() { public int getYawToTarget() { if (target == null || mc.player == null) return Integer.MAX_VALUE; - Vec3d tPos = target.getPos(); - Vec3d pPos = mc.player.getPos(); - int yaw = 0; + Vec3d tPos = target.getEntityPos(); + Vec3d pPos = mc.player.getEntityPos(); + int yaw; int direction = getDirection(); double tan = (tPos.z - pPos.z) / (tPos.x - pPos.x); if (direction == QUAD_1) @@ -83,8 +83,8 @@ else if (direction == QUAD_2) public int getDirection() { if (target == null || mc.player == null) return 0; - Vec3d targetPos = target.getPos(); - Vec3d playerPos = mc.player.getPos(); + Vec3d targetPos = target.getEntityPos(); + Vec3d playerPos = mc.player.getEntityPos(); if (targetPos.x == playerPos.x && targetPos.z > playerPos.z) return SOUTH; if (targetPos.x == playerPos.x && targetPos.z < playerPos.z) @@ -137,7 +137,7 @@ private void moveEventListener(PlayerMoveEvent event) { if (target != null && mc.player != null) { if (!PlayerUtils.isWithin(target, 3)) { if (currentPathBlock == null) currentPathBlock = getNextPathBlock(); - if (mc.player.getPos().squaredDistanceTo(new Vec3d(currentPathBlock.blockPos.getX(), currentPathBlock.blockPos.getY(), currentPathBlock.blockPos.getZ())) < .01) + if (mc.player.getEntityPos().squaredDistanceTo(new Vec3d(currentPathBlock.blockPos.getX(), currentPathBlock.blockPos.getY(), currentPathBlock.blockPos.getZ())) < .01) currentPathBlock = getNextPathBlock(); lookAtDestination(currentPathBlock); if (!mc.options.forwardKey.isPressed()) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java index 530111b04a..1b358080f2 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java @@ -111,6 +111,7 @@ public static void centerPlayer() { mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(mc.player.getX(), mc.player.getY(), mc.player.getZ(), mc.player.isOnGround(), mc.player.horizontalCollision)); } + @SuppressWarnings("DataFlowIssue") public static boolean canSeeEntity(Entity entity) { Vec3d vec1 = new Vec3d(0, 0, 0); Vec3d vec2 = new Vec3d(0, 0, 0); @@ -193,7 +194,7 @@ public static float possibleHealthReductions(boolean entities, boolean fall) { for (Entity entity : mc.world.getEntities()) { // Check for end crystals if (entity instanceof EndCrystalEntity) { - float crystalDamage = DamageUtils.crystalDamage(mc.player, entity.getPos()); + float crystalDamage = DamageUtils.crystalDamage(mc.player, entity.getEntityPos()); if (crystalDamage > damageTaken) damageTaken = crystalDamage; } // Check for players holding swords diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 27210c6bb4..83f2f73bc0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -5,7 +5,6 @@ package meteordevelopment.meteorclient.utils.tooltip; -import meteordevelopment.meteorclient.mixin.BlockEntityRenderManagerAccessor; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; @@ -30,22 +29,21 @@ public class BannerTooltipComponent implements MeteorTooltipData, TooltipComponent { private final DyeColor color; private final BannerPatternsComponent patterns; - private final ModelPart bannerField; private final BannerFlagBlockModel bannerFlag; - // should only be used when the ItemStack is a banner + /** Should only be used when the ItemStack is a banner */ public BannerTooltipComponent(ItemStack banner) { this.color = ((BannerItem) banner.getItem()).getColor(); this.patterns = banner.getOrDefault(DataComponentTypes.BANNER_PATTERNS, BannerPatternsComponent.DEFAULT); - this.bannerField = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG).getChild("flag"); - this.bannerFlag = new BannerFlagBlockModel(bannerField); + ModelPart modelPart = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG); + this.bannerFlag = new BannerFlagBlockModel(modelPart); } public BannerTooltipComponent(DyeColor color, BannerPatternsComponent patterns) { this.color = color; this.patterns = patterns; - this.bannerField = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG).getChild("flag"); - this.bannerFlag = new BannerFlagBlockModel(bannerField); + ModelPart modelPart = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG); + this.bannerFlag = new BannerFlagBlockModel(modelPart); } @Override @@ -67,8 +65,8 @@ public int getWidth(TextRenderer textRenderer) { public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { mc.gameRenderer.getDiffuseLighting().setShaderLights(DiffuseLighting.Type.ITEMS_FLAT); - bannerField.pitch = 0f; - bannerField.originY = -32f; + //bannerField.pitch = 0f; + //bannerField.originY = -32f; // the width and height provided to this method seem to be the dimensions of the entire tooltip, // not just this component @@ -83,24 +81,27 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he float s = Math.min(width, height); matrices.scale(s * 0.75f, s * 0.75f, 1); - RenderDispatcher entityRenderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); - OrderedRenderCommandQueue renderCommandQueue = entityRenderDispatcher.getQueue(); + RenderDispatcher renderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); + OrderedRenderCommandQueue renderCommandQueue = renderDispatcher.getQueue(); BannerBlockEntityRenderer.renderCanvas( - ((BlockEntityRenderManagerAccessor) mc.getBlockEntityRenderDispatcher()).getSpriteHolder(), + mc.getAtlasManager(), matrices, renderCommandQueue, 15728880, OverlayTexture.DEFAULT_UV, bannerFlag, - null, + 0f, ModelBaker.BANNER_BASE, true, color, patterns, - null + false, + null, + 0 ); + renderDispatcher.render(); matrices.pop(); } } diff --git a/src/main/resources/meteor-client.accesswidener b/src/main/resources/meteor-client.accesswidener index 4b0b0b84bd..b99c07066d 100644 --- a/src/main/resources/meteor-client.accesswidener +++ b/src/main/resources/meteor-client.accesswidener @@ -11,6 +11,8 @@ accessible class net/minecraft/client/texture/MapTextureManager$MapTexture accessible field net/minecraft/client/texture/MapTextureManager$MapTexture texture Lnet/minecraft/client/texture/NativeImageBackedTexture; accessible class net/minecraft/client/gui/screen/ingame/BeaconScreen$EffectButtonWidget +accessible class net/minecraft/client/gui/screen/ingame/BeaconScreen$DoneButtonWidget +accessible class net/minecraft/client/gui/screen/ingame/BeaconScreen$CancelButtonWidget accessible class net/minecraft/client/resource/ResourceReloadLogger$ReloadState From eb8aa53ac8d76108107f69f25d21bde248a6e444 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 3 Oct 2025 17:11:56 +0200 Subject: [PATCH 11/38] Update to 1.21.9 --- gradle.properties | 6 +++--- .../systems/accounts/types/TheAlteningAccount.java | 2 +- .../meteorclient/systems/modules/movement/Velocity.java | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 77e728d0c4..537100640b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=1.21.9-pre4 -yarn_mappings=1.21.9-pre4+build.2 +minecraft_version=1.21.9 +yarn_mappings=1.21.9+build.1 loader_version=0.17.2 -fapi_version=0.133.11+1.21.9 +fapi_version=0.134.0+1.21.9 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java index 48fec20cd4..950ed0af48 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java @@ -23,7 +23,7 @@ import static meteordevelopment.meteorclient.MeteorClient.mc; public class TheAlteningAccount extends Account implements TokenAccount { - private static final Environment ENVIRONMENT = new Environment("http://sessionserver.thealtening.com", "http://authserver.thealtening.com", "The Altening"); + private static final Environment ENVIRONMENT = new Environment("http://sessionserver.thealtening.com", "http://authserver.thealtening.com", "https://api.mojang.com", "The Altening"); private static final YggdrasilAuthenticationService SERVICE = new YggdrasilAuthenticationService(mc.getNetworkProxy(), ENVIRONMENT); private String token; private @Nullable WaybackAuthLib auth; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java index 2972f075c7..8a682caabc 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java @@ -152,9 +152,9 @@ private void onTick(TickEvent.Post event) { private void onPacketReceive(PacketEvent.Receive event) { if (knockback.get() && event.packet instanceof EntityVelocityUpdateS2CPacket packet && packet.getEntityId() == mc.player.getId()) { - double velX = (packet.method_73085().getX() - mc.player.getVelocity().x) * knockbackHorizontal.get(); - double velY = (packet.method_73085().getY() - mc.player.getVelocity().y) * knockbackVertical.get(); - double velZ = (packet.method_73085().getZ() - mc.player.getVelocity().z) * knockbackHorizontal.get(); + double velX = (packet.getVelocity().getX() - mc.player.getVelocity().x) * knockbackHorizontal.get(); + double velY = (packet.getVelocity().getY() - mc.player.getVelocity().y) * knockbackVertical.get(); + double velZ = (packet.getVelocity().getZ() - mc.player.getVelocity().z) * knockbackHorizontal.get(); ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setVelocity( new Vec3d(velX * 8000 + mc.player.getVelocity().x * 8000, velY * 8000 + mc.player.getVelocity().y * 8000, velZ * 8000 + mc.player.getVelocity().z * 8000) ); From 9d6907e70212dd39dea8b6cf44255be3d957ec45 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 3 Oct 2025 17:36:59 +0200 Subject: [PATCH 12/38] Some small fixes --- .../mixin/DefaultSkinHelperMixin.java | 23 ------------------- ...chantingTableBlockEntityRendererMixin.java | 4 ++-- .../mixin/EndCrystalEntityRendererMixin.java | 9 +++++--- .../mixin/LivingEntityRendererMixin.java | 2 +- .../MobSpawnerBlockEntityRendererMixin.java | 4 ++-- .../utils/render/SimpleBlockRenderer.java | 7 +++--- src/main/resources/meteor-client.mixins.json | 1 - 7 files changed, 14 insertions(+), 36 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/DefaultSkinHelperMixin.java diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/DefaultSkinHelperMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/DefaultSkinHelperMixin.java deleted file mode 100644 index 22c5e91ef2..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/DefaultSkinHelperMixin.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.mixin; - -import net.minecraft.client.util.DefaultSkinHelper; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.UUID; - -@Mixin(DefaultSkinHelper.class) -public abstract class DefaultSkinHelperMixin { - // Player model rendering in main menu - @Inject(method = "getSkinTextures(Ljava/util/UUID;)Lnet/minecraft/client/util/SkinTextures;", at = @At("HEAD"), cancellable = true) - private static void onShouldUseSlimModel(UUID uuid, CallbackInfoReturnable info) { - if (uuid == null) info.setReturnValue(false); - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java index f01e6a9bc7..dd09a45147 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantingTableBlockEntityRendererMixin.java @@ -20,8 +20,8 @@ @Mixin(EnchantingTableBlockEntityRenderer.class) public abstract class EnchantingTableBlockEntityRendererMixin { - @WrapWithCondition(method = "render(Lnet/minecraft/block/entity/EnchantingTableBlockEntity;FLnet/minecraft/client/util/math/MatrixStack;IILnet/minecraft/util/math/Vec3d;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) - private boolean onRenderBookModelRenderProxy(OrderedRenderCommandQueue instance, Model model, Object o, MatrixStack matrixStack, RenderLayer renderLayer, int i, int j, int k, Sprite sprite, int l, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { + @WrapWithCondition(method = "render(Lnet/minecraft/client/render/block/entity/state/EnchantingTableBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) + private boolean onRenderBookModelRenderProxy(OrderedRenderCommandQueue instance, Model model, S state, MatrixStack matrixStack, RenderLayer renderLayer, int i, int j, int k, Sprite sprite, int l, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { return !Modules.get().get(NoRender.class).noEnchTableBook(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java index 5be7a80469..08aa2cb5e6 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -63,9 +63,10 @@ private void onInit(CallbackInfo info) { // Chams - Color @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/EndCrystalEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) - private boolean render$color(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { + private boolean render$color(OrderedRenderCommandQueue instance, Model model, S state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (chams.isActive() && chams.crystals.get()) { - instance.submitModel(model, + instance.submitModel( + model, state, matrixStack, END_CRYSTAL, @@ -74,7 +75,9 @@ private void onInit(CallbackInfo info) { chams.crystalsColor.get().getPacked(), null, outlineColor, - null); + null + ); + return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index 4ea46c1a6a..da413cd711 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -66,7 +66,7 @@ private Team hasLabelClientPlayerEntityGetScoreboardTeamProxy(Team team) { // Chams - player color @WrapWithCondition(method = "render(Lnet/minecraft/client/render/entity/state/LivingEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V")) - private boolean render$render(OrderedRenderCommandQueue instance, Model model, Object state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { + private boolean render$render(OrderedRenderCommandQueue instance, Model model, TState state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int overlay, int mixColor, Sprite sprite, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java index 01adef9cc3..ef841ae845 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java @@ -18,8 +18,8 @@ @Mixin(MobSpawnerBlockEntityRenderer.class) public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { - @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/MobSpawnerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;)V", at = @At("HEAD"), cancellable = true) - private void onRender(CallbackInfo ci) { + @Inject(method = "renderDisplayEntity", at = @At("HEAD"), cancellable = true) + private static void onRenderDisplayEntity(CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMobInSpawner()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 1eee522ca1..7b71fe6517 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -17,7 +17,6 @@ import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BlockModelPart; import net.minecraft.client.render.model.BlockStateModel; -import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; @@ -44,9 +43,9 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { - BlockEntityRenderState c = new BlockEntityRenderState(); - BlockEntityRenderState.updateBlockEntityRenderState(blockEntity, c, null); - renderer.render(c, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), new CameraRenderState()); + BlockEntityRenderState state = renderer.createRenderState(); + renderer.updateRenderState(blockEntity, state, tickDelta, mc.gameRenderer.getCamera().getPos(), null); + renderer.render(state, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), mc.gameRenderer.getEntityRenderStates().cameraRenderState); } vertexConsumerProvider.setOffset(0, 0, 0); diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index e1bd2370a3..3553b0bd9f 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -69,7 +69,6 @@ "CreativeInventoryScreenAccessor", "CreativeSlotMixin", "CrossbowItemAccessor", - "DefaultSkinHelperMixin", "DirectionAccessor", "DisconnectedScreenMixin", "DrawContextMixin", From 6444bd49416e9dc40b9a27197da2fe02e99bca2d Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 3 Oct 2025 18:07:12 +0200 Subject: [PATCH 13/38] Fix SimpleBlockRenderer and WireframeEntityRenderer --- .../NoopImmediateVertexConsumerProvider.java | 31 ++++++++ .../NoopOutlineVertexConsumerProvider.java | 26 +++++++ .../utils/render/NoopVertexConsumer.java | 45 ++++++++++++ .../utils/render/SimpleBlockRenderer.java | 44 ++++++++++- .../utils/render/WireframeEntityRenderer.java | 73 ++++++++----------- 5 files changed, 177 insertions(+), 42 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/NoopImmediateVertexConsumerProvider.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/NoopOutlineVertexConsumerProvider.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/NoopVertexConsumer.java diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/NoopImmediateVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopImmediateVertexConsumerProvider.java new file mode 100644 index 0000000000..43f7acaaac --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopImmediateVertexConsumerProvider.java @@ -0,0 +1,31 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; + +public class NoopImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate { + public static final NoopImmediateVertexConsumerProvider INSTANCE = new NoopImmediateVertexConsumerProvider(); + + private NoopImmediateVertexConsumerProvider() { + super(null, null); + } + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + return NoopVertexConsumer.INSTANCE; + } + + @Override + public void draw() { + } + + @Override + public void draw(RenderLayer layer) { + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/NoopOutlineVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopOutlineVertexConsumerProvider.java new file mode 100644 index 0000000000..f32cb991fc --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopOutlineVertexConsumerProvider.java @@ -0,0 +1,26 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.OutlineVertexConsumerProvider; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; + +public class NoopOutlineVertexConsumerProvider extends OutlineVertexConsumerProvider { + public static final NoopOutlineVertexConsumerProvider INSTANCE = new NoopOutlineVertexConsumerProvider(); + + private NoopOutlineVertexConsumerProvider() { + } + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + return NoopVertexConsumer.INSTANCE; + } + + @Override + public void draw() { + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/NoopVertexConsumer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopVertexConsumer.java new file mode 100644 index 0000000000..9bc07c961d --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/NoopVertexConsumer.java @@ -0,0 +1,45 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.VertexConsumer; + +public class NoopVertexConsumer implements VertexConsumer { + public static final NoopVertexConsumer INSTANCE = new NoopVertexConsumer(); + + private NoopVertexConsumer() { + } + + @Override + public VertexConsumer vertex(float x, float y, float z) { + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + return this; + } + + @Override + public VertexConsumer texture(float u, float v) { + return this; + } + + @Override + public VertexConsumer overlay(int u, int v) { + return this; + } + + @Override + public VertexConsumer light(int u, int v) { + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + return this; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 7b71fe6517..3ad71bc905 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -14,6 +14,8 @@ import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.state.BlockEntityRenderState; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.command.RenderDispatcher; import net.minecraft.client.render.model.BakedQuad; import net.minecraft.client.render.model.BlockModelPart; import net.minecraft.client.render.model.BlockStateModel; @@ -34,6 +36,20 @@ public abstract class SimpleBlockRenderer { private static final Direction[] DIRECTIONS = Direction.values(); private static final Random RANDOM = Random.create(); + private static final OrderedRenderCommandQueueImpl renderCommandQueue = new OrderedRenderCommandQueueImpl(); + + private static final RenderDispatcher renderDispatcher = new RenderDispatcher( + renderCommandQueue, + mc.getBlockRenderManager(), + new WrapperImmediateVertexConsumerProvider(), + mc.getAtlasManager(), + NoopOutlineVertexConsumerProvider.INSTANCE, + NoopImmediateVertexConsumerProvider.INSTANCE, + mc.textRenderer + ); + + private static VertexConsumerProvider provider; + private SimpleBlockRenderer() {} public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelta, IVertexConsumerProvider vertexConsumerProvider) { @@ -43,9 +59,16 @@ public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelt BlockEntityRenderer renderer = mc.getBlockEntityRenderDispatcher().get(blockEntity); if (renderer != null && blockEntity.hasWorld() && blockEntity.getType().supports(blockEntity.getCachedState())) { + SimpleBlockRenderer.provider = vertexConsumerProvider; + BlockEntityRenderState state = renderer.createRenderState(); renderer.updateRenderState(blockEntity, state, tickDelta, mc.gameRenderer.getCamera().getPos(), null); - renderer.render(state, MATRICES, mc.gameRenderer.getEntityRenderDispatcher().getQueue(), mc.gameRenderer.getEntityRenderStates().cameraRenderState); + renderer.render(state, MATRICES, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState); + + renderDispatcher.render(); + renderCommandQueue.onNextFrame(); + + SimpleBlockRenderer.provider = null; } vertexConsumerProvider.setOffset(0, 0, 0); @@ -90,4 +113,23 @@ private static void renderQuads(List quads, float offsetX, float offs } } } + + private static class WrapperImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate { + private WrapperImmediateVertexConsumerProvider() { + super(null, null); + } + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + return provider.getBuffer(layer); + } + + @Override + public void draw() { + } + + @Override + public void draw(RenderLayer layer) { + } + } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 571af5470a..dfff80a137 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -16,11 +16,10 @@ import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.command.RenderDispatcher; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.state.EntityRenderState; -import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; import net.minecraft.util.math.MathHelper; @@ -32,7 +31,18 @@ public class WireframeEntityRenderer { private static final MatrixStack matrices = new MatrixStack(); private static Renderer3D renderer; - private static final OrderedRenderCommandQueue entityRenderCommandQueue = new OrderedRenderCommandQueueImpl(); + + private static final OrderedRenderCommandQueueImpl renderCommandQueue = new OrderedRenderCommandQueueImpl(); + + private static final RenderDispatcher renderDispatcher = new RenderDispatcher( + renderCommandQueue, + mc.getBlockRenderManager(), + MyVertexConsumerProvider.INSTANCE, + mc.getAtlasManager(), + NoopOutlineVertexConsumerProvider.INSTANCE, + NoopImmediateVertexConsumerProvider.INSTANCE, + mc.textRenderer + ); private static Color sideColor; private static Color lineColor; @@ -68,16 +78,21 @@ public static void render(Render3DEvent event, Entity entity, double scale, Colo matrices.push(); matrices.scale((float) scale, (float) scale, (float) scale); - renderer.render(state, matrices, entityRenderCommandQueue, new CameraRenderState()); - // todo this just adds the entities to a list, we need to actually render them somewhere by calling - // net.minecraft.class_11688.method_73012 + renderer.render(state, matrices, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState); matrices.pop(); + + renderDispatcher.render(); + renderCommandQueue.onNextFrame(); } - private static class MyVertexConsumerProvider implements VertexConsumerProvider { + private static class MyVertexConsumerProvider extends VertexConsumerProvider.Immediate { public static final MyVertexConsumerProvider INSTANCE = new MyVertexConsumerProvider(); private final Object2ObjectOpenHashMap buffers = new Object2ObjectOpenHashMap<>(); + protected MyVertexConsumerProvider() { + super(null, null); + } + @Override public VertexConsumer getBuffer(RenderLayer layer) { //noinspection ConstantValue @@ -94,6 +109,16 @@ public VertexConsumer getBuffer(RenderLayer layer) { return vertexConsumer; } + + @Override + public void draw() { + throw new RuntimeException(); + } + + @Override + public void draw(RenderLayer layer) { + throw new RuntimeException(); + } } private static class MyVertexConsumer implements VertexConsumer { @@ -153,38 +178,4 @@ public VertexConsumer normal(float x, float y, float z) { return this; } } - - private static class NoopVertexConsumer implements VertexConsumer { - private static final NoopVertexConsumer INSTANCE = new NoopVertexConsumer(); - - @Override - public VertexConsumer vertex(float x, float y, float z) { - return this; - } - - @Override - public VertexConsumer color(int red, int green, int blue, int alpha) { - return this; - } - - @Override - public VertexConsumer texture(float u, float v) { - return this; - } - - @Override - public VertexConsumer overlay(int u, int v) { - return this; - } - - @Override - public VertexConsumer light(int u, int v) { - return this; - } - - @Override - public VertexConsumer normal(float x, float y, float z) { - return this; - } - } } From 710d470d264d0c7aa798f42a3dc9221471e9d13c Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 3 Oct 2025 18:40:17 +0200 Subject: [PATCH 14/38] More stuff from #5724 --- build.gradle.kts | 2 +- gradle.properties | 8 ++--- ...xin.java => EntityRenderManagerMixin.java} | 29 +++++++------------ .../mixin/EntityRendererMixin.java | 17 +++++++++++ ...RendererImplDefaultRenderContextMixin.java | 4 +-- .../mixininterface/IEntityRenderState.java | 4 +-- .../accounts/types/TheAlteningAccount.java | 2 +- src/main/resources/fabric.mod.json | 4 +-- src/main/resources/meteor-client.mixins.json | 2 +- 9 files changed, 40 insertions(+), 32 deletions(-) rename src/main/java/meteordevelopment/meteorclient/mixin/{EntityRenderDispatcherMixin.java => EntityRenderManagerMixin.java} (65%) diff --git a/build.gradle.kts b/build.gradle.kts index e8377b39f6..455808b036 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("fabric-loom") version "1.11-SNAPSHOT" id("maven-publish") - id("com.gradleup.shadow") version "9.0.0-beta11" + id("com.gradleup.shadow") version "9.2.2" } base { diff --git a/gradle.properties b/gradle.properties index 537100640b..5acbed7af1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,16 +17,16 @@ archives_base_name=meteor-client baritone_version=1.21.5 # Sodium (https://github.com/CaffeineMC/sodium-fabric) -sodium_version=mc1.21.6-0.6.13-fabric +sodium_version=mc1.21.9-0.7.0-fabric # Lithium (https://github.com/CaffeineMC/lithium-fabric) -lithium_version=mc1.21.6-0.17.0-fabric +lithium_version=mc1.21.9-0.19.0-fabric # Iris (https://github.com/IrisShaders/Iris) iris_version=1.9.0+1.21.6-fabric # ModMenu (https://github.com/TerraformersMC/ModMenu) -modmenu_version=15.0.0-beta.3 +modmenu_version=15.0.0 # Orbit (https://github.com/MeteorDevelopment/orbit) orbit_version=0.2.4 @@ -44,7 +44,7 @@ reflections_version=0.10.2 netty_version=4.1.118.Final # ViaFabricPlus (https://github.com/ViaVersion/ViaFabricPlus) -viafabricplus_version=4.1.5 +viafabricplus_version=4.2.4 # WaybackAuthLib (https://github.com/FlorianMichael/WaybackAuthLib) waybackauthlib_version=1.0.1 diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java similarity index 65% rename from src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java rename to src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java index 23ef96a7f9..85e2980d84 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java @@ -5,17 +5,18 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import net.minecraft.client.render.Camera; import net.minecraft.client.render.entity.EntityRenderManager; +import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(EntityRenderManager.class) -public abstract class EntityRenderDispatcherMixin { +public abstract class EntityRenderManagerMixin { @Shadow public Camera camera; @@ -58,26 +59,16 @@ private void render(E entity, do v += 1; matrices.scale((float) v, (float) v, (float) v); } + */ // IEntityRenderState - @ModifyExpressionValue(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(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/EntityRenderer;getAndUpdateRenderState(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/client/render/entity/state/EntityRenderState;")) - private S render$getAndUpdateRenderState(S state, E entity, double x, double y, double z, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityRenderer renderer) { + @ModifyExpressionValue( + method = "getAndUpdateRenderState(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/client/render/entity/state/EntityRenderState;", + at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/EntityRenderer;getAndUpdateRenderState(Lnet/minecraft/entity/Entity;F)Lnet/minecraft/client/render/entity/state/EntityRenderState;") + ) + private EntityRenderState getAndUpdateRenderState$setEntity(EntityRenderState state, E entity, float tickProgress) { ((IEntityRenderState) state).meteor$setEntity(entity); return state; } - - // Player model rendering in main menu - - @Inject(method = "renderShadow", at = @At("HEAD"), cancellable = true) - private static void onRenderShadow(MatrixStack matrices, VertexConsumerProvider vertexConsumers, EntityRenderState renderState, float opacity, WorldView world, float radius, CallbackInfo info) { - if (PostProcessShaders.rendering) 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) - private void onGetSquaredDistanceToCameraEntity(Entity entity, CallbackInfoReturnable info) { - if (camera == null) info.setReturnValue(0.0); - } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 3d7f7ee5f1..74dc547380 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -18,8 +18,10 @@ import net.minecraft.client.render.Frustum; 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.entity.Entity; import net.minecraft.entity.FallingBlockEntity; +import net.minecraft.entity.LivingEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.text.Text; import net.minecraft.world.LightType; @@ -74,6 +76,21 @@ private void onGetOutlineColor(T entity, S state, float tickProgress, CallbackIn } } + @Inject(method = "updateShadow(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/entity/state/EntityRenderState;)V", at = @At("HEAD"), cancellable = true) + private void updateShadow(Entity entity, EntityRenderState renderState, CallbackInfo ci) { + if (PostProcessShaders.rendering) { + ci.cancel(); + return; + } + + if (Modules.get().get(NoRender.class).noDeadEntities() && + entity instanceof LivingEntity && + renderState instanceof LivingEntityRenderState livingEntityRenderState && + livingEntityRenderState.deathTime > 0) { + ci.cancel(); + } + } + @Unique private ESP getESP() { if (esp == null) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/sodium/SodiumFluidRendererImplDefaultRenderContextMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/sodium/SodiumFluidRendererImplDefaultRenderContextMixin.java index 539821df1e..93f0fbde01 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/sodium/SodiumFluidRendererImplDefaultRenderContextMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/sodium/SodiumFluidRendererImplDefaultRenderContextMixin.java @@ -43,8 +43,8 @@ private void onGetColorProvider(Fluid fluid, CallbackInfoReturnable=21", - "minecraft": ["${minecraft_version}", "1.21.7", "1.21.6"], + "minecraft": ["${minecraft_version}"], "fabricloader": ">=${loader_version}" }, "breaks": { "optifabric": "*", "feather": "*", "origins": "*", - "sodium": "<0.6.12", + "sodium": "<0.7.0", "morechathistory": "*" } } diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 3553b0bd9f..caf6b43765 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -79,7 +79,7 @@ "EntityAccessor", "EntityBucketItemAccessor", "EntityMixin", - "EntityRenderDispatcherMixin", + "EntityRenderManagerMixin", "EntityRendererMixin", "EntityRenderStateMixin", "EntityTrackingSectionAccessor", From 329081fe31696b2ad157ef5dacd2d1e4a778e78d Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sun, 5 Oct 2025 12:52:17 +0100 Subject: [PATCH 15/38] assorted code cleanup and bug fixes --- .../meteorclient/commands/commands/InputCommand.java | 4 ++-- .../commands/commands/SpectateCommand.java | 10 ++++++++++ .../meteorclient/gui/WidgetScreen.java | 5 ++--- .../meteorclient/mixin/CapeFeatureRendererMixin.java | 2 +- .../meteorclient/mixin/HandledScreenMixin.java | 2 +- .../meteorclient/mixin/KeyboardMixin.java | 2 +- .../meteorclient/mixin/MapRendererMixin.java | 2 +- .../meteorclient/mixin/MultiplayerScreenMixin.java | 7 +++++-- .../meteorclient/mixin/TitleScreenMixin.java | 2 +- .../systems/hud/screens/HudEditorScreen.java | 2 +- .../meteorclient/utils/misc/input/Input.java | 2 +- .../meteorclient/utils/network/Capes.java | 2 +- .../meteorclient/utils/render/PeekScreen.java | 2 +- 13 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java index 323785bbe7..e453767910 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java @@ -67,7 +67,7 @@ public void build(LiteralArgumentBuilder builder) { } for (KeyBinding keyBinding : mc.options.hotbarKeys) { - builder.then(literal(keyBinding.getBoundKeyTranslationKey().substring(4)) + builder.then(literal(keyBinding.getId().substring(4)) .executes(context -> { press(keyBinding); return SINGLE_SUCCESS; @@ -91,7 +91,7 @@ public void build(LiteralArgumentBuilder builder) { info("Active keypress handlers: "); for (int i = 0; i < activeHandlers.size(); i++) { KeypressHandler handler = activeHandlers.get(i); - info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getBoundKeyTranslationKey()), handler.ticks, handler.totalTicks); + info("(highlight)%d(default) - (highlight)%s %d(default) ticks left out of (highlight)%d(default).", i, I18n.translate(handler.key.getId()), handler.ticks, handler.totalTicks); } } return SINGLE_SUCCESS; diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java index 401e227ec8..84ac66671b 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.commands.arguments.PlayerArgumentType; import meteordevelopment.meteorclient.events.meteor.KeyEvent; +import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.orbit.EventHandler; import net.minecraft.command.CommandSource; @@ -47,5 +48,14 @@ private void onKey(KeyEvent event) { MeteorClient.EVENT_BUS.unsubscribe(this); } } + + @EventHandler + private void onMouse(MouseButtonEvent event) { + if (Input.isPressed(mc.options.sneakKey)) { + mc.setCameraEntity(mc.player); + event.cancel(); + MeteorClient.EVENT_BUS.unsubscribe(this); + } + } } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 64608d17fc..0ea3c98cf4 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -118,8 +118,7 @@ public void onClosed(Runnable action) { } @Override - // todo rename bl when appropriate - public boolean mouseClicked(Click arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean doubled) { if (locked) return false; double mouseX = arg.x(); @@ -129,7 +128,7 @@ public boolean mouseClicked(Click arg, boolean bl) { mouseX *= s; mouseY *= s; - return root.mouseClicked(mouseX, mouseY, arg.button(), bl); + return root.mouseClicked(mouseX, mouseY, arg.button(), doubled); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index 92e488d0aa..7d3b482c15 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -24,7 +24,7 @@ public abstract class CapeFeatureRendererMixin { private AssetInfo.TextureAsset modifyCapeTexture(AssetInfo.TextureAsset original, MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int i, PlayerEntityRenderState state, float f, float g) { if (((IEntityRenderState) state).meteor$getEntity() instanceof PlayerEntity player) { Identifier id = Capes.get(player); - return id == null ? original : new AssetInfo.TextureAssetInfo(id); + return id == null ? original : new AssetInfo.TextureAssetInfo(id, id); } return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index 86c3d2b6dd..3b7ad9ff59 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -102,7 +102,7 @@ private void onMouseDragged(Click arg, double d, double e, CallbackInfoReturnabl // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(Click arg, boolean bl, CallbackInfoReturnable cir) { + private void mouseClicked(Click arg, boolean doubled, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java index 242503648a..d9c562a353 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -30,7 +30,7 @@ public abstract class KeyboardMixin { @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) - public void onKey(long window, int action, KeyInput arg, CallbackInfo ci) { // todo verify this is correct when they update the mappings + public void onKey(long window, int action, KeyInput arg, CallbackInfo ci) { int modifiers = arg.modifiers(); if (arg.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index 551b29c6dd..9a50e5e51b 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java @@ -28,7 +28,7 @@ private List getIconsProxy(List original) { } @Inject(method = "draw", at = @At("HEAD"), cancellable = true) - private void onDraw(MapRenderState state, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean bl, int light, CallbackInfo ci) { + private void onDraw(MapRenderState state, MatrixStack matrices, OrderedRenderCommandQueue queue, boolean skipRenderingDecorations, int light, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noMapContents()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java index a1e6b94bcd..a7f57de820 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java @@ -63,8 +63,11 @@ private void onInit(CallbackInfo info) { ); } - //@Inject(method = "render", at = @At("TAIL")) - private void onRender(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) { + // todo this is probably an extremely bad way of doing it but it works for now + @Override + public void render(DrawContext context, int mouseX, int mouseY, float deltaTicks) { + super.render(context, mouseX, mouseY, deltaTicks); + int x = 3; int y = 3; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 07dcd38db1..00790464e9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -31,7 +31,7 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta, } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(Click arg, boolean bl, CallbackInfoReturnable cir) { + private void onMouseClicked(Click arg, boolean doubled, CallbackInfoReturnable cir) { if (Config.get().titleScreenCredits.get() && arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { if (TitleScreenCredits.onClicked(arg.x(), arg.y())) cir.setReturnValue(true); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index 1404a12bdf..5f0f5f1858 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -67,7 +67,7 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(Click arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean doubled) { double s = mc.getWindow().getScaleFactor(); double mouseX = arg.x(); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java index 710c3fd074..75e00efbb5 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java @@ -39,7 +39,7 @@ public static void setKeyState(KeyBinding bind, boolean pressed) { } public static boolean isPressed(KeyBinding bind) { - return isKeyPressed(getKey(bind)); + return isKeyPressed(getKey(bind)) || isButtonPressed(getKey(bind)); } public static boolean isKeyPressed(int key) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/Capes.java b/src/main/java/meteordevelopment/meteorclient/utils/network/Capes.java index 2338c05cfc..83807a8c9b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/network/Capes.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/network/Capes.java @@ -166,7 +166,7 @@ public void download() { TO_REGISTER.add(this); } } catch (IOException e) { - e.printStackTrace(); + MeteorClient.LOG.error("Failed to download cape '{}'", name, e); } }); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index 2f5b439825..117909f674 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -38,7 +38,7 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(Click arg, boolean bl) { + public boolean mouseClicked(Click arg, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { From 274aac0edc5c19a1488a9c70faaca0cc45668efd Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sun, 5 Oct 2025 19:45:05 +0100 Subject: [PATCH 16/38] more small bug fixes --- .../mixin/BannerBlockEntityRendererMixin.java | 29 ++++++++++++++----- .../mixin/PlayerEntityRendererMixin.java | 1 + 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java index 560484ab68..f80763a019 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -5,12 +5,13 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerBlockModel; -import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; import net.minecraft.client.render.block.entity.state.BannerBlockEntityRenderState; import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueue; @@ -19,11 +20,11 @@ import net.minecraft.client.texture.SpriteHolder; import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.component.type.BannerPatternsComponent; -import net.minecraft.util.DyeColor; import net.minecraft.util.Unit; import net.minecraft.util.math.RotationAxis; +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.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -31,21 +32,33 @@ @Mixin(BannerBlockEntityRenderer.class) public abstract class BannerBlockEntityRendererMixin { + @Shadow + @Final + private SpriteHolder materials; + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At("HEAD"), cancellable = true) private void injectRender1(BannerBlockEntityRenderState bannerBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState arg, CallbackInfo ci) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.None) ci.cancel(); } - @Inject(method = "render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/RenderLayer;IIILnet/minecraft/client/texture/Sprite;ILnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;)V"), cancellable = true) - private static void injectRender2(SpriteHolder materials, MatrixStack matrices, OrderedRenderCommandQueue queue, int light, int overlay, float yaw, BannerBlockModel model, BannerFlagBlockModel flagModel, float pitch, DyeColor dyeColor, BannerPatternsComponent bannerPatterns, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int outline, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/render/block/entity/state/BannerBlockEntityRenderState;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/state/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/entity/BannerBlockEntityRenderer;render(Lnet/minecraft/client/texture/SpriteHolder;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;IIFLnet/minecraft/client/render/block/entity/model/BannerBlockModel;Lnet/minecraft/client/render/block/entity/model/BannerFlagBlockModel;FLnet/minecraft/util/DyeColor;Lnet/minecraft/component/type/BannerPatternsComponent;Lnet/minecraft/client/render/command/ModelCommandRenderer$CrumblingOverlayCommand;I)V"), cancellable = true) + private void injectRender2(BannerBlockEntityRenderState bannerBlockEntityRenderState, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CameraRenderState cameraRenderState, CallbackInfo ci, @Local BannerBlockModel bannerBlockModel) { if (Modules.get().get(NoRender.class).getBannerRenderMode() == NoRender.BannerRenderMode.Pillar) { - renderPillar(matrices, queue, light, overlay, yaw, model, materials, crumblingOverlay); + renderPillar( + matrixStack, + orderedRenderCommandQueue, + bannerBlockEntityRenderState.lightmapCoordinates, + bannerBlockEntityRenderState.yaw, + bannerBlockModel, + this.materials, + bannerBlockEntityRenderState.crumblingOverlay + ); ci.cancel(); } } @Unique - private static void renderPillar(MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int light, int overlay, float rotation, BannerBlockModel model, SpriteHolder spriteHolder, ModelCommandRenderer.CrumblingOverlayCommand arg) { + private static void renderPillar(MatrixStack matrices, OrderedRenderCommandQueue entityRenderCommandQueue, int light, float rotation, BannerBlockModel model, SpriteHolder spriteHolder, ModelCommandRenderer.CrumblingOverlayCommand arg) { matrices.push(); matrices.translate(0.5F, 0.0F, 0.5F); matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(rotation)); @@ -57,7 +70,7 @@ private static void renderPillar(MatrixStack matrices, OrderedRenderCommandQueue matrices, spriteIdentifier.getRenderLayer(RenderLayer::getEntitySolid), light, - overlay, + OverlayTexture.DEFAULT_UV, -1, spriteHolder.getSprite(spriteIdentifier), 0, diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java index f429f4782e..33cf1bbbc7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -92,6 +92,7 @@ public PlayerEntityRendererMixin(EntityRendererFactory.Context ctx, PlayerEntity @Inject(method = "updateRenderState(Lnet/minecraft/entity/PlayerLikeEntity;Lnet/minecraft/client/render/entity/state/PlayerEntityRenderState;F)V", at = @At("RETURN")) private void updateRenderState$rotations(AvatarlikeEntity player, PlayerEntityRenderState state, float f, CallbackInfo info) { if (Rotations.rotating && player == mc.player) { + state.relativeHeadYaw = 0; state.bodyYaw = Rotations.serverYaw; state.pitch = Rotations.serverPitch; } From cc19351a6d544b0e59fba9b1a598c2d1888deef0 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 7 Oct 2025 18:34:54 +0100 Subject: [PATCH 17/38] Update to 1.21.10 Will not be compatible with 1.21.9 because we had to change some mixin signatures --- gradle.properties | 6 +++--- .../meteorclient/mixin/CobwebBlockMixin.java | 4 ++-- .../meteorclient/mixin/SweetBerryBushBlockMixin.java | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 5acbed7af1..2c8c370d97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,10 +2,10 @@ org.gradle.jvmargs=-Xmx2G org.gradle.configuration-cache=true # Fabric (https://fabricmc.net/develop) -minecraft_version=1.21.9 -yarn_mappings=1.21.9+build.1 +minecraft_version=1.21.10 +yarn_mappings=1.21.10+build.1 loader_version=0.17.2 -fapi_version=0.134.0+1.21.9 +fapi_version=0.134.1+1.21.10 # Mod Properties maven_group=meteordevelopment diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java index 849ae54ff8..58d05af06a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java @@ -23,7 +23,7 @@ @Mixin(CobwebBlock.class) public abstract class CobwebBlockMixin { @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo info) { - if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) info.cancel(); + private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { + if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java index 2cd6645c5f..d88b5119a5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java @@ -23,7 +23,7 @@ @Mixin(SweetBerryBushBlock.class) public abstract class SweetBerryBushBlockMixin { @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo info) { - if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) info.cancel(); + private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { + if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); } } From ee0fbddceb601aa48f77cb6adda7779a46c74f5f Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Tue, 7 Oct 2025 19:03:10 +0100 Subject: [PATCH 18/38] Update KeyEvent and MouseButtonEvent (now MouseClickEvent) to account for the new input changes --- .../meteorclient/MeteorClient.java | 8 +-- .../commands/commands/SpectateCommand.java | 4 +- .../meteorclient/events/meteor/KeyEvent.java | 10 +-- ...eButtonEvent.java => MouseClickEvent.java} | 16 ++--- .../meteorclient/mixin/KeyboardMixin.java | 16 ++--- .../meteorclient/mixin/MouseMixin.java | 9 +-- .../meteorclient/settings/KeybindSetting.java | 16 ++--- .../meteorclient/systems/macros/Macros.java | 8 +-- .../meteorclient/systems/modules/Modules.java | 14 ++-- .../systems/modules/combat/Burrow.java | 4 +- .../systems/modules/combat/Offhand.java | 6 +- .../systems/modules/misc/InventoryTweaks.java | 8 +-- .../systems/modules/movement/AirJump.java | 4 +- .../systems/modules/movement/AutoWalk.java | 8 +-- .../systems/modules/movement/GUIMove.java | 53 +++++++------- .../systems/modules/player/BreakDelay.java | 4 +- .../modules/player/MiddleClickExtra.java | 6 +- .../systems/modules/render/Freecam.java | 69 ++++++------------- .../systems/modules/render/Zoom.java | 2 +- .../systems/modules/world/Excavator.java | 4 +- .../systems/modules/world/Nuker.java | 4 +- .../meteorclient/utils/misc/Keybind.java | 10 +++ 22 files changed, 132 insertions(+), 151 deletions(-) rename src/main/java/meteordevelopment/meteorclient/events/meteor/{MouseButtonEvent.java => MouseClickEvent.java} (56%) diff --git a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java index 2769f26c09..2670ade9cc 100644 --- a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java +++ b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java @@ -9,7 +9,7 @@ import meteordevelopment.meteorclient.addons.MeteorAddon; import meteordevelopment.meteorclient.events.game.OpenScreenEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.gui.GuiThemes; import meteordevelopment.meteorclient.gui.WidgetScreen; @@ -156,14 +156,14 @@ private void onTick(TickEvent.Post event) { @EventHandler private void onKey(KeyEvent event) { - if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.arg)) { + if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesKey(event.input)) { toggleGui(); } } @EventHandler - private void onMouseButton(MouseButtonEvent event) { - if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.arg)) { + private void onMouseClick(MouseClickEvent event) { + if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.click)) { toggleGui(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java index 84ac66671b..d54ed7cce9 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java @@ -10,7 +10,7 @@ import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.commands.arguments.PlayerArgumentType; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.orbit.EventHandler; import net.minecraft.command.CommandSource; @@ -50,7 +50,7 @@ private void onKey(KeyEvent event) { } @EventHandler - private void onMouse(MouseButtonEvent event) { + private void onMouse(MouseClickEvent event) { if (Input.isPressed(mc.options.sneakKey)) { mc.setCameraEntity(mc.player); event.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index 1c230e3cc6..2d592f7f52 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -12,16 +12,12 @@ public class KeyEvent extends Cancellable { private static final KeyEvent INSTANCE = new KeyEvent(); - public int key, modifiers; + public KeyInput input; public KeyAction action; - public KeyInput arg; - // todo clean this up - public static KeyEvent get(KeyInput arg, int key, int modifiers, KeyAction action) { + public static KeyEvent get(KeyInput keyInput, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.arg = arg; - INSTANCE.key = key; - INSTANCE.modifiers = modifiers; + INSTANCE.input = keyInput; INSTANCE.action = action; return INSTANCE; } diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java similarity index 56% rename from src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java rename to src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java index fc7f3bc0b5..3519ab6c0a 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java @@ -8,19 +8,19 @@ import meteordevelopment.meteorclient.events.Cancellable; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import net.minecraft.client.gui.Click; +import net.minecraft.client.input.MouseInput; -public class MouseButtonEvent extends Cancellable { - private static final MouseButtonEvent INSTANCE = new MouseButtonEvent(); +public class MouseClickEvent extends Cancellable { + private static final MouseClickEvent INSTANCE = new MouseClickEvent(); - public int button; + public MouseInput input; + public Click click; public KeyAction action; - public Click arg; - // todo cleanup - public static MouseButtonEvent get(Click arg, int button, KeyAction action) { + public static MouseClickEvent get(MouseInput mouseInput, Click click, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.arg = arg; - INSTANCE.button = button; + INSTANCE.input = mouseInput; + INSTANCE.click = click; INSTANCE.action = action; return INSTANCE; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java index d9c562a353..628cfcb8f4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -30,24 +30,24 @@ public abstract class KeyboardMixin { @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) - public void onKey(long window, int action, KeyInput arg, CallbackInfo ci) { - int modifiers = arg.modifiers(); - if (arg.key() != GLFW.GLFW_KEY_UNKNOWN) { + public void onKey(long window, int action, KeyInput keyEvent, CallbackInfo ci) { + int modifiers = keyEvent.modifiers(); + if (keyEvent.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released // https://github.com/glfw/glfw/issues/1630 if (action == GLFW.GLFW_PRESS) { - modifiers |= Input.getModifier(arg.key()); + modifiers |= Input.getModifier(keyEvent.key()); } else if (action == GLFW.GLFW_RELEASE) { - modifiers &= ~Input.getModifier(arg.key()); + modifiers &= ~Input.getModifier(keyEvent.key()); } if (client.currentScreen instanceof WidgetScreen && action == GLFW.GLFW_REPEAT) { - ((WidgetScreen) client.currentScreen).keyRepeated(arg.key(), modifiers); + ((WidgetScreen) client.currentScreen).keyRepeated(keyEvent.key(), modifiers); } if (GuiKeyEvents.canUseKeys) { - Input.setKeyState(arg.key(), action != GLFW.GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(KeyEvent.get(arg, arg.key(), modifiers, KeyAction.get(action))).isCancelled()) ci.cancel(); + Input.setKeyState(keyEvent.key(), action != GLFW.GLFW_RELEASE); + if (MeteorClient.EVENT_BUS.post(KeyEvent.get(keyEvent, KeyAction.get(action))).isCancelled()) ci.cancel(); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java index 776b6d0a66..7747739299 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.mixin; import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; @@ -37,10 +37,11 @@ public abstract class MouseMixin { private MinecraftClient client; @Inject(method = "onMouseButton", at = @At("HEAD"), cancellable = true) - private void onMouseButton(long window, MouseInput arg, int action, CallbackInfo ci) { - Input.setButtonState(arg.button(), action != GLFW_RELEASE); + private void onMouseButton(long window, MouseInput mouseInput, int action, CallbackInfo ci) { + Input.setButtonState(mouseInput.button(), action != GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(new Click(getScaledX(client.getWindow()), getScaledY(client.getWindow()), arg), arg.button(), KeyAction.get(action))).isCancelled()) ci.cancel(); + Click click = new Click(getScaledX(client.getWindow()), getScaledY(client.getWindow()), mouseInput); + if (MeteorClient.EVENT_BUS.post(MouseClickEvent.get(mouseInput, click, KeyAction.get(action))).isCancelled()) ci.cancel(); } @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java index ac3fe2ea8a..c248d7580d 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.gui.widgets.WKeybind; import meteordevelopment.meteorclient.utils.misc.Keybind; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; @@ -32,25 +32,25 @@ public KeybindSetting(String name, String description, Keybind defaultValue, Con @EventHandler(priority = EventPriority.HIGHEST) private void onKeyBinding(KeyEvent event) { if (widget == null) return; - if (event.action == KeyAction.Press && event.key == GLFW.GLFW_KEY_ESCAPE && widget.onClear()) event.cancel(); - else if (event.action == KeyAction.Release && widget.onAction(true, event.key, event.modifiers)) event.cancel(); + if (event.action == KeyAction.Press && event.input.key() == GLFW.GLFW_KEY_ESCAPE && widget.onClear()) event.cancel(); + else if (event.action == KeyAction.Release && widget.onAction(true, event.input.key(), event.input.modifiers())) event.cancel(); } @EventHandler(priority = EventPriority.HIGHEST) - private void onMouseButtonBinding(MouseButtonEvent event) { - if (event.action == KeyAction.Press && widget != null && widget.onAction(false, event.button, 0)) event.cancel(); + private void onMouseClickBinding(MouseClickEvent event) { + if (event.action == KeyAction.Press && widget != null && widget.onAction(false, event.input.button(), 0)) event.cancel(); } @EventHandler(priority = EventPriority.HIGH) private void onKey(KeyEvent event) { - if (event.action == KeyAction.Release && get().matches(true, event.key, event.modifiers) && (module == null || module.isActive()) && action != null) { + if (event.action == KeyAction.Release && get().matches(event.input) && (module == null || module.isActive()) && action != null) { action.run(); } } @EventHandler(priority = EventPriority.HIGH) - private void onMouseButton(MouseButtonEvent event) { - if (event.action == KeyAction.Release && get().matches(false, event.button, 0) && (module == null || module.isActive()) && action != null) { + private void onMouseClick(MouseClickEvent event) { + if (event.action == KeyAction.Release && get().matches(event.input) && (module == null || module.isActive()) && action != null) { action.run(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java b/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java index 48fe2b2788..924c0fcfc6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.systems.System; import meteordevelopment.meteorclient.systems.Systems; import meteordevelopment.meteorclient.utils.misc.NbtUtils; @@ -62,16 +62,16 @@ private void onKey(KeyEvent event) { if (event.action == KeyAction.Release) return; for (Macro macro : macros) { - if (macro.onAction(true, event.key, event.modifiers)) return; + if (macro.onAction(true, event.input.key(), event.input.modifiers())) return; } } @EventHandler(priority = EventPriority.HIGH) - private void onButton(MouseButtonEvent event) { + private void onMouse(MouseClickEvent event) { if (event.action == KeyAction.Release) return; for (Macro macro : macros) { - if (macro.onAction(false, event.button, 0)) return; + if (macro.onAction(false, event.input.button(), 0)) return; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index 2c10a11f38..b162c416a0 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -13,7 +13,7 @@ import meteordevelopment.meteorclient.events.meteor.ActiveModulesChangedEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; import meteordevelopment.meteorclient.events.meteor.ModuleBindChangedEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.pathing.BaritoneUtils; import meteordevelopment.meteorclient.settings.Setting; import meteordevelopment.meteorclient.settings.SettingGroup; @@ -222,12 +222,12 @@ public boolean isBinding() { @EventHandler(priority = EventPriority.HIGHEST) private void onKeyBinding(KeyEvent event) { - if (event.action == KeyAction.Release && onBinding(true, event.key, event.modifiers)) event.cancel(); + if (event.action == KeyAction.Release && onBinding(true, event.input.key(), event.input.modifiers())) event.cancel(); } @EventHandler(priority = EventPriority.HIGHEST) - private void onButtonBinding(MouseButtonEvent event) { - if (event.action == KeyAction.Release && onBinding(false, event.button, 0)) event.cancel(); + private void onButtonBinding(MouseClickEvent event) { + if (event.action == KeyAction.Release && onBinding(false, event.input.button(), 0)) event.cancel(); } private boolean onBinding(boolean isKey, int value, int modifiers) { @@ -259,13 +259,13 @@ else if (value == GLFW.GLFW_KEY_ESCAPE) { @EventHandler(priority = EventPriority.HIGH) private void onKey(KeyEvent event) { if (event.action == KeyAction.Repeat) return; - onAction(true, event.key, event.modifiers, event.action == KeyAction.Press); + onAction(true, event.input.key(), event.input.modifiers(), event.action == KeyAction.Press); } @EventHandler(priority = EventPriority.HIGH) - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action == KeyAction.Repeat) return; - onAction(false, event.button, 0, event.action == KeyAction.Press); + onAction(false, event.input.button(), 0, event.action == KeyAction.Press); } private void onAction(boolean isKey, int value, int modifiers, boolean isPress) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java index 87b4dc2ae7..0a052c34c9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java @@ -165,7 +165,7 @@ private void onTick(TickEvent.Pre event) { if (!shouldBurrow && instant.get()) blockPos.set(mc.player.getBlockPos()); if (shouldBurrow) { - if (rotate.get()) + if (rotate.get()) Rotations.rotate(Rotations.getYaw(mc.player.getBlockPos()), Rotations.getPitch(mc.player.getBlockPos()), 50, this::burrow); else burrow(); @@ -176,7 +176,7 @@ private void onTick(TickEvent.Pre event) { @EventHandler private void onKey(KeyEvent event) { if (instant.get() && !shouldBurrow) { - if (event.action == KeyAction.Press && mc.options.jumpKey.matchesKey(event.arg)) { + if (event.action == KeyAction.Press && mc.options.jumpKey.matchesKey(event.input)) { shouldBurrow = true; } blockPos.set(mc.player.getBlockPos()); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java index 8f0e38ec95..f19a7d139b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.combat; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; @@ -238,9 +238,9 @@ else if ((isClicking || !autoTotem.isLocked() && !item.isOffhand())) { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { // Detects if the User is right-clicking - isClicking = mc.currentScreen == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.button == GLFW_MOUSE_BUTTON_RIGHT; + isClicking = mc.currentScreen == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.input.button() == GLFW_MOUSE_BUTTON_RIGHT; } private boolean usableItem() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java index d9b4106e49..f07ce95cef 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java @@ -11,7 +11,7 @@ import meteordevelopment.meteorclient.events.entity.player.InteractEntityEvent; import meteordevelopment.meteorclient.events.game.OpenScreenEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.packets.InventoryEvent; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.events.world.TickEvent; @@ -281,16 +281,16 @@ public void onDeactivate() { private void onKey(KeyEvent event) { if (event.action != KeyAction.Press) return; - if (sortingKey.get().matches(true, event.key, event.modifiers)) { + if (sortingKey.get().matches(event.input)) { if (sort()) event.cancel(); } } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action != KeyAction.Press) return; - if (sortingKey.get().matches(false, event.button, 0)) { + if (sortingKey.get().matches(event.input)) { if (sort()) event.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java index 24e535b8bd..a078d0323f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java @@ -44,11 +44,11 @@ private void onKey(KeyEvent event) { if (event.action != KeyAction.Press) return; - if (mc.options.jumpKey.matchesKey(event.arg)) { + if (mc.options.jumpKey.matchesKey(event.input)) { level = mc.player.getBlockPos().getY(); mc.player.jump(); } - else if (mc.options.sneakKey.matchesKey(event.arg)) { + else if (mc.options.sneakKey.matchesKey(event.input)) { level--; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java index 2b2e56a97b..34668ef0ca 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.events.entity.player.PlayerMoveEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.mixininterface.IVec3d; import meteordevelopment.meteorclient.pathing.NopPathManager; @@ -130,12 +130,12 @@ private void onMovement() { @EventHandler private void onKey(KeyEvent event) { - if (isMovementKey(event.arg) && event.action == KeyAction.Press) onMovement(); + if (isMovementKey(event.input) && event.action == KeyAction.Press) onMovement(); } @EventHandler - private void onMouseButton(MouseButtonEvent event) { - if (isMovementButton(event.arg) && event.action == KeyAction.Press) onMovement(); + private void onMouseClick(MouseClickEvent event) { + if (isMovementButton(event.click) && event.action == KeyAction.Press) onMovement(); } @EventHandler diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java index e8a6e5843f..1bda019fe0 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.systems.modules.movement; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.gui.WidgetScreen; import meteordevelopment.meteorclient.mixin.CreativeInventoryScreenAccessor; @@ -110,36 +110,32 @@ public boolean disableArrows() { return isActive() && arrowsRotate.get(); } - private void onInput(int key, KeyAction action, boolean mouse) { - if (skip()) return; - if (screens.get() == Screens.GUI && !(mc.currentScreen instanceof WidgetScreen)) return; - if (screens.get() == Screens.Inventory && mc.currentScreen instanceof WidgetScreen) return; - - pass(mc.options.forwardKey, key, action, mouse); - pass(mc.options.backKey, key, action, mouse); - pass(mc.options.leftKey, key, action, mouse); - pass(mc.options.rightKey, key, action, mouse); - - if (jump.get()) pass(mc.options.jumpKey, key, action, mouse); - if (sneak.get()) pass(mc.options.sneakKey, key, action, mouse); - if (sprint.get()) pass(mc.options.sprintKey, key, action, mouse); - } - @EventHandler private void onKey(KeyEvent event) { - //onInput(event.arg, event.action, false); + onInput(event.input.key(), event.action); } @EventHandler - private void onButton(MouseButtonEvent event) { - onInput(event.button, event.action, true); + private void onButton(MouseClickEvent event) { + onInput(event.input.button(), event.action); + } + + private void onInput(int key, KeyAction action) { + if (skip()) return; + + pass(mc.options.forwardKey, key, action); + pass(mc.options.backKey, key, action); + pass(mc.options.leftKey, key, action); + pass(mc.options.rightKey, key, action); + + if (jump.get()) pass(mc.options.jumpKey, key, action); + if (sneak.get()) pass(mc.options.sneakKey, key, action); + if (sprint.get()) pass(mc.options.sprintKey, key, action); } @EventHandler private void onRender3D(Render3DEvent event) { if (skip()) return; - if (screens.get() == Screens.GUI && !(mc.currentScreen instanceof WidgetScreen)) return; - if (screens.get() == Screens.Inventory && mc.currentScreen instanceof WidgetScreen) return; float rotationDelta = Math.min((float) (rotateSpeed.get() * event.frameTime * 20f), 100); @@ -172,14 +168,21 @@ private void onRender3D(Render3DEvent event) { } } - private void pass(KeyBinding bind, int key, KeyAction action, boolean mouse) { - //if (!mouse && !bind.matchesKey(key)) return; - //if (mouse && !bind.matchesMouse(key)) return; + private void pass(KeyBinding bind, int key, KeyAction action) { + if (Input.getKey(bind) != key) return; if (action == KeyAction.Press) bind.setPressed(true); if (action == KeyAction.Release) bind.setPressed(false); } public boolean skip() { - return mc.currentScreen == null || (mc.currentScreen instanceof CreativeInventoryScreen && CreativeInventoryScreenAccessor.meteor$getSelectedTab() == ItemGroups.getSearchGroup()) || mc.currentScreen instanceof ChatScreen || mc.currentScreen instanceof SignEditScreen || mc.currentScreen instanceof AnvilScreen || mc.currentScreen instanceof AbstractCommandBlockScreen || mc.currentScreen instanceof StructureBlockScreen; + if (mc.currentScreen == null || + (mc.currentScreen instanceof CreativeInventoryScreen && CreativeInventoryScreenAccessor.meteor$getSelectedTab() == ItemGroups.getSearchGroup()) + || mc.currentScreen instanceof ChatScreen + || mc.currentScreen instanceof SignEditScreen + || mc.currentScreen instanceof AnvilScreen + || mc.currentScreen instanceof AbstractCommandBlockScreen + || mc.currentScreen instanceof StructureBlockScreen) return true; + if (screens.get() == Screens.GUI && !(mc.currentScreen instanceof WidgetScreen)) return true; + return screens.get() == Screens.Inventory && mc.currentScreen instanceof WidgetScreen; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java index a77923d0f4..fe0b0f497e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.systems.modules.player; import meteordevelopment.meteorclient.events.entity.player.BlockBreakingCooldownEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.IntSetting; import meteordevelopment.meteorclient.settings.Setting; @@ -52,7 +52,7 @@ private void onBlockBreakingCooldown(BlockBreakingCooldownEvent event) { } @EventHandler - private void onClick(MouseButtonEvent event) { + private void onClick(MouseClickEvent event) { if (event.action == KeyAction.Press && noInstaBreak.get()) { breakBlockCooldown = true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java index 968ef7ca88..3d9e33e479 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java @@ -7,7 +7,7 @@ import meteordevelopment.meteorclient.events.entity.player.FinishUsingItemEvent; import meteordevelopment.meteorclient.events.entity.player.StoppedUsingItemEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.settings.BoolSetting; @@ -89,8 +89,8 @@ public void onDeactivate() { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { - if (event.action != KeyAction.Press || event.button != GLFW_MOUSE_BUTTON_MIDDLE || mc.currentScreen != null) return; + private void onMouseClick(MouseClickEvent event) { + if (event.action != KeyAction.Press || event.input.button() != GLFW_MOUSE_BUTTON_MIDDLE || mc.currentScreen != null) return; if (mode.get() == Mode.AddFriend) { if (mc.targetedEntity == null) return; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java index 55f72007ff..624f1bd2a3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java @@ -9,7 +9,7 @@ import meteordevelopment.meteorclient.events.game.GameLeftEvent; import meteordevelopment.meteorclient.events.game.OpenScreenEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.events.packets.PacketEvent; import meteordevelopment.meteorclient.events.world.ChunkOcclusionEvent; @@ -284,74 +284,46 @@ public void onKey(KeyEvent event) { if (Input.isKeyPressed(GLFW.GLFW_KEY_F3)) return; if (checkGuiMove()) return; - boolean cancel = true; - - if (mc.options.forwardKey.matchesKey(event.arg)) { - forward = event.action != KeyAction.Release; - mc.options.forwardKey.setPressed(false); - } - else if (mc.options.backKey.matchesKey(event.arg)) { - backward = event.action != KeyAction.Release; - mc.options.backKey.setPressed(false); - } - else if (mc.options.rightKey.matchesKey(event.arg)) { - right = event.action != KeyAction.Release; - mc.options.rightKey.setPressed(false); - } - else if (mc.options.leftKey.matchesKey(event.arg)) { - left = event.action != KeyAction.Release; - mc.options.leftKey.setPressed(false); - } - else if (mc.options.jumpKey.matchesKey(event.arg)) { - up = event.action != KeyAction.Release; - mc.options.jumpKey.setPressed(false); - } - else if (mc.options.sneakKey.matchesKey(event.arg)) { - down = event.action != KeyAction.Release; - mc.options.sneakKey.setPressed(false); - } - else { - cancel = false; - } - - if (cancel) event.cancel(); + if (onInput(event.input.key(), event.action)) event.cancel(); } @EventHandler(priority = EventPriority.HIGH) - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (checkGuiMove()) return; - boolean cancel = true; + if (onInput(event.input.button(), event.action)) event.cancel(); + } - if (mc.options.forwardKey.matchesMouse(event.arg)) { - forward = event.action != KeyAction.Release; + private boolean onInput(int key, KeyAction action) { + if (Input.getKey(mc.options.forwardKey) == key) { + forward = action != KeyAction.Release; mc.options.forwardKey.setPressed(false); } - else if (mc.options.backKey.matchesMouse(event.arg)) { - backward = event.action != KeyAction.Release; + else if (Input.getKey(mc.options.backKey) == key) { + backward = action != KeyAction.Release; mc.options.backKey.setPressed(false); } - else if (mc.options.rightKey.matchesMouse(event.arg)) { - right = event.action != KeyAction.Release; + else if (Input.getKey(mc.options.rightKey) == key) { + right = action != KeyAction.Release; mc.options.rightKey.setPressed(false); } - else if (mc.options.leftKey.matchesMouse(event.arg)) { - left = event.action != KeyAction.Release; + else if (Input.getKey(mc.options.leftKey) == key) { + left = action != KeyAction.Release; mc.options.leftKey.setPressed(false); } - else if (mc.options.jumpKey.matchesMouse(event.arg)) { - up = event.action != KeyAction.Release; + else if (Input.getKey(mc.options.jumpKey) == key) { + up = action != KeyAction.Release; mc.options.jumpKey.setPressed(false); } - else if (mc.options.sneakKey.matchesMouse(event.arg)) { - down = event.action != KeyAction.Release; + else if (Input.getKey(mc.options.sneakKey) == key) { + down = action != KeyAction.Release; mc.options.sneakKey.setPressed(false); } else { - cancel = false; + return false; } - if (cancel) event.cancel(); + return true; } @EventHandler(priority = EventPriority.LOW) @@ -394,7 +366,6 @@ else if (event.packet instanceof HealthUpdateS2CPacket packet) { } private boolean checkGuiMove() { - // TODO: This is very bad but you all can cope :cope: GUIMove guiMove = Modules.get().get(GUIMove.class); if (mc.currentScreen != null && !guiMove.isActive()) return true; return (mc.currentScreen != null && guiMove.isActive() && guiMove.skip()); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java index 40f5a98efe..fc24939649 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java @@ -111,7 +111,7 @@ public void onDeactivate() { @EventHandler public void onKeyPressed(KeyEvent event) { - if (event.key != GLFW.GLFW_KEY_F1) return; + if (event.input.key() != GLFW.GLFW_KEY_F1) return; hudManualToggled = true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java index 34f48d4b1e..03be24476b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java @@ -9,7 +9,7 @@ import baritone.api.IBaritone; import baritone.api.utils.BetterBlockPos; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.settings.*; @@ -93,7 +93,7 @@ public void onDeactivate() { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action != KeyAction.Press || !selectionBind.get().isPressed() || mc.currentScreen != null) { return; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java index 8d067c8244..2f65e14b60 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java @@ -8,7 +8,7 @@ import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import meteordevelopment.meteorclient.events.entity.player.BlockBreakingCooldownEvent; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.renderer.ShapeMode; @@ -328,7 +328,7 @@ private void onRender(Render3DEvent event) { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action == KeyAction.Press) addTargetedBlockToList(); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index fe446cbb94..a5f8256325 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -7,6 +7,8 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.input.Input; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.input.MouseInput; import net.minecraft.nbt.NbtCompound; import java.util.Objects; @@ -87,6 +89,14 @@ public boolean matches(boolean isKey, int value, int modifiers) { return this.value == value && this.modifiers == modifiers; } + public boolean matches(KeyInput input) { + return matches(true, input.key(), input.modifiers()); + } + + public boolean matches(MouseInput input) { + return matches(false, input.button(), 0); + } + public boolean isPressed() { return isKey ? modifiersPressed() && Input.isKeyPressed(value) : Input.isButtonPressed(value); } From 924be20fc8f4aceede4bd67ebe8e697f1acc9b43 Mon Sep 17 00:00:00 2001 From: RacoonDog <32882447+RacoonDog@users.noreply.github.com> Date: Wed, 8 Oct 2025 14:01:24 -0400 Subject: [PATCH 19/38] re-add 1.21.9 support, fix fapi dependency (#5755) --- build.gradle.kts | 1 + .../meteorclient/mixin/CobwebBlockMixin.java | 9 ++++++++- .../meteorclient/mixin/SweetBerryBushBlockMixin.java | 9 ++++++++- src/main/resources/fabric.mod.json | 2 +- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 455808b036..d74de766dd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -78,6 +78,7 @@ dependencies { modInclude(fabricApi.module("fabric-api-base", properties["fapi_version"] as String)) modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) + modInclude(fabricApi.module("fabric-resource-loader-v1", properties["fapi_version"] as String)) // Compat fixes modCompileOnly(fabricApi.module("fabric-renderer-indigo", properties["fapi_version"] as String)) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java index 58d05af06a..49c90c8b80 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java @@ -13,6 +13,7 @@ import net.minecraft.entity.EntityCollisionHandler; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -22,8 +23,14 @@ @Mixin(CobwebBlock.class) public abstract class CobwebBlockMixin { - @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true) + @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true, require = 0) private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); } + + @Dynamic("1.21.9 Method Parameters") + @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true, require = 0) + private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo ci) { + if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java index d88b5119a5..f1354ef582 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java @@ -13,6 +13,7 @@ import net.minecraft.entity.EntityCollisionHandler; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -22,8 +23,14 @@ @Mixin(SweetBerryBushBlock.class) public abstract class SweetBerryBushBlockMixin { - @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true) + @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true, require = 0) private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); } + + @Dynamic("1.21.9 Method Parameters") + @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true, require = 0) + private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo ci) { + if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); + } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 0f5f204d16..922f997aa6 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -47,7 +47,7 @@ }, "depends": { "java": ">=21", - "minecraft": ["${minecraft_version}"], + "minecraft": ["${minecraft_version}", "1.21.9"], "fabricloader": ">=${loader_version}" }, "breaks": { From 7a414755e3dfea69e67dfb1b027671e13e0fa93a Mon Sep 17 00:00:00 2001 From: Big Iron <52252627+Big-Iron-Cheems@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:19:49 +0200 Subject: [PATCH 20/38] Replace Shadow JAR with proper JiJ implementation (#5754) --- build.gradle.kts | 84 +++++++++++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d74de766dd..22ea04ed11 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ plugins { id("fabric-loom") version "1.11-SNAPSHOT" id("maven-publish") - id("com.gradleup.shadow") version "9.2.2" } base { @@ -50,7 +49,7 @@ repositories { } val modInclude: Configuration by configurations.creating -val library: Configuration by configurations.creating +val jij: Configuration by configurations.creating configurations { // include mods @@ -61,12 +60,12 @@ configurations { extendsFrom(modInclude) } - // include libraries + // include libraries (jar-in-jar) implementation.configure { - extendsFrom(library) + extendsFrom(jij) } - shadow.configure { - extendsFrom(library) + include.configure { + extendsFrom(jij) } } @@ -94,16 +93,44 @@ dependencies { modCompileOnly("com.terraformersmc:modmenu:${properties["modmenu_version"] as String}") // Libraries - library("meteordevelopment:orbit:${properties["orbit_version"] as String}") - library("org.meteordev:starscript:${properties["starscript_version"] as String}") - library("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}") - library("org.reflections:reflections:${properties["reflections_version"] as String}") - library("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false } - library("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false } - library("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}") - - // Launch sub project - shadow(project(":launch")) + jij("meteordevelopment:orbit:${properties["orbit_version"] as String}") + jij("org.meteordev:starscript:${properties["starscript_version"] as String}") + jij("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}") + jij("org.reflections:reflections:${properties["reflections_version"] as String}") + jij("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false } + jij("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false } + jij("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}") +} + +// Handle transitive dependencies for jar-in-jar +// Based on implementation from BaseProject by FlorianMichael/EnZaXD +// Source: https://github.com/FlorianMichael/BaseProject/blob/main/src/main/kotlin/de/florianmichael/baseproject/Fabric.kt +// Licensed under Apache License 2.0 +afterEvaluate { + val jijConfig = configurations.findByName("jij") ?: return@afterEvaluate + + // Dependencies to exclude from jar-in-jar + val excluded = setOf( + "org.slf4j", // Logging provided by Minecraft + "jsr305" // Compile time annotations only + ) + + + jijConfig.incoming.resolutionResult.allDependencies.forEach { dep -> + val requested = dep.requested.displayName + + if (excluded.any { requested.contains(it) }) return@forEach + + val compileOnlyDep = dependencies.create(requested) { + isTransitive = false + } + + val implDep = dependencies.create(compileOnlyDep) + + dependencies.add("compileOnlyApi", compileOnlyDep) + dependencies.add("implementation", implDep) + dependencies.add("include", compileOnlyDep) + } } loom { @@ -142,6 +169,10 @@ tasks { rename { "${it}_${inputs.properties["archivesName"]}" } } + // Launch sub project + dependsOn(":launch:compileJava") + from(project(":launch").layout.buildDirectory.dir("classes/java/main")) + manifest { attributes["Main-Class"] = "meteordevelopment.meteorclient.Main" } @@ -163,27 +194,6 @@ tasks { options.compilerArgs.add("-Xlint:unchecked") } - shadowJar { - configurations = listOf(project.configurations.shadow.get()) - - inputs.property("archivesName", project.base.archivesName.get()) - - from("LICENSE") { - rename { "${it}_${inputs.properties["archivesName"]}" } - } - - dependencies { - exclude { - it.moduleGroup == "org.slf4j" - } - } - } - - remapJar { - dependsOn(shadowJar) - inputFile.set(shadowJar.get().archiveFile) - } - javadoc { with(options as StandardJavadocDocletOptions) { addStringOption("Xdoclint:none", "-quiet") From 3ee1011e26542b53d622dfaa581238a10ae17a4c Mon Sep 17 00:00:00 2001 From: RacoonDog <32882447+RacoonDog@users.noreply.github.com> Date: Sat, 11 Oct 2025 12:40:17 -0400 Subject: [PATCH 21/38] fix 1.21.10 support (#5757) --- .../meteorclient/mixin/CobwebBlockMixin.java | 20 ++++++++----------- .../mixin/SweetBerryBushBlockMixin.java | 20 ++++++++----------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java index 49c90c8b80..1c4319eaac 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java @@ -5,14 +5,11 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.movement.NoSlow; -import net.minecraft.block.BlockState; import net.minecraft.block.CobwebBlock; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -23,14 +20,13 @@ @Mixin(CobwebBlock.class) public abstract class CobwebBlockMixin { - @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true, require = 0) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { - if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); - } - - @Dynamic("1.21.9 Method Parameters") - @Inject(method = "onEntityCollision", at = @At("HEAD"), cancellable = true, require = 0) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo ci) { + @Dynamic("Explicit 1.21.9 Support") + @Inject(method = { + "onEntityCollision", // 1.21.10 + "onEntityCollision(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityCollisionHandler;)V", // 1.21.9 yarn + "method_9548(Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_10774;)V" // 1.21.9 intermediary + }, at = @At("HEAD"), cancellable = true) + private void onEntityCollision(CallbackInfo ci, @Local(argsOnly = true) Entity entity) { if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java index f1354ef582..13afbd9413 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java @@ -5,14 +5,11 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.movement.NoSlow; -import net.minecraft.block.BlockState; import net.minecraft.block.SweetBerryBushBlock; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -23,14 +20,13 @@ @Mixin(SweetBerryBushBlock.class) public abstract class SweetBerryBushBlockMixin { - @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true, require = 0) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, boolean bl, CallbackInfo ci) { - if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); - } - - @Dynamic("1.21.9 Method Parameters") - @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true, require = 0) - private void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity, EntityCollisionHandler handler, CallbackInfo ci) { + @Dynamic("Explicit 1.21.9 Support") + @Inject(method = { + "onEntityCollision", // 1.21.10 + "onEntityCollision(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityCollisionHandler;)V", // 1.21.9 yarn + "method_9548(Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_10774;)V" // 1.21.9 intermediary + }, at = @At("HEAD"), cancellable = true) + private void onEntityCollision(CallbackInfo ci, @Local(argsOnly = true) Entity entity) { if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); } } From d71abb35bb6491b6a56604dc655dd54c675d557d Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sat, 11 Oct 2025 17:43:03 +0100 Subject: [PATCH 22/38] Update our screen system to ensure consistency with the new mouse and key events --- .../meteorclient/events/meteor/KeyEvent.java | 4 +- .../meteorclient/gui/WidgetScreen.java | 44 +++++----- .../screens/settings/ColorSettingScreen.java | 9 ++- .../meteorclient/gui/utils/CharFilter.java | 4 + .../meteorclient/gui/widgets/WLabel.java | 9 ++- .../meteorclient/gui/widgets/WWidget.java | 33 ++++---- .../gui/widgets/containers/WContainer.java | 33 ++++---- .../gui/widgets/containers/WSection.java | 5 +- .../gui/widgets/containers/WView.java | 7 +- .../gui/widgets/containers/WWindow.java | 7 +- .../gui/widgets/input/WDropdown.java | 33 ++++---- .../gui/widgets/input/WSlider.java | 9 ++- .../gui/widgets/input/WTextBox.java | 81 ++++++++++--------- .../gui/widgets/pressable/WPressable.java | 9 ++- .../mixin/HandledScreenMixin.java | 12 +-- .../meteorclient/mixin/KeyboardMixin.java | 20 ++--- .../meteorclient/mixin/ScreenMixin.java | 4 +- .../meteorclient/mixin/TitleScreenMixin.java | 6 +- .../systems/hud/screens/HudEditorScreen.java | 34 ++++---- .../systems/modules/movement/AutoWalk.java | 28 +++---- .../meteorclient/utils/render/PeekScreen.java | 14 ++-- 21 files changed, 214 insertions(+), 191 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index 2d592f7f52..5c4ba5940b 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -15,9 +15,9 @@ public class KeyEvent extends Cancellable { public KeyInput input; public KeyAction action; - public static KeyEvent get(KeyInput keyInput, KeyAction action) { + public static KeyEvent get(KeyInput input, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.input = keyInput; + INSTANCE.input = input; INSTANCE.action = action; return INSTANCE; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 0ea3c98cf4..c8450dd738 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -118,31 +118,31 @@ public void onClosed(Runnable action) { } @Override - public boolean mouseClicked(Click arg, boolean doubled) { + public boolean mouseClicked(Click click, boolean doubled) { if (locked) return false; - double mouseX = arg.x(); - double mouseY = arg.y(); + double mouseX = click.x(); + double mouseY = click.y(); double s = mc.getWindow().getScaleFactor(); mouseX *= s; mouseY *= s; - return root.mouseClicked(mouseX, mouseY, arg.button(), doubled); + return root.mouseClicked(new Click(mouseX, mouseY, click.buttonInfo()), doubled); } @Override - public boolean mouseReleased(Click arg) { + public boolean mouseReleased(Click click) { if (locked) return false; - double mouseX = arg.x(); - double mouseY = arg.y(); + double mouseX = click.x(); + double mouseY = click.y(); double s = mc.getWindow().getScaleFactor(); mouseX *= s; mouseY *= s; - return root.mouseReleased(mouseX, mouseY, arg.button()); + return root.mouseReleased(new Click(mouseX, mouseY, click.buttonInfo())); } @Override @@ -169,31 +169,31 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyReleased(KeyInput arg) { + public boolean keyReleased(KeyInput input) { if (locked) return false; - if ((arg.modifiers() == GLFW_MOD_CONTROL || arg.modifiers() == GLFW_MOD_SUPER) && arg.key() == GLFW_KEY_9) { + if ((input.modifiers() == GLFW_MOD_CONTROL || input.modifiers() == GLFW_MOD_SUPER) && input.key() == GLFW_KEY_9) { debug = !debug; return true; } - if ((arg.key() == GLFW_KEY_ENTER || arg.key() == GLFW_KEY_KP_ENTER) && enterAction != null) { + if ((input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) && enterAction != null) { enterAction.run(); return true; } - return super.keyReleased(arg); + return super.keyReleased(input); } @Override - public boolean keyPressed(KeyInput arg) { + public boolean keyPressed(KeyInput input) { if (locked) return false; - boolean shouldReturn = root.keyPressed(arg.key(), arg.modifiers()) || super.keyPressed(arg); + boolean shouldReturn = root.keyPressed(input) || super.keyPressed(input); if (shouldReturn) return true; // Select next text box if TAB was pressed - if (arg.key() == GLFW_KEY_TAB) { + if (input.key() == GLFW_KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); AtomicBoolean foundFocused = new AtomicBoolean(false); @@ -224,23 +224,23 @@ public boolean keyPressed(KeyInput arg) { return true; } - boolean control = MacWindowUtil.IS_MAC ? arg.modifiers() == GLFW_MOD_SUPER : arg.modifiers() == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; - return (control && arg.key() == GLFW_KEY_C && toClipboard()) - || (control && arg.key() == GLFW_KEY_V && fromClipboard()); + return (control && input.key() == GLFW_KEY_C && toClipboard()) + || (control && input.key() == GLFW_KEY_V && fromClipboard()); } - public void keyRepeated(int key, int modifiers) { + public void keyRepeated(KeyInput input) { if (locked) return; - root.keyRepeated(key, modifiers); + root.keyRepeated(input); } @Override - public boolean charTyped(CharInput arg) { + public boolean charTyped(CharInput input) { if (locked) return false; - return root.charTyped(((char) arg.codepoint())); + return root.charTyped(input); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java index 2158d6a550..6de4f2698c 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java @@ -20,6 +20,7 @@ import meteordevelopment.meteorclient.utils.misc.NbtUtils; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -276,7 +277,7 @@ void calculateFromColor(Color c, boolean calculateNow) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (used) return false; if (mouseOver) { @@ -293,7 +294,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; } @@ -548,7 +549,7 @@ void calculateColor() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (used) return false; if (mouseOver) { @@ -565,7 +566,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java b/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java index a0adcf1b73..9bb2544e68 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java @@ -7,4 +7,8 @@ public interface CharFilter { boolean filter(String text, char c); + + default boolean filter(String text, int i) { + return filter(text, (char) i); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java index 6809155107..ad9d8be347 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.client.gui.Click; public abstract class WLabel extends WPressable { public Color color; @@ -26,14 +27,14 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (action != null) return super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + if (action != null) return super.onMouseClicked(click, used); return false; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (action != null) return super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (action != null) return super.onMouseReleased(click); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java index c3f9f36735..0127666454 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java @@ -8,6 +8,9 @@ import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.utils.BaseWidget; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; public abstract class WWidget implements BaseWidget { public boolean visible = true; @@ -87,15 +90,15 @@ protected void onRender(GuiRenderer renderer, double mouseX, double mouseY, doub // Events - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean used) { - return onMouseClicked(mouseX, mouseY, button, used); + public boolean mouseClicked(Click click, boolean used) { + return onMouseClicked(click, used); } - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { return false; } + public boolean onMouseClicked(Click click, boolean used) { return false; } - public boolean mouseReleased(double mouseX, double mouseY, int button) { - return onMouseReleased(mouseX, mouseY, button); + public boolean mouseReleased(Click click) { + return onMouseReleased(click); } - public boolean onMouseReleased(double mouseX, double mouseY, int button) { return false; } + public boolean onMouseReleased(Click click) { return false; } public void mouseMoved(double mouseX, double mouseY, double lastMouseX, double lastMouseY) { mouseOver = isOver(mouseX, mouseY); @@ -108,20 +111,20 @@ public boolean mouseScrolled(double amount) { } public boolean onMouseScrolled(double amount) { return false; } - public boolean keyPressed(int key, int mods) { - return onKeyPressed(key, mods); + public boolean keyPressed(KeyInput input) { + return onKeyPressed(input); } - public boolean onKeyPressed(int key, int mods) { return false; } + public boolean onKeyPressed(KeyInput input) { return false; } - public boolean keyRepeated(int key, int mods) { - return onKeyRepeated(key, mods); + public boolean keyRepeated(KeyInput input) { + return onKeyRepeated(input); } - public boolean onKeyRepeated(int key, int mods) { return false; } + public boolean onKeyRepeated(KeyInput input) { return false; } - public boolean charTyped(char c) { - return onCharTyped(c); + public boolean charTyped(CharInput input) { + return onCharTyped(input); } - public boolean onCharTyped(char c) { return false; } + public boolean onCharTyped(CharInput input) { return false; } // Other diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java index 4ae00b5ffe..90ac5ea4df 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java @@ -9,6 +9,9 @@ import meteordevelopment.meteorclient.gui.utils.Cell; import meteordevelopment.meteorclient.gui.widgets.WWidget; import net.minecraft.client.Mouse; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import java.util.ArrayList; import java.util.ConcurrentModificationException; @@ -124,26 +127,26 @@ protected boolean propagateEvents(WWidget widget) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean mouseClicked(Click click, boolean used) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().mouseClicked(mouseX, mouseY, button, used)) + if (propagateEvents(cell.widget()) && cell.widget().mouseClicked(click, used)) used = true; } } catch (ConcurrentModificationException ignored) {} - return super.mouseClicked(mouseX, mouseY, button, used) || used; + return super.mouseClicked(click, used) || used; } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click click) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().mouseReleased(mouseX, mouseY, button)) return true; + if (propagateEvents(cell.widget()) && cell.widget().mouseReleased(click)) return true; } } catch (ConcurrentModificationException ignored) {} - return super.mouseReleased(mouseX, mouseY, button); + return super.mouseReleased(click); } @Override @@ -169,35 +172,35 @@ public boolean mouseScrolled(double amount) { } @Override - public boolean keyPressed(int key, int modifiers) { + public boolean keyPressed(KeyInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().keyPressed(key, modifiers)) return true; + if (propagateEvents(cell.widget()) && cell.widget().keyPressed(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return onKeyPressed(key, modifiers); + return onKeyPressed(input); } @Override - public boolean keyRepeated(int key, int modifiers) { + public boolean keyRepeated(KeyInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().keyRepeated(key, modifiers)) return true; + if (propagateEvents(cell.widget()) && cell.widget().keyRepeated(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return onKeyRepeated(key, modifiers); + return onKeyRepeated(input); } @Override - public boolean charTyped(char c) { + public boolean charTyped(CharInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().charTyped(c)) return true; + if (propagateEvents(cell.widget()) && cell.widget().charTyped(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return super.charTyped(c); + return super.charTyped(input); } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java index 3c1b163f12..145b4b6cd7 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java @@ -8,6 +8,7 @@ import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.utils.Cell; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @@ -123,8 +124,8 @@ public WHeader(String title) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (mouseOver && button == GLFW_MOUSE_BUTTON_LEFT && !used) { + public boolean onMouseClicked(Click click, boolean used) { + if (mouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !used) { onClick(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java index 8e2ce8ea07..0330c0b830 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java @@ -8,6 +8,7 @@ import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.utils.Utils; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @@ -74,8 +75,8 @@ protected void onCalculateWidgetPositions() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (handleMouseOver && button == GLFW_MOUSE_BUTTON_LEFT && !used) { + public boolean onMouseClicked(Click click, boolean used) { + if (handleMouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !used) { handlePressed = true; return true; } @@ -84,7 +85,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (handlePressed) handlePressed = false; return false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java index 86a4258b33..cb34e85422 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.gui.utils.WindowConfig; import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.gui.widgets.pressable.WTriangle; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import java.util.function.Consumer; @@ -188,9 +189,9 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { - if (button == GLFW_MOUSE_BUTTON_RIGHT) setExpanded(!expanded); + if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) setExpanded(!expanded); else { dragging = true; dragged = false; @@ -203,7 +204,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java index b43476f4f2..1d5b2d1d44 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java @@ -10,6 +10,9 @@ import meteordevelopment.meteorclient.gui.widgets.WRoot; import meteordevelopment.meteorclient.gui.widgets.containers.WVerticalList; import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.util.math.MathHelper; public abstract class WDropdown extends WPressable { @@ -121,20 +124,20 @@ public boolean render(GuiRenderer renderer, double mouseX, double mouseY, double // Events @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (!mouseOver && !root.mouseOver) expanded = false; - if (super.onMouseClicked(mouseX, mouseY, button, used)) used = true; - if (expanded && root.mouseClicked(mouseX, mouseY, button, used)) used = true; + if (super.onMouseClicked(click, used)) used = true; + if (expanded && root.mouseClicked(click, used)) used = true; return used; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (super.onMouseReleased(mouseX, mouseY, button)) return true; + public boolean onMouseReleased(Click click) { + if (super.onMouseReleased(click)) return true; - return expanded && root.mouseReleased(mouseX, mouseY, button); + return expanded && root.mouseReleased(click); } @Override @@ -156,24 +159,24 @@ public boolean onMouseScrolled(double amount) { } @Override - public boolean onKeyPressed(int key, int mods) { - if (super.onKeyPressed(key, mods)) return true; + public boolean onKeyPressed(KeyInput input) { + if (super.onKeyPressed(input)) return true; - return expanded && root.keyPressed(key, mods); + return expanded && root.keyPressed(input); } @Override - public boolean onKeyRepeated(int key, int mods) { - if (super.onKeyRepeated(key, mods)) return true; + public boolean onKeyRepeated(KeyInput input) { + if (super.onKeyRepeated(input)) return true; - return expanded && root.keyRepeated(key, mods); + return expanded && root.keyRepeated(input); } @Override - public boolean onCharTyped(char c) { - if (super.onCharTyped(c)) return true; + public boolean onCharTyped(CharInput input) { + if (super.onCharTyped(input)) return true; - return expanded && root.charTyped(c); + return expanded && root.charTyped(input); } // Widgets diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java index a2384ccd3f..12120f72c1 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.input; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; public abstract class WSlider extends WWidget { @@ -42,12 +43,12 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { valueAtDragStart = value; double handleSize = handleSize(); - double valueWidth = mouseX - (x + handleSize / 2); + double valueWidth = click.x() - (x + handleSize / 2); set((valueWidth / (width - handleSize)) * (max - min) + min); if (action != null) action.run(); @@ -104,7 +105,7 @@ public void onMouseMoved(double mouseX, double mouseY, double lastMouseX, double } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { if (value != valueAtDragStart && actionOnRelease != null) { actionOnRelease.run(); @@ -120,7 +121,7 @@ public boolean onMouseReleased(double mouseX, double mouseY, int button) { @Override public boolean onMouseScrolled(double amount) { // when user starts to scroll over regular handle - // remember it's position and check only this "ghost" + // remember its position and check only this "ghost" // position to allow scroll (until it leaves ghost area) if (!scrollHandleMouseOver && handleMouseOver) { scrollHandleX = x; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java index 05eba15a01..8b0f135c2c 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java @@ -14,6 +14,9 @@ import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.gui.widgets.containers.WContainer; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.client.util.MacWindowUtil; import net.minecraft.util.math.MathHelper; import org.apache.commons.lang3.SystemUtils; @@ -105,9 +108,9 @@ protected double maxTextWidth() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { - if (button == GLFW_MOUSE_BUTTON_RIGHT) { + if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) { if (!text.isEmpty()) { text = ""; cursor = 0; @@ -117,11 +120,11 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean runAction(); } } - else if (button == GLFW_MOUSE_BUTTON_LEFT) { + else if (click.button() == GLFW_MOUSE_BUTTON_LEFT) { selecting = true; double overflowWidth = getOverflowWidthForRender(); - double relativeMouseX = mouseX - x + overflowWidth; + double relativeMouseX = click.x() - x + overflowWidth; double pad = pad(); double smallestDifference = Double.MAX_VALUE; @@ -183,7 +186,7 @@ else if (i > preSelectionCursor) { } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { selecting = false; if (selectionStart < preSelectionCursor && preSelectionCursor == selectionEnd) { @@ -197,18 +200,18 @@ else if (selectionEnd > preSelectionCursor && preSelectionCursor == selectionSta } @Override - public boolean onKeyPressed(int key, int mods) { + public boolean onKeyPressed(KeyInput input) { if (!focused) return false; - boolean control = MacWindowUtil.IS_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; - if (control && key == GLFW_KEY_C) { + if (control && input.key() == GLFW_KEY_C) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboard.setClipboard(text.substring(selectionStart, selectionEnd)); } return true; } - else if (control && key == GLFW_KEY_X) { + else if (control && input.key() == GLFW_KEY_X) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboard.setClipboard(text.substring(selectionStart, selectionEnd)); clearSelection(); @@ -216,21 +219,21 @@ else if (control && key == GLFW_KEY_X) { return true; } - else if (control && key == GLFW_KEY_A) { + else if (control && input.key() == GLFW_KEY_A) { cursor = text.length(); selectionStart = 0; selectionEnd = cursor; } - else if (mods == ((MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && key == GLFW_KEY_A) { + else if (input.modifiers() == ((MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && input.key() == GLFW_KEY_A) { resetSelection(); } - else if (key == GLFW_KEY_ENTER || key == GLFW_KEY_KP_ENTER) { + else if (input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) { setFocused(false); if (actionOnUnfocused != null) actionOnUnfocused.run(); return true; } - else if (key == GLFW_KEY_TAB && completionsW != null) { + else if (input.key() == GLFW_KEY_TAB && completionsW != null) { String completion = ((ICompletionItem) completionsW.cells.get(getSelectedCompletion()).widget()).getCompletion(); StringBuilder sb = new StringBuilder(text.length() + completion.length() + 1); @@ -257,19 +260,19 @@ else if (key == GLFW_KEY_TAB && completionsW != null) { return true; } - return onKeyRepeated(key, mods); + return onKeyRepeated(input); } @Override - public boolean onKeyRepeated(int key, int mods) { + public boolean onKeyRepeated(KeyInput input) { if (!focused) return false; - boolean control = MacWindowUtil.IS_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; - boolean shift = mods == GLFW_MOD_SHIFT; - boolean controlShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); - boolean altShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); + boolean control = MacWindowUtil.IS_MAC ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; + boolean shift = input.modifiers() == GLFW_MOD_SHIFT; + boolean controlShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); + boolean altShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); - if (control && key == GLFW_KEY_V) { + if (control && input.key() == GLFW_KEY_V) { clearSelection(); String preText = text; @@ -294,13 +297,13 @@ public boolean onKeyRepeated(int key, int mods) { if (!text.equals(preText)) runAction(); return true; } - else if (key == GLFW_KEY_BACKSPACE) { + else if (input.key() == GLFW_KEY_BACKSPACE) { if (cursor > 0 && cursor == selectionStart && cursor == selectionEnd) { String preText = text; - int count = (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) + int count = (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) ? cursor - : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(true) : 1; @@ -316,14 +319,14 @@ else if (cursor != selectionStart || cursor != selectionEnd) { return true; } - else if (key == GLFW_KEY_DELETE) { + else if (input.key() == GLFW_KEY_DELETE) { if (cursor == selectionStart && cursor == selectionEnd) { if (cursor < text.length()) { String preText = text; - int count = mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) + int count = input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) ? text.length() - cursor - : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(false) : 1; @@ -337,13 +340,13 @@ else if (key == GLFW_KEY_DELETE) { } return true; } - else if (key == GLFW_KEY_LEFT) { + else if (input.key() == GLFW_KEY_LEFT) { if (cursor > 0) { - if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { cursor -= countToNextSpace(true); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = 0; resetSelection(); } @@ -388,7 +391,7 @@ else if (shift) { cursorChanged(); } - else if (selectionStart != selectionEnd && selectionStart == 0 && mods == 0) { + else if (selectionStart != selectionEnd && selectionStart == 0 && input.modifiers() == 0) { cursor = 0; resetSelection(); cursorChanged(); @@ -396,13 +399,13 @@ else if (selectionStart != selectionEnd && selectionStart == 0 && mods == 0) { return true; } - else if (key == GLFW_KEY_RIGHT) { + else if (input.key() == GLFW_KEY_RIGHT) { if (cursor < text.length()) { - if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { cursor += countToNextSpace(false); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = text.length(); resetSelection(); } @@ -446,7 +449,7 @@ else if (shift) { cursorChanged(); } - else if (selectionStart != selectionEnd && selectionEnd == text.length() && mods == 0) { + else if (selectionStart != selectionEnd && selectionEnd == text.length() && input.modifiers() == 0) { cursor = text.length(); resetSelection(); cursorChanged(); @@ -454,7 +457,7 @@ else if (selectionStart != selectionEnd && selectionEnd == text.length() && mods return true; } - else if (key == GLFW_KEY_DOWN && completionsW != null) { + else if (input.key() == GLFW_KEY_DOWN && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == Math.min(5, completions.size() - 1)) { @@ -470,7 +473,7 @@ else if (key == GLFW_KEY_DOWN && completionsW != null) { return true; } - else if (key == GLFW_KEY_UP && completionsW != null) { + else if (input.key() == GLFW_KEY_UP && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == 0) { @@ -502,13 +505,13 @@ private int getSelectedCompletion() { } @Override - public boolean onCharTyped(char c) { + public boolean onCharTyped(CharInput input) { if (!focused) return false; - if (filter.filter(text, c)) { + if (filter.filter(text, input.codepoint())) { clearSelection(); - text = text.substring(0, cursor) + c + text.substring(cursor); + text = text.substring(0, cursor) + input + text.substring(cursor); cursor++; resetSelection(); diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java index 5e26f0c359..6ee1b82949 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; @@ -16,15 +17,15 @@ public abstract class WPressable extends WWidget { protected boolean pressed; @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (mouseOver && (button == GLFW_MOUSE_BUTTON_LEFT || button == GLFW_MOUSE_BUTTON_RIGHT) && !used) pressed = true; + public boolean onMouseClicked(Click click, boolean used) { + if (mouseOver && (click.button() == GLFW_MOUSE_BUTTON_LEFT || click.button() == GLFW_MOUSE_BUTTON_RIGHT) && !used) pressed = true; return pressed; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (pressed) { - onPressed(button); + onPressed(click.button()); if (action != null) action.run(); pressed = false; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index 3b7ad9ff59..fba1935630 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -93,19 +93,19 @@ private void onInit(CallbackInfo info) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) - private void onMouseDragged(Click arg, double d, double e, CallbackInfoReturnable cir) { - if (arg.button() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; + private void onMouseDragged(Click click, double offsetX, double offsetY, CallbackInfoReturnable cir) { + if (click.button() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; - Slot slot = getSlotAt(arg.x(), arg.y()); - if (slot != null && slot.hasStack() && mc.isShiftPressed()) onMouseClick(slot, slot.id, arg.button(), SlotActionType.QUICK_MOVE); + Slot slot = getSlotAt(click.x(), click.y()); + if (slot != null && slot.hasStack() && mc.isShiftPressed()) onMouseClick(slot, slot.id, click.button(), SlotActionType.QUICK_MOVE); } // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(Click arg, boolean doubled, CallbackInfoReturnable cir) { + private void mouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { cir.setReturnValue(Utils.openContainer(focusedSlot.getStack(), ITEMS, false)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java index 628cfcb8f4..ae69aa53ba 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -30,32 +30,32 @@ public abstract class KeyboardMixin { @Shadow @Final private MinecraftClient client; @Inject(method = "onKey", at = @At("HEAD"), cancellable = true) - public void onKey(long window, int action, KeyInput keyEvent, CallbackInfo ci) { - int modifiers = keyEvent.modifiers(); - if (keyEvent.key() != GLFW.GLFW_KEY_UNKNOWN) { + public void onKey(long window, int action, KeyInput input, CallbackInfo ci) { + int modifiers = input.modifiers(); + if (input.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released // https://github.com/glfw/glfw/issues/1630 if (action == GLFW.GLFW_PRESS) { - modifiers |= Input.getModifier(keyEvent.key()); + modifiers |= Input.getModifier(input.key()); } else if (action == GLFW.GLFW_RELEASE) { - modifiers &= ~Input.getModifier(keyEvent.key()); + modifiers &= ~Input.getModifier(input.key()); } if (client.currentScreen instanceof WidgetScreen && action == GLFW.GLFW_REPEAT) { - ((WidgetScreen) client.currentScreen).keyRepeated(keyEvent.key(), modifiers); + ((WidgetScreen) client.currentScreen).keyRepeated(new KeyInput(input.key(), input.scancode(), modifiers)); } if (GuiKeyEvents.canUseKeys) { - Input.setKeyState(keyEvent.key(), action != GLFW.GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(KeyEvent.get(keyEvent, KeyAction.get(action))).isCancelled()) ci.cancel(); + Input.setKeyState(input.key(), action != GLFW.GLFW_RELEASE); + if (MeteorClient.EVENT_BUS.post(KeyEvent.get(new KeyInput(input.key(), input.scancode(), modifiers), KeyAction.get(action))).isCancelled()) ci.cancel(); } } } @Inject(method = "onChar", at = @At("HEAD"), cancellable = true) - private void onChar(long window, CharInput arg, CallbackInfo ci) { + private void onChar(long window, CharInput input, CallbackInfo ci) { if (Utils.canUpdate() && !client.isPaused() && (client.currentScreen == null || client.currentScreen instanceof WidgetScreen)) { - if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) arg.codepoint())).isCancelled()) ci.cancel(); + if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) input.codepoint())).isCancelled()) ci.cancel(); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java index 7d299935de..2f5113b8f4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java @@ -60,11 +60,11 @@ private static void onHandleBasicClickEvent(ClickEvent clickEvent, MinecraftClie } @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void onKeyPressed(KeyInput arg, CallbackInfoReturnable cir) { + private void onKeyPressed(KeyInput input, CallbackInfoReturnable cir) { if ((Object) (this) instanceof ChatScreen) return; GUIMove guiMove = Modules.get().get(GUIMove.class); List arrows = List.of(GLFW_KEY_RIGHT, GLFW_KEY_LEFT, GLFW_KEY_DOWN, GLFW_KEY_UP); - if ((guiMove.disableArrows() && arrows.contains(arg.key())) || (guiMove.disableSpace() && arg.key() == GLFW_KEY_SPACE)) { + if ((guiMove.disableArrows() && arrows.contains(input.key())) || (guiMove.disableSpace() && input.key() == GLFW_KEY_SPACE)) { cir.setReturnValue(true); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 00790464e9..eabc7b3268 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -31,9 +31,9 @@ private void onRender(DrawContext context, int mouseX, int mouseY, float delta, } @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void onMouseClicked(Click arg, boolean doubled, CallbackInfoReturnable cir) { - if (Config.get().titleScreenCredits.get() && arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - if (TitleScreenCredits.onClicked(arg.x(), arg.y())) cir.setReturnValue(true); + private void onMouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { + if (Config.get().titleScreenCredits.get() && click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (TitleScreenCredits.onClicked(click.x(), click.y())) cir.setReturnValue(true); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index 5f0f5f1858..67b240aa41 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -67,16 +67,16 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(Click arg, boolean doubled) { + public boolean mouseClicked(Click click, boolean doubled) { double s = mc.getWindow().getScaleFactor(); - double mouseX = arg.x(); - double mouseY = arg.y(); + double mouseX = click.x(); + double mouseY = click.y(); mouseX *= s; mouseY *= s; - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { pressed = true; selectionSnapBox = null; @@ -117,16 +117,16 @@ public void mouseMoved(double mouseX, double mouseY) { } @Override - public boolean mouseReleased(Click arg) { + public boolean mouseReleased(Click click) { double s = mc.getWindow().getScaleFactor(); - double mouseX = arg.x(); - double mouseY = arg.y(); + double mouseX = click.x(); + double mouseY = click.y(); mouseX *= s; mouseY *= s; - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; if (addedHoveredToSelectionWhenClickedElement != null) { selection.remove(addedHoveredToSelectionWhenClickedElement); @@ -134,14 +134,14 @@ public boolean mouseReleased(Click arg) { } if (moved) { - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); } else { - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) hovered.toggle(); } - else if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + else if (click.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) mc.setScreen(new HudElementScreen(theme, hovered)); @@ -149,7 +149,7 @@ else if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } } - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { snapper.unsnap(); moved = dragging = false; } @@ -158,13 +158,13 @@ else if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } @Override - public boolean keyPressed(KeyInput arg) { + public boolean keyPressed(KeyInput input) { if (!pressed) { - if (arg.key() == GLFW.GLFW_KEY_ENTER || arg.key() == GLFW.GLFW_KEY_KP_ENTER) { + if (input.key() == GLFW.GLFW_KEY_ENTER || input.key() == GLFW.GLFW_KEY_KP_ENTER) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.toggle(); } - else if (arg.key() == GLFW.GLFW_KEY_DELETE) { + else if (input.key() == GLFW.GLFW_KEY_DELETE) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.remove(); @@ -176,7 +176,7 @@ else if (arg.key() == GLFW.GLFW_KEY_DELETE) { int pixels = (Input.isKeyPressed(GLFW.GLFW_KEY_LEFT_CONTROL) || Input.isKeyPressed(GLFW.GLFW_KEY_RIGHT_CONTROL)) ? 10 : 1; int dx = 0, dy = 0; - switch (arg.key()) { + switch (input.key()) { case GLFW.GLFW_KEY_UP -> dy = -pixels; case GLFW.GLFW_KEY_DOWN -> dy = pixels; case GLFW.GLFW_KEY_RIGHT -> dx = pixels; @@ -190,7 +190,7 @@ else if (arg.key() == GLFW.GLFW_KEY_DELETE) { } } - return super.keyPressed(arg); + return super.keyPressed(input); } private void fillSelection(int mouseX, int mouseY) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java index 34668ef0ca..aa839a3795 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AutoWalk.java @@ -156,22 +156,22 @@ private void unpress() { mc.options.rightKey.setPressed(false); } - private boolean isMovementKey(KeyInput key) { - return mc.options.forwardKey.matchesKey(key) - || mc.options.backKey.matchesKey(key) - || mc.options.leftKey.matchesKey(key) - || mc.options.rightKey.matchesKey(key) - || mc.options.sneakKey.matchesKey(key) - || mc.options.jumpKey.matchesKey(key); + private boolean isMovementKey(KeyInput input) { + return mc.options.forwardKey.matchesKey(input) + || mc.options.backKey.matchesKey(input) + || mc.options.leftKey.matchesKey(input) + || mc.options.rightKey.matchesKey(input) + || mc.options.sneakKey.matchesKey(input) + || mc.options.jumpKey.matchesKey(input); } - private boolean isMovementButton(Click button) { - return mc.options.forwardKey.matchesMouse(button) - || mc.options.backKey.matchesMouse(button) - || mc.options.leftKey.matchesMouse(button) - || mc.options.rightKey.matchesMouse(button) - || mc.options.sneakKey.matchesMouse(button) - || mc.options.jumpKey.matchesMouse(button); + private boolean isMovementButton(Click click) { + return mc.options.forwardKey.matchesMouse(click) + || mc.options.backKey.matchesMouse(click) + || mc.options.leftKey.matchesMouse(click) + || mc.options.rightKey.matchesMouse(click) + || mc.options.sneakKey.matchesMouse(click) + || mc.options.jumpKey.matchesMouse(click); } private void createGoal() { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index 117909f674..cde7f4dfe9 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -38,10 +38,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(Click arg, boolean doubled) { + public boolean mouseClicked(Click click, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (arg.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_MIDDLE && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty() && tooltips.middleClickOpen()) { ItemStack itemStack = focusedSlot.getStack(); if (Utils.hasItems(itemStack) || itemStack.getItem() == Items.ENDER_CHEST) { return Utils.openContainer(focusedSlot.getStack(), contents, false); @@ -56,13 +56,13 @@ public boolean mouseClicked(Click arg, boolean doubled) { } @Override - public boolean mouseReleased(Click arg) { + public boolean mouseReleased(Click click) { return false; } @Override - public boolean keyPressed(KeyInput arg) { - if (arg.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(arg)) { + public boolean keyPressed(KeyInput input) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(input)) { close(); return true; } @@ -70,8 +70,8 @@ public boolean keyPressed(KeyInput arg) { } @Override - public boolean keyReleased(KeyInput arg) { - if (arg.key() == GLFW.GLFW_KEY_ESCAPE) { + public boolean keyReleased(KeyInput input) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE) { close(); return true; } From 422e37a617a57cd889678f4357cf26b32355e183 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sat, 11 Oct 2025 18:02:13 +0100 Subject: [PATCH 23/38] fixes --- .../commands/arguments/BlockPosArgumentType.java | 2 +- .../gui/widgets/pressable/WConfirmedButton.java | 9 +++++---- .../gui/widgets/pressable/WConfirmedMinus.java | 10 ++++++---- .../meteorclient/systems/modules/movement/ClickTP.java | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java b/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java index 72725bbd5f..c9ce16f4de 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java @@ -157,7 +157,7 @@ public DefaultPosArgument(CoordinateArgument x, CoordinateArgument y, Coordinate @Override public Vec3d getPosition(S source) { - Vec3d vec3 = mc.player.getPos(); + Vec3d vec3 = mc.player.getEntityPos(); return new Vec3d(this.x.toAbsoluteCoordinate(vec3.x), this.y.toAbsoluteCoordinate(vec3.y), this.z.toAbsoluteCoordinate(vec3.z)); } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java index 1aec3b10c4..69735493d3 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; import meteordevelopment.meteorclient.gui.renderer.packer.GuiTexture; +import net.minecraft.client.gui.Click; public abstract class WConfirmedButton extends WButton { @@ -18,8 +19,8 @@ public WConfirmedButton(String text, String confirmText, GuiTexture texture) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - boolean pressed = super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + boolean pressed = super.onMouseClicked(click, used); if (!pressed) { pressedOnce = false; invalidate(); @@ -28,8 +29,8 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (pressed && pressedOnce) super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (pressed && pressedOnce) super.onMouseReleased(click); pressedOnce = pressed; invalidate(); return pressed = false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java index 7bebb271ac..5ed110d4f1 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java @@ -5,12 +5,14 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; +import net.minecraft.client.gui.Click; + public class WConfirmedMinus extends WMinus { protected boolean pressedOnce = false; @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - boolean pressed = super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + boolean pressed = super.onMouseClicked(click, used); if (!pressed) { pressedOnce = false; } @@ -18,8 +20,8 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (pressed && pressedOnce) super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (pressed && pressedOnce) super.onMouseReleased(click); pressedOnce = pressed; return pressed = false; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java index e6884fb40c..469cae55d5 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java @@ -74,7 +74,7 @@ private void onTick(TickEvent.Post event) { double height = shape.isEmpty() ? 1 : shape.getMax(Direction.Axis.Y); Vec3d newPos = new Vec3d(pos.getX() + 0.5 + side.getOffsetX(), pos.getY() + height, pos.getZ() + 0.5 + side.getOffsetZ()); - int packetsRequired = (int) Math.ceil(mc.player.getPos().distanceTo(newPos) / 10) - 1; // subtract 1 to account for the final packet with movement + int packetsRequired = (int) Math.ceil(mc.player.getEntityPos().distanceTo(newPos) / 10) - 1; // subtract 1 to account for the final packet with movement if (packetsRequired > 19) packetsRequired = 0; for (int packetNumber = 0; packetNumber < (packetsRequired); packetNumber++) { From 23a68394cc30ef7453d9f63c9a184cd07b45766f Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sat, 11 Oct 2025 18:35:44 +0100 Subject: [PATCH 24/38] Fix WTextBox; update dependencies --- gradle.properties | 10 +++++----- .../meteorclient/gui/widgets/input/WTextBox.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3775bcc1cc..ef3d21c96e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.configuration-cache=true minecraft_version=1.21.10 yarn_mappings=1.21.10+build.1 loader_version=0.17.2 -fapi_version=0.134.1+1.21.10 +fapi_version=0.135.0+1.21.10 # Mod Properties maven_group=meteordevelopment @@ -17,13 +17,13 @@ archives_base_name=meteor-client baritone_version=1.21.5 # Sodium (https://github.com/CaffeineMC/sodium-fabric) -sodium_version=mc1.21.9-0.7.0-fabric +sodium_version=mc1.21.10-0.7.2-fabric # Lithium (https://github.com/CaffeineMC/lithium-fabric) -lithium_version=mc1.21.9-0.19.0-fabric +lithium_version=mc1.21.10-0.20.0-fabric # Iris (https://github.com/IrisShaders/Iris) -iris_version=1.9.0+1.21.6-fabric +iris_version=1.9.6+1.21.10-fabric # ModMenu (https://github.com/TerraformersMC/ModMenu) modmenu_version=15.0.0 @@ -44,7 +44,7 @@ reflections_version=0.10.2 netty_version=4.1.118.Final # ViaFabricPlus (https://github.com/ViaVersion/ViaFabricPlus) -viafabricplus_version=4.2.4 +viafabricplus_version=4.3.1 # WaybackAuthLib (https://github.com/FlorianMichael/WaybackAuthLib) waybackauthlib_version=1.0.1 diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java index 8b0f135c2c..3cfb713c9c 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java @@ -511,7 +511,7 @@ public boolean onCharTyped(CharInput input) { if (filter.filter(text, input.codepoint())) { clearSelection(); - text = text.substring(0, cursor) + input + text.substring(cursor); + text = text.substring(0, cursor) + input.asString() + text.substring(cursor); cursor++; resetSelection(); From 33af759aae1e220d185d63dea41b93304880dae8 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sat, 11 Oct 2025 18:59:52 +0100 Subject: [PATCH 25/38] Update KeyEvent and MouseClickEvent with some helper methods --- .../meteorclient/events/meteor/KeyEvent.java | 8 ++++++++ .../meteorclient/events/meteor/MouseClickEvent.java | 10 +++++++--- .../meteorclient/mixin/MouseMixin.java | 2 +- .../meteorclient/settings/KeybindSetting.java | 6 +++--- .../meteorclient/systems/macros/Macros.java | 4 ++-- .../meteorclient/systems/modules/Modules.java | 8 ++++---- .../meteorclient/systems/modules/combat/Offhand.java | 2 +- .../meteorclient/systems/modules/movement/GUIMove.java | 4 ++-- .../systems/modules/player/MiddleClickExtra.java | 2 +- .../meteorclient/systems/modules/render/Freecam.java | 4 ++-- .../meteorclient/systems/modules/render/Zoom.java | 2 +- 11 files changed, 32 insertions(+), 20 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index 5c4ba5940b..e569d9f605 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -21,4 +21,12 @@ public static KeyEvent get(KeyInput input, KeyAction action) { INSTANCE.action = action; return INSTANCE; } + + public int key() { + return INSTANCE.input.key(); + } + + public int modifiers() { + return INSTANCE.input.modifiers(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java index 3519ab6c0a..9c5d679a04 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java @@ -13,15 +13,19 @@ public class MouseClickEvent extends Cancellable { private static final MouseClickEvent INSTANCE = new MouseClickEvent(); - public MouseInput input; public Click click; + public MouseInput input; public KeyAction action; - public static MouseClickEvent get(MouseInput mouseInput, Click click, KeyAction action) { + public static MouseClickEvent get(Click click, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.input = mouseInput; INSTANCE.click = click; + INSTANCE.input = click.buttonInfo(); INSTANCE.action = action; return INSTANCE; } + + public int button() { + return INSTANCE.input.button(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java index 7747739299..692a21f29a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java @@ -41,7 +41,7 @@ private void onMouseButton(long window, MouseInput mouseInput, int action, Callb Input.setButtonState(mouseInput.button(), action != GLFW_RELEASE); Click click = new Click(getScaledX(client.getWindow()), getScaledY(client.getWindow()), mouseInput); - if (MeteorClient.EVENT_BUS.post(MouseClickEvent.get(mouseInput, click, KeyAction.get(action))).isCancelled()) ci.cancel(); + if (MeteorClient.EVENT_BUS.post(MouseClickEvent.get(click, KeyAction.get(action))).isCancelled()) ci.cancel(); } @Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true) diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java index c248d7580d..f0493cddfe 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -32,13 +32,13 @@ public KeybindSetting(String name, String description, Keybind defaultValue, Con @EventHandler(priority = EventPriority.HIGHEST) private void onKeyBinding(KeyEvent event) { if (widget == null) return; - if (event.action == KeyAction.Press && event.input.key() == GLFW.GLFW_KEY_ESCAPE && widget.onClear()) event.cancel(); - else if (event.action == KeyAction.Release && widget.onAction(true, event.input.key(), event.input.modifiers())) event.cancel(); + if (event.action == KeyAction.Press && event.key() == GLFW.GLFW_KEY_ESCAPE && widget.onClear()) event.cancel(); + else if (event.action == KeyAction.Release && widget.onAction(true, event.key(), event.modifiers())) event.cancel(); } @EventHandler(priority = EventPriority.HIGHEST) private void onMouseClickBinding(MouseClickEvent event) { - if (event.action == KeyAction.Press && widget != null && widget.onAction(false, event.input.button(), 0)) event.cancel(); + if (event.action == KeyAction.Press && widget != null && widget.onAction(false, event.button(), 0)) event.cancel(); } @EventHandler(priority = EventPriority.HIGH) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java b/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java index 924c0fcfc6..6a137305de 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/macros/Macros.java @@ -62,7 +62,7 @@ private void onKey(KeyEvent event) { if (event.action == KeyAction.Release) return; for (Macro macro : macros) { - if (macro.onAction(true, event.input.key(), event.input.modifiers())) return; + if (macro.onAction(true, event.key(), event.modifiers())) return; } } @@ -71,7 +71,7 @@ private void onMouse(MouseClickEvent event) { if (event.action == KeyAction.Release) return; for (Macro macro : macros) { - if (macro.onAction(false, event.input.button(), 0)) return; + if (macro.onAction(false, event.button(), 0)) return; } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index feae35f443..1a08e8b326 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -213,12 +213,12 @@ public boolean isBinding() { @EventHandler(priority = EventPriority.HIGHEST) private void onKeyBinding(KeyEvent event) { - if (event.action == KeyAction.Release && onBinding(true, event.input.key(), event.input.modifiers())) event.cancel(); + if (event.action == KeyAction.Release && onBinding(true, event.key(), event.modifiers())) event.cancel(); } @EventHandler(priority = EventPriority.HIGHEST) private void onButtonBinding(MouseClickEvent event) { - if (event.action == KeyAction.Release && onBinding(false, event.input.button(), 0)) event.cancel(); + if (event.action == KeyAction.Release && onBinding(false, event.button(), 0)) event.cancel(); } private boolean onBinding(boolean isKey, int value, int modifiers) { @@ -250,13 +250,13 @@ else if (value == GLFW.GLFW_KEY_ESCAPE) { @EventHandler(priority = EventPriority.HIGH) private void onKey(KeyEvent event) { if (event.action == KeyAction.Repeat) return; - onAction(true, event.input.key(), event.input.modifiers(), event.action == KeyAction.Press); + onAction(true, event.key(), event.modifiers(), event.action == KeyAction.Press); } @EventHandler(priority = EventPriority.HIGH) private void onMouseClick(MouseClickEvent event) { if (event.action == KeyAction.Repeat) return; - onAction(false, event.input.button(), 0, event.action == KeyAction.Press); + onAction(false, event.button(), 0, event.action == KeyAction.Press); } private void onAction(boolean isKey, int value, int modifiers, boolean isPress) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java index f19a7d139b..2e4609ea49 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java @@ -240,7 +240,7 @@ else if ((isClicking || !autoTotem.isLocked() && !item.isOffhand())) { @EventHandler private void onMouseClick(MouseClickEvent event) { // Detects if the User is right-clicking - isClicking = mc.currentScreen == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.input.button() == GLFW_MOUSE_BUTTON_RIGHT; + isClicking = mc.currentScreen == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.button() == GLFW_MOUSE_BUTTON_RIGHT; } private boolean usableItem() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java index 1bda019fe0..4ee40cb9f9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java @@ -112,12 +112,12 @@ public boolean disableArrows() { @EventHandler private void onKey(KeyEvent event) { - onInput(event.input.key(), event.action); + onInput(event.key(), event.action); } @EventHandler private void onButton(MouseClickEvent event) { - onInput(event.input.button(), event.action); + onInput(event.button(), event.action); } private void onInput(int key, KeyAction action) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java index 7791ef1a41..1b01859621 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java @@ -90,7 +90,7 @@ public void onDeactivate() { @EventHandler private void onMouseClick(MouseClickEvent event) { - if (event.action != KeyAction.Press || event.input.button() != GLFW_MOUSE_BUTTON_MIDDLE || mc.currentScreen != null) return; + if (event.action != KeyAction.Press || event.button() != GLFW_MOUSE_BUTTON_MIDDLE || mc.currentScreen != null) return; if (mode.get() == Mode.AddFriend) { if (mc.targetedEntity == null) return; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java index 624f1bd2a3..a64c96a80a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java @@ -284,14 +284,14 @@ public void onKey(KeyEvent event) { if (Input.isKeyPressed(GLFW.GLFW_KEY_F3)) return; if (checkGuiMove()) return; - if (onInput(event.input.key(), event.action)) event.cancel(); + if (onInput(event.key(), event.action)) event.cancel(); } @EventHandler(priority = EventPriority.HIGH) private void onMouseClick(MouseClickEvent event) { if (checkGuiMove()) return; - if (onInput(event.input.button(), event.action)) event.cancel(); + if (onInput(event.button(), event.action)) event.cancel(); } private boolean onInput(int key, KeyAction action) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java index fc24939649..65d6dc066d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java @@ -111,7 +111,7 @@ public void onDeactivate() { @EventHandler public void onKeyPressed(KeyEvent event) { - if (event.input.key() != GLFW.GLFW_KEY_F1) return; + if (event.key() != GLFW.GLFW_KEY_F1) return; hudManualToggled = true; } From 6cd7b5b2fc05fb9a91a67bb772130ae27b3a1ef2 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sun, 12 Oct 2025 00:31:16 +0100 Subject: [PATCH 26/38] redo --- .../meteorclient/utils/misc/Pool.java | 4 ++-- .../meteorclient/utils/misc/Producer.java | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java index 581c8678bf..ce86ed73c3 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java @@ -14,8 +14,8 @@ public final class Pool { private final Queue items = new ArrayDeque<>(); private final Supplier producer; - public Pool(Producer producer) { - this.producer = producer::create; + public Pool(Supplier producer) { + this.producer = producer; } public synchronized T get() { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java deleted file mode 100644 index 64e107f7ad..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.utils.misc; - -public interface Producer { - T create(); -} From f0c7a17660145d2ae89afc58c8f555f6954a24ea Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Sun, 12 Oct 2025 12:40:37 +0200 Subject: [PATCH 27/38] Fix Shader ESP and Chams --- .../meteorclient/mixin/EntityMixin.java | 10 -- .../mixin/EntityRendererMixin.java | 7 -- .../ShadowPiecesCommandRendererMixin.java | 24 ++++ .../mixin/WorldRendererMixin.java | 91 ++++++++++++--- .../utils/OutlineRenderCommandQueue.java | 105 ++++++++++++++++++ .../CustomOutlineVertexConsumerProvider.java | 68 ++++++++++++ .../utils/render/SimpleBlockRenderer.java | 25 +---- ...rapperImmediateVertexConsumerProvider.java | 34 ++++++ .../render/postprocess/PostProcessShader.java | 9 +- .../postprocess/PostProcessShaders.java | 7 -- src/main/resources/meteor-client.mixins.json | 3 +- 11 files changed, 315 insertions(+), 68 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.java diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java index 85933cd36a..ebd0867365 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java @@ -23,8 +23,6 @@ import meteordevelopment.meteorclient.systems.modules.world.HighwayBuilder; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; -import meteordevelopment.meteorclient.utils.render.color.Color; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.client.render.Camera; @@ -141,14 +139,6 @@ else if ((Object) this instanceof LivingEntity) { } } - @Inject(method = "getTeamColorValue", at = @At("HEAD"), cancellable = true) - private void onGetTeamColorValue(CallbackInfoReturnable info) { - if (PostProcessShaders.rendering) { - Color color = Modules.get().get(ESP.class).getColor((Entity) (Object) this); - if (color != null) info.setReturnValue(color.getPacked()); - } - } - @ModifyExpressionValue(method = "getVelocityMultiplier", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;getBlock()Lnet/minecraft/block/Block;")) private Block modifyVelocityMultiplierBlock(Block original) { if ((Object) this != mc.player) return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 74dc547380..99eb82ee2f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -14,7 +14,6 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.entity.EntityUtils; import meteordevelopment.meteorclient.utils.render.color.Color; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.state.EntityRenderState; @@ -38,7 +37,6 @@ public abstract class EntityRendererMixin cir) { - if (PostProcessShaders.rendering) cir.setReturnValue(null); if (Modules.get().get(NoRender.class).noNametags()) cir.setReturnValue(null); if (!(entity instanceof PlayerEntity player)) return; if (Modules.get().get(Nametags.class).playerNametags() && !(EntityUtils.getGameMode(player) == null && Modules.get().get(Nametags.class).excludeBots())) @@ -78,11 +76,6 @@ private void onGetOutlineColor(T entity, S state, float tickProgress, CallbackIn @Inject(method = "updateShadow(Lnet/minecraft/entity/Entity;Lnet/minecraft/client/render/entity/state/EntityRenderState;)V", at = @At("HEAD"), cancellable = true) private void updateShadow(Entity entity, EntityRenderState renderState, CallbackInfo ci) { - if (PostProcessShaders.rendering) { - ci.cancel(); - return; - } - if (Modules.get().get(NoRender.class).noDeadEntities() && entity instanceof LivingEntity && renderState instanceof LivingEntityRenderState livingEntityRenderState && diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java new file mode 100644 index 0000000000..05fb3826e2 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java @@ -0,0 +1,24 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixin; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.command.BatchingRenderCommandQueue; +import net.minecraft.client.render.command.ShadowPiecesCommandRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ShadowPiecesCommandRenderer.class) +public abstract class ShadowPiecesCommandRendererMixin { + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void meteor$onRender(BatchingRenderCommandQueue queue, VertexConsumerProvider.Immediate vertexConsumers, CallbackInfo info) { + if (queue.getShadowPiecesCommands().isEmpty()) { + info.cancel(); + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 21bc407fac..95f456f29f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -9,20 +9,33 @@ import com.mojang.blaze3d.buffers.GpuBufferSlice; import it.unimi.dsi.fastutil.Stack; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; import meteordevelopment.meteorclient.mixininterface.IWorldRenderer; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BlockSelection; +import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import meteordevelopment.meteorclient.utils.OutlineRenderCommandQueue; +import meteordevelopment.meteorclient.utils.render.NoopImmediateVertexConsumerProvider; +import meteordevelopment.meteorclient.utils.render.NoopOutlineVertexConsumerProvider; +import meteordevelopment.meteorclient.utils.render.WrapperImmediateVertexConsumerProvider; +import meteordevelopment.meteorclient.utils.render.color.Color; +import meteordevelopment.meteorclient.utils.render.postprocess.EntityShader; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.render.*; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.command.RenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderManager; import net.minecraft.client.render.state.OutlineRenderState; import net.minecraft.client.render.state.WeatherRenderState; import net.minecraft.client.render.state.WorldBorderRenderState; +import net.minecraft.client.render.state.WorldRenderState; import net.minecraft.client.util.Handle; import net.minecraft.client.util.ObjectAllocator; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; import net.minecraft.util.math.Vec3d; import org.joml.Matrix4f; import org.joml.Vector4f; @@ -36,6 +49,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.function.Function; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + @Mixin(WorldRenderer.class) public abstract class WorldRendererMixin implements IWorldRenderer { @Inject(method = "checkEmpty", at = @At("HEAD"), cancellable = true) @@ -87,31 +104,68 @@ private void onRenderHead(ObjectAllocator allocator, PostProcessShaders.beginRender(); } - /* - todo Entity rendering is batched in pushEntityRenders before they are all rendered at once by calling - net.minecraft.client.render.entity.command.EntityRenderDispatcher.render - Our renders need to be rewritten + @Unique + private final OutlineRenderCommandQueue outlineRenderCommandQueue = new OutlineRenderCommandQueue(); + + @Unique + private VertexConsumerProvider provider; - @Inject(method = "renderEntity", at = @At("HEAD")) - private void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - draw(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, PostProcessShaders.CHAMS, Color.WHITE); - draw(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, PostProcessShaders.ENTITY_OUTLINE, Modules.get().get(ESP.class).getColor(entity)); + @Unique + private RenderDispatcher renderDispatcher; + + @Inject(method = "pushEntityRenders", at = @At("TAIL")) + private void onPushEntityRenders(MatrixStack matrices, WorldRenderState worldState, OrderedRenderCommandQueue queue, CallbackInfo info) { + if (renderDispatcher == null) { + renderDispatcher = new RenderDispatcher( + outlineRenderCommandQueue, + mc.getBlockRenderManager(), + new WrapperImmediateVertexConsumerProvider(() -> provider), + mc.getAtlasManager(), + NoopOutlineVertexConsumerProvider.INSTANCE, + NoopImmediateVertexConsumerProvider.INSTANCE, + mc.textRenderer + ); + } + + draw(worldState, matrices, PostProcessShaders.CHAMS, entity -> Color.WHITE); + draw(worldState, matrices, PostProcessShaders.ENTITY_OUTLINE, entity -> Modules.get().get(ESP.class).getColor(entity)); } @Unique - private void draw(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, VertexConsumerProvider vertexConsumers, MatrixStack matrices, EntityShader shader, Color color) { - if (shader.shouldDraw(entity) && !PostProcessShaders.isCustom(vertexConsumers) && color != null) { - meteor$pushEntityOutlineFramebuffer(shader.framebuffer); - PostProcessShaders.rendering = true; + private void draw(WorldRenderState worldState, MatrixStack matrices, EntityShader shader, Function colorGetter) { + var camera = worldState.cameraRenderState.pos; + var empty = true; + + for (var state : worldState.entityRenderStates) { + if (!shader.shouldDraw(((IEntityRenderState) state).meteor$getEntity())) continue; - shader.vertexConsumerProvider.setColor(color.getPacked()); - renderEntity(entity, cameraX, cameraY, cameraZ, tickDelta, matrices, shader.vertexConsumerProvider); + var color = colorGetter.apply(((IEntityRenderState) state).meteor$getEntity()); + if (color == null) continue; + outlineRenderCommandQueue.setColor(color); - PostProcessShaders.rendering = false; - meteor$popEntityOutlineFramebuffer(); + var renderer = entityRenderManager.getRenderer(state); + var offset = renderer.getPositionOffset(state); + + matrices.push(); + matrices.translate(state.x - camera.x + offset.x, state.y - camera.y + offset.y, state.z - camera.z + offset.z); + renderer.render(state, matrices, outlineRenderCommandQueue, worldState.cameraRenderState); + matrices.pop(); + + empty = false; } + + if (empty) + return; + + meteor$pushEntityOutlineFramebuffer(shader.framebuffer); + provider = shader.vertexConsumerProvider; + + renderDispatcher.render(); + outlineRenderCommandQueue.onNextFrame(); + + provider = null; + meteor$popEntityOutlineFramebuffer(); } - */ @Inject(method = "method_62214", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;draw()V")) private void onRender(CallbackInfo ci) { @@ -132,6 +186,9 @@ private void onResized(int width, int height, CallbackInfo info) { @Final private DefaultFramebufferSet framebufferSet; + @Shadow + @Final + private EntityRenderManager entityRenderManager; @Unique private Stack framebufferStack; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java new file mode 100644 index 0000000000..83e767dda2 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java @@ -0,0 +1,105 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils; + +import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.block.BlockState; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.model.Model; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.block.MovingBlockRenderState; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.entity.state.EntityHitboxAndView; +import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.item.ItemRenderState; +import net.minecraft.client.render.model.BakedQuad; +import net.minecraft.client.render.model.BlockStateModel; +import net.minecraft.client.render.state.CameraRenderState; +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemDisplayContext; +import net.minecraft.text.OrderedText; +import net.minecraft.text.Text; +import net.minecraft.util.math.Vec3d; +import org.jetbrains.annotations.Nullable; +import org.joml.Quaternionf; + +import java.util.List; + +public class OutlineRenderCommandQueue extends OrderedRenderCommandQueueImpl { + private int color; + + public void setColor(Color color) { + this.color = color.getPacked(); + } + + // OrderedRenderCommandQueueImpl + + @Override + public void submitDebugHitbox(MatrixStack matrices, EntityRenderState renderState, EntityHitboxAndView debugHitbox) { + } + + @Override + public void submitShadowPieces(MatrixStack matrices, float shadowRadius, List shadowPieces) { + } + + @Override + public void submitLabel(MatrixStack matrices, @Nullable Vec3d nameLabelPos, int y, Text label, boolean notSneaking, int light, double squaredDistanceToCamera, CameraRenderState cameraState) { + } + + @Override + public void submitText(MatrixStack matrices, float x, float y, OrderedText text, boolean dropShadow, TextRenderer.TextLayerType layerType, int light, int color, int backgroundColor, int outlineColor) { + } + + @Override + public void submitFire(MatrixStack matrices, EntityRenderState renderState, Quaternionf rotation) { + } + + @Override + public void submitLeash(MatrixStack matrices, EntityRenderState.LeashData leashData) { + } + + @Override + public void submitModel(Model model, S state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay) { + super.submitModel(model, state, matrices, renderLayer, light, overlay, color, sprite, 0, crumblingOverlay); + } + + @Override + public void submitModelPart(ModelPart part, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, @Nullable Sprite sprite, boolean sheeted, boolean hasGlint, int tintedColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int i) { + super.submitModelPart(part, matrices, renderLayer, light, overlay, sprite, sheeted, hasGlint, color, crumblingOverlay, i); + } + + @Override + public void submitBlock(MatrixStack matrices, BlockState state, int light, int overlay, int outlineColor) { + } + + @Override + public void submitMovingBlock(MatrixStack matrices, MovingBlockRenderState state) { + } + + @Override + public void submitBlockStateModel(MatrixStack matrices, RenderLayer renderLayer, BlockStateModel model, float r, float g, float b, int light, int overlay, int outlineColor) { + r = Color.toRGBAR(color) / 255f; + g = Color.toRGBAG(color) / 255f; + b = Color.toRGBAB(color) / 255f; + + super.submitBlockStateModel(matrices, renderLayer, model, r, g, b, light, overlay, 0); + } + + @Override + public void submitItem(MatrixStack matrices, ItemDisplayContext displayContext, int light, int overlay, int outlineColors, int[] tintLayers, List quads, RenderLayer renderLayer, ItemRenderState.Glint glintType) { + } + + @Override + public void submitCustom(MatrixStack matrices, RenderLayer renderLayer, Custom customRenderer) { + } + + @Override + public void submitCustom(LayeredCustom customRenderer) { + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java new file mode 100644 index 0000000000..6fa3658c2c --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java @@ -0,0 +1,68 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.util.BufferAllocator; + +public class CustomOutlineVertexConsumerProvider implements VertexConsumerProvider { + private final VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(new BufferAllocator(1536)); + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + if (layer.isOutline()) { + return new CustomVertexConsumer(this.immediate.getBuffer(layer)); + } + + var optional = layer.getAffectedOutline(); + if (optional.isPresent()) { + return new CustomVertexConsumer(this.immediate.getBuffer(optional.get())); + } + + throw new IllegalStateException("Can't render an outline for this rendertype!"); + } + + public void draw() { + immediate.draw(); + } + + private record CustomVertexConsumer(VertexConsumer consumer) implements VertexConsumer { + @Override + public VertexConsumer vertex(float x, float y, float z) { + consumer.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + consumer.color(red, green, blue, alpha); + return this; + } + + @Override + public VertexConsumer texture(float u, float v) { + consumer.texture(u, v); + return this; + } + + @Override + public VertexConsumer overlay(int u, int v) { + return this; + } + + @Override + public VertexConsumer light(int u, int v) { + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + return this; + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 3ad71bc905..b8e33df7bc 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -38,18 +38,18 @@ public abstract class SimpleBlockRenderer { private static final OrderedRenderCommandQueueImpl renderCommandQueue = new OrderedRenderCommandQueueImpl(); + private static VertexConsumerProvider provider; + private static final RenderDispatcher renderDispatcher = new RenderDispatcher( renderCommandQueue, mc.getBlockRenderManager(), - new WrapperImmediateVertexConsumerProvider(), + new WrapperImmediateVertexConsumerProvider(() -> provider), mc.getAtlasManager(), NoopOutlineVertexConsumerProvider.INSTANCE, NoopImmediateVertexConsumerProvider.INSTANCE, mc.textRenderer ); - private static VertexConsumerProvider provider; - private SimpleBlockRenderer() {} public static void renderWithBlockEntity(BlockEntity blockEntity, float tickDelta, IVertexConsumerProvider vertexConsumerProvider) { @@ -113,23 +113,4 @@ private static void renderQuads(List quads, float offsetX, float offs } } } - - private static class WrapperImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate { - private WrapperImmediateVertexConsumerProvider() { - super(null, null); - } - - @Override - public VertexConsumer getBuffer(RenderLayer layer) { - return provider.getBuffer(layer); - } - - @Override - public void draw() { - } - - @Override - public void draw(RenderLayer layer) { - } - } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.java new file mode 100644 index 0000000000..20d73eb8d4 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.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.utils.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; + +import java.util.function.Supplier; + +public class WrapperImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate { + private final Supplier supplier; + + public WrapperImmediateVertexConsumerProvider(Supplier supplier) { + super(null, null); + this.supplier = supplier; + } + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + return supplier.get().getBuffer(layer); + } + + @Override + public void draw() { + } + + @Override + public void draw(RenderLayer layer) { + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java index 2638ebc237..5a599c088e 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -6,10 +6,10 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.renderer.FullScreenRenderer; import meteordevelopment.meteorclient.renderer.MeshRenderer; +import meteordevelopment.meteorclient.utils.render.CustomOutlineVertexConsumerProvider; import net.minecraft.client.gl.DynamicUniformStorage; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gl.SimpleFramebuffer; -import net.minecraft.client.render.OutlineVertexConsumerProvider; import net.minecraft.entity.Entity; import java.nio.ByteBuffer; @@ -18,13 +18,14 @@ import static org.lwjgl.glfw.GLFW.glfwGetTime; public abstract class PostProcessShader { - public OutlineVertexConsumerProvider vertexConsumerProvider; + public CustomOutlineVertexConsumerProvider vertexConsumerProvider; public Framebuffer framebuffer; protected RenderPipeline pipeline; public void init(RenderPipeline pipeline) { - vertexConsumerProvider = new OutlineVertexConsumerProvider(); - framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true); + if (vertexConsumerProvider == null) vertexConsumerProvider = new CustomOutlineVertexConsumerProvider(); + if (framebuffer == null) framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true); + this.pipeline = pipeline; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java index 5834151e2c..ab013c6a67 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java @@ -1,7 +1,6 @@ package meteordevelopment.meteorclient.utils.render.postprocess; import meteordevelopment.meteorclient.utils.PreInit; -import net.minecraft.client.render.VertexConsumerProvider; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -10,8 +9,6 @@ public class PostProcessShaders { public static EntityShader ENTITY_OUTLINE; public static PostProcessShader STORAGE_OUTLINE; - public static boolean rendering; - private PostProcessShaders() {} @PreInit @@ -39,8 +36,4 @@ public static void onResized(int width, int height) { ENTITY_OUTLINE.onResized(width, height); STORAGE_OUTLINE.onResized(width, height); } - - public static boolean isCustom(VertexConsumerProvider vcp) { - return vcp == CHAMS.vertexConsumerProvider || vcp == ENTITY_OUTLINE.vertexConsumerProvider; - } } diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index ae47e76179..0dfffb7270 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -80,8 +80,8 @@ "EntityAccessor", "EntityBucketItemAccessor", "EntityMixin", - "EntityRenderManagerMixin", "EntityRendererMixin", + "EntityRenderManagerMixin", "EntityRenderStateMixin", "EntityTrackingSectionAccessor", "EntityVelocityUpdateS2CPacketAccessor", @@ -162,6 +162,7 @@ "ServerPlayerEntityMixin", "ServerResourcePackLoaderMixin", "ShaderLoaderMixin", + "ShadowPiecesCommandRendererMixin", "ShulkerBoxScreenHandlerAccessor", "SimpleEntityLookupAccessor", "SimpleOptionMixin", From 5e5e0b640b37bbdfa6b36106579ad31dacf90e6d Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Sun, 12 Oct 2025 16:42:12 +0200 Subject: [PATCH 28/38] Fix Shader ESP and Chams 2 --- .../utils/OutlineRenderCommandQueue.java | 136 ++++++++++-------- .../CustomOutlineVertexConsumerProvider.java | 2 +- .../resources/meteor-client.accesswidener | 2 + 3 files changed, 79 insertions(+), 61 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java index 83e767dda2..8376c08e80 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java @@ -12,6 +12,7 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.block.MovingBlockRenderState; +import net.minecraft.client.render.command.BatchingRenderCommandQueue; import net.minecraft.client.render.command.ModelCommandRenderer; import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; import net.minecraft.client.render.entity.state.EntityHitboxAndView; @@ -33,73 +34,88 @@ public class OutlineRenderCommandQueue extends OrderedRenderCommandQueueImpl { private int color; + private int[] tints; public void setColor(Color color) { this.color = color.getPacked(); } - // OrderedRenderCommandQueueImpl - - @Override - public void submitDebugHitbox(MatrixStack matrices, EntityRenderState renderState, EntityHitboxAndView debugHitbox) { - } - - @Override - public void submitShadowPieces(MatrixStack matrices, float shadowRadius, List shadowPieces) { - } - - @Override - public void submitLabel(MatrixStack matrices, @Nullable Vec3d nameLabelPos, int y, Text label, boolean notSneaking, int light, double squaredDistanceToCamera, CameraRenderState cameraState) { - } - @Override - public void submitText(MatrixStack matrices, float x, float y, OrderedText text, boolean dropShadow, TextRenderer.TextLayerType layerType, int light, int color, int backgroundColor, int outlineColor) { + public BatchingRenderCommandQueue getBatchingQueue(int i) { + return batchingQueues.computeIfAbsent(i, order -> new OutlineBatchingRenderCommandQueue(this)); } - @Override - public void submitFire(MatrixStack matrices, EntityRenderState renderState, Quaternionf rotation) { - } - - @Override - public void submitLeash(MatrixStack matrices, EntityRenderState.LeashData leashData) { - } - - @Override - public void submitModel(Model model, S state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay) { - super.submitModel(model, state, matrices, renderLayer, light, overlay, color, sprite, 0, crumblingOverlay); - } - - @Override - public void submitModelPart(ModelPart part, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, @Nullable Sprite sprite, boolean sheeted, boolean hasGlint, int tintedColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int i) { - super.submitModelPart(part, matrices, renderLayer, light, overlay, sprite, sheeted, hasGlint, color, crumblingOverlay, i); - } - - @Override - public void submitBlock(MatrixStack matrices, BlockState state, int light, int overlay, int outlineColor) { - } - - @Override - public void submitMovingBlock(MatrixStack matrices, MovingBlockRenderState state) { - } - - @Override - public void submitBlockStateModel(MatrixStack matrices, RenderLayer renderLayer, BlockStateModel model, float r, float g, float b, int light, int overlay, int outlineColor) { - r = Color.toRGBAR(color) / 255f; - g = Color.toRGBAG(color) / 255f; - b = Color.toRGBAB(color) / 255f; - - super.submitBlockStateModel(matrices, renderLayer, model, r, g, b, light, overlay, 0); - } - - @Override - public void submitItem(MatrixStack matrices, ItemDisplayContext displayContext, int light, int overlay, int outlineColors, int[] tintLayers, List quads, RenderLayer renderLayer, ItemRenderState.Glint glintType) { - } - - @Override - public void submitCustom(MatrixStack matrices, RenderLayer renderLayer, Custom customRenderer) { - } - - @Override - public void submitCustom(LayeredCustom customRenderer) { + private class OutlineBatchingRenderCommandQueue extends BatchingRenderCommandQueue { + public OutlineBatchingRenderCommandQueue(OrderedRenderCommandQueueImpl orderedQueueImpl) { + super(orderedQueueImpl); + } + + @Override + public void submitDebugHitbox(MatrixStack matrices, EntityRenderState renderState, EntityHitboxAndView debugHitbox) { + } + + @Override + public void submitShadowPieces(MatrixStack matrices, float shadowRadius, List shadowPieces) { + } + + @Override + public void submitLabel(MatrixStack matrices, @Nullable Vec3d nameLabelPos, int y, Text label, boolean notSneaking, int light, double squaredDistanceToCamera, CameraRenderState cameraState) { + } + + @Override + public void submitText(MatrixStack matrices, float x, float y, OrderedText text, boolean dropShadow, TextRenderer.TextLayerType layerType, int light, int color, int backgroundColor, int outlineColor) { + } + + @Override + public void submitFire(MatrixStack matrices, EntityRenderState renderState, Quaternionf rotation) { + } + + @Override + public void submitLeash(MatrixStack matrices, EntityRenderState.LeashData leashData) { + } + + @Override + public void submitModel(Model model, S state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay) { + super.submitModel(model, state, matrices, renderLayer, light, overlay, color, sprite, 0, crumblingOverlay); + } + + @Override + public void submitModelPart(ModelPart part, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, @Nullable Sprite sprite, boolean sheeted, boolean hasGlint, int tintedColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int i) { + super.submitModelPart(part, matrices, renderLayer, light, overlay, sprite, sheeted, hasGlint, color, crumblingOverlay, i); + } + + @Override + public void submitBlock(MatrixStack matrices, BlockState state, int light, int overlay, int outlineColor) { + } + + @Override + public void submitMovingBlock(MatrixStack matrices, MovingBlockRenderState state) { + } + + @Override + public void submitBlockStateModel(MatrixStack matrices, RenderLayer renderLayer, BlockStateModel model, float r, float g, float b, int light, int overlay, int outlineColor) { + r = Color.toRGBAR(color) / 255f; + g = Color.toRGBAG(color) / 255f; + b = Color.toRGBAB(color) / 255f; + + super.submitBlockStateModel(matrices, renderLayer, model, r, g, b, light, overlay, outlineColor); + } + + @Override + public void submitItem(MatrixStack matrices, ItemDisplayContext displayContext, int light, int overlay, int outlineColors, int[] tintLayers, List quads, RenderLayer renderLayer, ItemRenderState.Glint glintType) { + if (tints == null || tints[0] != color) { + tints = new int[] { color, color, color, color }; + } + + super.submitItem(matrices, displayContext, light, overlay, outlineColors, tints, quads, renderLayer, glintType); + } + + @Override + public void submitCustom(MatrixStack matrices, RenderLayer renderLayer, Custom customRenderer) { + } + + @Override + public void submitCustom(LayeredCustom customRenderer) { + } } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java index 6fa3658c2c..d6f16f9a41 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java @@ -24,7 +24,7 @@ public VertexConsumer getBuffer(RenderLayer layer) { return new CustomVertexConsumer(this.immediate.getBuffer(optional.get())); } - throw new IllegalStateException("Can't render an outline for this rendertype!"); + return NoopVertexConsumer.INSTANCE; } public void draw() { diff --git a/src/main/resources/meteor-client.accesswidener b/src/main/resources/meteor-client.accesswidener index 93edd23245..73ee05a94e 100644 --- a/src/main/resources/meteor-client.accesswidener +++ b/src/main/resources/meteor-client.accesswidener @@ -22,6 +22,8 @@ accessible method com/mojang/blaze3d/pipeline/RenderPipeline$Builder withSnip accessible field net/minecraft/client/render/RenderPhase ITEM_ENTITY_TARGET Lnet/minecraft/client/render/RenderPhase$Target; +accessible field net/minecraft/client/render/command/OrderedRenderCommandQueueImpl batchingQueues Lit/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap; + # Auto Fish accessible class net/minecraft/entity/projectile/FishingBobberEntity$State accessible field net/minecraft/entity/projectile/FishingBobberEntity state Lnet/minecraft/entity/projectile/FishingBobberEntity$State; From 8e35731aab3360fd18d06696ee2d10f33c085271 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Sun, 12 Oct 2025 22:20:44 +0100 Subject: [PATCH 29/38] fixes --- .../gui/screens/ContainerInventoryScreen.java | 14 ++++++++------ .../mixin/HandledScreenMixin.java | 19 +++++++++++-------- .../modules/render/BetterTooltips.java | 10 ++++++++-- .../meteorclient/utils/render/PeekScreen.java | 14 ++++++++------ 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java index ebcf6b271c..ba3b56b85e 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java @@ -9,8 +9,10 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.KeyInput; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.BundleContentsComponent; import net.minecraft.entity.player.PlayerInventory; @@ -126,11 +128,11 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click click, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - ItemStack stack = getSelectedItem((int) mouseX, (int) mouseY); - if (tooltips.shouldOpenContents(false, button, 0)) { + ItemStack stack = getSelectedItem((int) click.x(), (int) click.y()); + if (tooltips.shouldOpenContents(click)) { return tooltips.openContent(stack); } @@ -138,15 +140,15 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyInput input) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); ItemStack stack = getSelectedItem((int) mc.mouse.getScaledX(mc.getWindow()), (int) mc.mouse.getScaledY(mc.getWindow())); - if (tooltips.shouldOpenContents(true, keyCode, modifiers)) { + if (tooltips.shouldOpenContents(input)) { return tooltips.openContent(stack); } - if (keyCode == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(keyCode, scanCode)) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(input)) { close(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index 2d4aedabf1..1c4ed21e7c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -10,12 +10,14 @@ import meteordevelopment.meteorclient.systems.modules.misc.InventoryTweaks; import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.systems.modules.render.ItemHighlight; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.input.KeyInput; import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; @@ -29,6 +31,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import static meteordevelopment.meteorclient.MeteorClient.mc; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @Mixin(HandledScreen.class) @@ -84,19 +87,19 @@ private void onInit(CallbackInfo info) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) - private void onMouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY, CallbackInfoReturnable info) { - if (button != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; + private void onMouseDragged(Click click, double offsetX, double offsetY, CallbackInfoReturnable cir) { + if (click.button() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; - Slot slot = getSlotAt(mouseX, mouseY); - if (slot != null && slot.hasStack() && hasShiftDown()) onMouseClick(slot, slot.id, button, SlotActionType.QUICK_MOVE); + Slot slot = getSlotAt(click.x(), click.y()); + if (slot != null && slot.hasStack() && mc.isShiftPressed()) onMouseClick(slot, slot.id, click.button(), SlotActionType.QUICK_MOVE); } // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { + private void mouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(false, button, 0) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(click) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { if (tooltips.openContent(focusedSlot.getStack())) { cir.setReturnValue(true); } @@ -105,10 +108,10 @@ private void mouseClicked(double mouseX, double mouseY, int button, CallbackInfo // Keyboard input for middle click open @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { + private void keyPressed(KeyInput input, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(true, keyCode, modifiers) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(input) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { if (tooltips.openContent(focusedSlot.getStack())) { cir.setReturnValue(true); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java index 6f7345236a..11b39e6c16 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java @@ -23,8 +23,11 @@ import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.tooltip.*; import meteordevelopment.orbit.EventHandler; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.ingame.BookScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.input.AbstractInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.*; import net.minecraft.component.type.SuspiciousStewEffectsComponent.StewEffect; @@ -481,8 +484,11 @@ public boolean openContents() { return (isActive() && openContents.get()) && (!pauseInCreative.get() || !mc.player.isInCreativeMode()); } - public boolean shouldOpenContents(boolean isKey, int keycode, int modifiers) { - return openContents() && openContentsKey.get().matches(isKey, keycode, modifiers); + public boolean shouldOpenContents(AbstractInput input) { + if (input instanceof Click click) return openContents() && openContentsKey.get().matches(click.buttonInfo()); + if (input instanceof KeyInput keyInput) return openContents() && openContentsKey.get().matches(keyInput); + + return false; } public boolean openContent(ItemStack itemStack) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index ece9dc6f53..943bcac6ce 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -10,8 +10,10 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.ShulkerBoxScreen; +import net.minecraft.client.input.KeyInput; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.ShulkerBoxScreenHandler; @@ -31,10 +33,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click click, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(false, button, 0) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(click) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { ItemStack itemStack = focusedSlot.getStack(); return tooltips.openContent(itemStack); } @@ -43,22 +45,22 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click click) { return false; } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyInput input) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(true, keyCode, modifiers) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(input) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { ItemStack itemStack = focusedSlot.getStack(); if (tooltips.openContent(itemStack)) { return true; } } - if (keyCode == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(keyCode, scanCode)) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(input)) { close(); return true; } From c751cbee032b277f79cf5ac39ec3e72de2aeb293 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 15:23:07 +0200 Subject: [PATCH 30/38] Fix BetterTooltips --- .../meteorclient/mixin/GameRendererMixin.java | 19 ++++++ .../CustomBannerGuiElementRenderState.java | 40 ++++++++++++ .../CustomBannerGuiElementRenderer.java | 62 +++++++++++++++++++ .../utils/tooltip/BannerTooltipComponent.java | 61 ++++-------------- .../utils/tooltip/EntityTooltipComponent.java | 4 ++ .../utils/tooltip/MapTooltipComponent.java | 17 +++-- 6 files changed, 145 insertions(+), 58 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java create mode 100644 src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index 6641233904..8b900d6137 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -25,9 +25,12 @@ import meteordevelopment.meteorclient.systems.modules.world.HighwayBuilder; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; +import meteordevelopment.meteorclient.utils.render.CustomBannerGuiElementRenderer; import meteordevelopment.meteorclient.utils.render.NametagUtils; import meteordevelopment.meteorclient.utils.render.RenderUtils; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.render.SpecialGuiElementRenderer; +import net.minecraft.client.render.BufferBuilderStorage; import net.minecraft.client.render.Camera; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.RenderTickCounter; @@ -45,8 +48,12 @@ 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.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.ArrayList; +import java.util.List; + @Mixin(GameRenderer.class) public abstract class GameRendererMixin { @Shadow @@ -78,6 +85,18 @@ public abstract class GameRendererMixin { @Shadow protected abstract void tiltViewWhenHurt(MatrixStack matrices, float tickDelta); + @Shadow + @Final + private BufferBuilderStorage buffers; + + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/render/GuiRenderer;(Lnet/minecraft/client/gui/render/state/GuiRenderState;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/command/RenderDispatcher;Ljava/util/List;)V")) + private List> meteor$addSpecialRenderers(List> list) { + list = new ArrayList<>(list); + list.add(new CustomBannerGuiElementRenderer(buffers.getEntityVertexConsumers(), client.getAtlasManager())); + + return List.of(list.toArray(new SpecialGuiElementRenderer[0])); + } + @Inject(method = "renderWorld", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = {"ldc=hand"})) private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 0) Matrix4f projection, @Local(ordinal = 1) Matrix4f position, @Local(ordinal = 1) float tickDelta, @Local MatrixStack matrixStack) { if (!Utils.canUpdate()) return; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java new file mode 100644 index 0000000000..8507f70584 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java @@ -0,0 +1,40 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.gui.ScreenRect; +import net.minecraft.client.gui.render.state.special.SpecialGuiElementRenderState; +import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; +import net.minecraft.component.type.BannerPatternsComponent; +import net.minecraft.util.DyeColor; +import org.jetbrains.annotations.Nullable; + +public record CustomBannerGuiElementRenderState( + BannerFlagBlockModel flag, + DyeColor baseColor, + BannerPatternsComponent resultBannerPatterns, + int x1, + int y1, + int x2, + int y2, + @Nullable ScreenRect scissorArea, + @Nullable ScreenRect bounds, + float scale +) implements SpecialGuiElementRenderState { + public CustomBannerGuiElementRenderState( + BannerFlagBlockModel bannerFlagBlockModel, + DyeColor color, + BannerPatternsComponent bannerPatterns, + int x1, + int y1, + int x2, + int y2, + @Nullable ScreenRect scissorArea, + float scale + ) { + this(bannerFlagBlockModel, color, bannerPatterns, x1, y1, x2, y2, scissorArea, SpecialGuiElementRenderState.createBounds(x1, y1, x2, y2, scissorArea), scale); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java new file mode 100644 index 0000000000..3cd89cede4 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java @@ -0,0 +1,62 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.render.SpecialGuiElementRenderer; +import net.minecraft.client.gui.render.state.special.BannerResultGuiElementRenderState; +import net.minecraft.client.render.DiffuseLighting; +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.command.RenderDispatcher; +import net.minecraft.client.render.model.ModelBaker; +import net.minecraft.client.texture.SpriteHolder; +import net.minecraft.client.util.math.MatrixStack; + +public class CustomBannerGuiElementRenderer extends SpecialGuiElementRenderer { + private final SpriteHolder sprite; + + public CustomBannerGuiElementRenderer(VertexConsumerProvider.Immediate immediate, SpriteHolder sprite) { + super(immediate); + this.sprite = sprite; + } + + @Override + public Class getElementClass() { + return CustomBannerGuiElementRenderState.class; + } + + protected void render(CustomBannerGuiElementRenderState state, MatrixStack matrixStack) { + MinecraftClient.getInstance().gameRenderer.getDiffuseLighting().setShaderLights(DiffuseLighting.Type.ITEMS_FLAT); + matrixStack.translate(0.0F, 0.25F, 0.0F); + RenderDispatcher renderDispatcher = MinecraftClient.getInstance().gameRenderer.getEntityRenderDispatcher(); + OrderedRenderCommandQueueImpl orderedRenderCommandQueueImpl = renderDispatcher.getQueue(); + BannerBlockEntityRenderer.renderCanvas( + this.sprite, + matrixStack, + orderedRenderCommandQueueImpl, + 15728880, + OverlayTexture.DEFAULT_UV, + state.flag(), + 0.0F, + ModelBaker.BANNER_BASE, + true, + state.baseColor(), + state.resultBannerPatterns(), + false, + null, + 0 + ); + renderDispatcher.render(); + } + + @Override + protected String getName() { + return "custom banner"; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 83f2f73bc0..37598dd843 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -5,19 +5,13 @@ package meteordevelopment.meteorclient.utils.tooltip; +import meteordevelopment.meteorclient.utils.render.CustomBannerGuiElementRenderState; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.DiffuseLighting; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; -import net.minecraft.client.render.command.OrderedRenderCommandQueue; -import net.minecraft.client.render.command.RenderDispatcher; import net.minecraft.client.render.entity.model.EntityModelLayers; -import net.minecraft.client.render.model.ModelBaker; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.BannerPatternsComponent; import net.minecraft.item.BannerItem; @@ -53,55 +47,24 @@ public TooltipComponent getComponent() { @Override public int getHeight(TextRenderer textRenderer) { - return 32 * 5; + return 40 * 2; } @Override public int getWidth(TextRenderer textRenderer) { - return 16 * 5; + return 20 * 2; } @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { - mc.gameRenderer.getDiffuseLighting().setShaderLights(DiffuseLighting.Type.ITEMS_FLAT); - - //bannerField.pitch = 0f; - //bannerField.originY = -32f; - - // the width and height provided to this method seem to be the dimensions of the entire tooltip, - // not just this component - int totalWidth = width; - width = getWidth(null); - height = getHeight(null); - - MatrixStack matrices = new MatrixStack(); - matrices.push(); - matrices.translate(x + width / 2f + (totalWidth - width) / 2f, y + height * 0.775f, 0); - - float s = Math.min(width, height); - matrices.scale(s * 0.75f, s * 0.75f, 1); - - RenderDispatcher renderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); - OrderedRenderCommandQueue renderCommandQueue = renderDispatcher.getQueue(); - - BannerBlockEntityRenderer.renderCanvas( - mc.getAtlasManager(), - matrices, - renderCommandQueue, - 15728880, - OverlayTexture.DEFAULT_UV, - bannerFlag, - 0f, - ModelBaker.BANNER_BASE, - true, - color, - patterns, - false, - null, - 0 - ); - - renderDispatcher.render(); - matrices.pop(); + var centerX = width / 2 - getWidth(null) / 2; + + context.state.addSpecialElement(new CustomBannerGuiElementRenderState( + bannerFlag, color, patterns, + centerX + x, y, + centerX + x + getWidth(null), y + getHeight(null), + context.scissorStack.peekLast(), + 16 * 2 + )); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java index 0b91b8280d..0457e05019 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java @@ -41,7 +41,11 @@ public int getWidth(TextRenderer textRenderer) { @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { var state = (LivingEntityRenderState) mc.getEntityRenderDispatcher().getRenderer(entity).getAndUpdateRenderState(entity, 1); + state.hitbox = null; + state.light = 15728880; + state.shadowPieces.clear(); + state.outlineColor = 0; state.bodyYaw = (float) (spin % 360); state.relativeHeadYaw = 0; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java index bf15394c41..c2cf259240 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java @@ -12,7 +12,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.render.MapRenderState; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.component.type.MapIdComponent; import net.minecraft.item.FilledMapItem; import net.minecraft.item.map.MapState; @@ -48,7 +47,7 @@ public TooltipComponent getComponent() { @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { - double scale = Modules.get().get(BetterTooltips.class).mapsScale.get(); + var scale = Modules.get().get(BetterTooltips.class).mapsScale.get().floatValue(); // Background int size = (int) ((128 + 16) * scale); @@ -58,14 +57,14 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he MapState mapState = FilledMapItem.getMapState(new MapIdComponent(mapId), mc.world); if (mapState == null) return; - MatrixStack matrices2 = new MatrixStack(); + context.getMatrices().pushMatrix(); + context.getMatrices().translate(x, y); + context.getMatrices().scale(scale, scale); + context.getMatrices().translate(8, 8); - matrices2.push(); - matrices2.translate(x, y, 0); - matrices2.scale((float) scale, (float) scale, 0); - matrices2.translate(8, 8, 0); mc.getMapRenderer().update(new MapIdComponent(mapId), mapState, mapRenderState); - mc.getMapRenderer().draw(mapRenderState, matrices2, mc.gameRenderer.getEntityRenderCommandQueue(), false, 0xF000F0); - matrices2.pop(); + context.drawMap(mapRenderState); + + context.getMatrices().popMatrix(); } } From 6ef2676c48880af505909817abc49e3570254465 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 15:58:27 +0200 Subject: [PATCH 31/38] Fix Hitboxes --- .../mixin/EntityRenderManagerMixin.java | 41 +++++-------------- .../mixin/EntityRendererMixin.java | 25 +++++++++++ 2 files changed, 35 insertions(+), 31 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java index 85e2980d84..e7f2a0b1f1 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java @@ -7,24 +7,30 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; +import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; import net.minecraft.client.render.Camera; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EntityRenderManager; import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; +import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(EntityRenderManager.class) public abstract class EntityRenderManagerMixin { @Shadow public Camera camera; - /* - todo this needs to be updated for the new rendering system + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void render(S renderState, CameraRenderState cameraRenderState, double d, double e, double f, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo info) { + var entity = ((IEntityRenderState) renderState).meteor$getEntity(); - @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); @@ -34,33 +40,6 @@ private void render(E entity, do } } - // Hitboxes - - @Unique - private static Entity renderHitboxEntity; - - @Inject(method = "renderHitboxes(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityRenderState;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("HEAD")) - private void renderHitboxes$setEntity(MatrixStack matrices, EntityRenderState state, EntityHitboxAndView hitbox, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - renderHitboxEntity = ((IEntityRenderState) state).meteor$getEntity(); - } - - @Inject(method = "renderHitboxes(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityRenderState;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("TAIL")) - private void renderHitboxes$unsetEntity(MatrixStack matrices, EntityRenderState state, EntityHitboxAndView hitbox, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - renderHitboxEntity = null; - } - - @Inject(method = "renderHitbox", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;push()V", shift = At.Shift.AFTER)) - private static void renderHitbox$scale(MatrixStack matrices, VertexConsumer vertexConsumer, EntityHitbox hitbox, CallbackInfo info) { - if (renderHitboxEntity == null) return; - - double v = Modules.get().get(Hitboxes.class).getEntityValue(renderHitboxEntity); - if (v == 0) return; - - v += 1; - matrices.scale((float) v, (float) v, (float) v); - } - */ - // IEntityRenderState @ModifyExpressionValue( diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 99eb82ee2f..4e433a2128 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -5,9 +5,11 @@ package meteordevelopment.meteorclient.mixin; +import com.google.common.collect.ImmutableList; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes; import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Fullbright; import meteordevelopment.meteorclient.systems.modules.render.Nametags; @@ -16,6 +18,8 @@ import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.state.EntityHitbox; +import net.minecraft.client.render.entity.state.EntityHitboxAndView; import net.minecraft.client.render.entity.state.EntityRenderState; import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.entity.Entity; @@ -92,4 +96,25 @@ private ESP getESP() { return esp; } + + // Hitboxes + + @ModifyReturnValue(method = "createHitbox", at = @At("TAIL")) + private EntityHitboxAndView meteor$createHitbox(EntityHitboxAndView original, T entity, float tickProgress, boolean green) { + var v = Modules.get().get(Hitboxes.class).getEntityValue(entity); + if (v == 0) return original; + + var builder = new ImmutableList.Builder(); + + for (var hitbox : original.hitboxes()) { + builder.add(new EntityHitbox( + hitbox.x0() - v, hitbox.y0() - v, hitbox.z0() - v, + hitbox.x1() + v, hitbox.y1() + v, hitbox.z1() + v, + hitbox.offsetX(), hitbox.offsetY(), hitbox.offsetZ(), + hitbox.red(), hitbox.green(), hitbox.blue() + )); + } + + return new EntityHitboxAndView(original.viewX(), original.viewY(), original.viewZ(), builder.build()); + } } From 39b69babf2ade69553b07ece53d0a05b7de78cb2 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 16:02:58 +0200 Subject: [PATCH 32/38] Fix HUD not rendering while having entity hitboxes shown --- .../java/meteordevelopment/meteorclient/systems/hud/Hud.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java index 95ccdec719..ca3b1714ee 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java @@ -228,7 +228,7 @@ private void onRender(Render2DEvent event) { if (Utils.isLoading()) return; if (!active || shouldHideHud()) return; - if ((mc.options.hudHidden || mc.inGameHud.getDebugHud().shouldShowDebugHud()) && !HudEditorScreen.isOpen()) return; + if ((mc.options.hudHidden || mc.debugHudEntryList.isF3Enabled()) && !HudEditorScreen.isOpen()) return; HudRenderer.INSTANCE.begin(event.drawContext); From 55dc1d2e38b3f25d6250c7b8125c8cdbf4ecb22b Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 17:24:50 +0200 Subject: [PATCH 33/38] Fix offscreen Tracers --- .../systems/modules/render/Tracers.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java index 6a19c73502..edac39cb37 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java @@ -284,7 +284,7 @@ public void onRender2D(Render2DEvent event) { Color color = getEntityColor(entity); if (blinkOffscreen.get()) - color.a *= (int) getAlpha(); + color.a = (int) (color.a * getAlpha()); Vec2f screenCenter = new Vec2f(mc.getWindow().getFramebufferWidth() / 2.f, mc.getWindow().getFramebufferHeight() / 2.f); @@ -302,8 +302,10 @@ public void onRender2D(Render2DEvent event) { float angleYawRad = (float) Math.toRadians(angle.y); - Vector2f newPoint = new Vector2f(screenCenter.x + distanceOffscreen.get() * (float) Math.cos(angleYawRad), - screenCenter.y + distanceOffscreen.get() * (float) Math.sin(angleYawRad)); + Vector2f newPoint = new Vector2f( + screenCenter.x + distanceOffscreen.get() * (float) Math.cos(angleYawRad), + screenCenter.y + distanceOffscreen.get() * (float) Math.sin(angleYawRad) + ); Vector2f[] trianglePoints = { new Vector2f(newPoint.x - sizeOffscreen.get(), newPoint.y - sizeOffscreen.get()), @@ -313,8 +315,12 @@ public void onRender2D(Render2DEvent event) { rotateTriangle(trianglePoints, angle.y); - Renderer2D.COLOR.triangle(trianglePoints[0].x, trianglePoints[0].y, trianglePoints[1].x, trianglePoints[1].y, trianglePoints[2].x, - trianglePoints[2].y, color); + Renderer2D.COLOR.triangle( + trianglePoints[2].x, trianglePoints[2].y, + trianglePoints[1].x, trianglePoints[1].y, + trianglePoints[0].x, trianglePoints[0].y, + color + ); count++; } From 3a833c0e5e5886270aed09501183062e1ae99521 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 17:57:46 +0200 Subject: [PATCH 34/38] Update gradle to 9.1.0 --- gradle/wrapper/gradle-wrapper.jar | Bin 43764 -> 45457 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 +---- gradlew.bat | 3 +-- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55baabb587c669f562ae36f953de2481846..8bdaf60c75ab801e22807dde59e12a8735a34077 100644 GIT binary patch delta 37256 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 delta 35551 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff23a68d70..2e1113280e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a9367..adff685a03 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee845..e509b2dd8f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell From 98d77330c4da73aa3a79aaf939ba55651259ee89 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 17 Oct 2025 17:48:15 +0100 Subject: [PATCH 35/38] fix velocity scaling --- .../meteorclient/systems/modules/movement/Velocity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java index 8a682caabc..2628cd6acb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java @@ -156,7 +156,7 @@ private void onPacketReceive(PacketEvent.Receive event) { double velY = (packet.getVelocity().getY() - mc.player.getVelocity().y) * knockbackVertical.get(); double velZ = (packet.getVelocity().getZ() - mc.player.getVelocity().z) * knockbackHorizontal.get(); ((EntityVelocityUpdateS2CPacketAccessor) packet).meteor$setVelocity( - new Vec3d(velX * 8000 + mc.player.getVelocity().x * 8000, velY * 8000 + mc.player.getVelocity().y * 8000, velZ * 8000 + mc.player.getVelocity().z * 8000) + new Vec3d(velX + mc.player.getVelocity().x, velY + mc.player.getVelocity().y, velZ + mc.player.getVelocity().z) ); } } From a5d8f2696aa68489fca132f74ef01642f1e24e27 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 20:59:41 +0200 Subject: [PATCH 36/38] Fix ItemPhysics --- .../systems/modules/render/ItemPhysics.java | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java index 6d1e3171e6..2bfbbc0e29 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -56,7 +56,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { MatrixStack matrices = event.matrixStack; - random.setSeed(event.renderState.seed); + random.setSeed(event.itemEntity.getId() * 89748956L); for (int i = 0; i < ((ItemRenderStateAccessor) event.renderState.itemRenderState).meteor$getLayerCount(); i++) { ItemRenderState.LayerRenderState layer = ((ItemRenderStateAccessor) event.renderState.itemRenderState).meteor$getLayers()[i]; @@ -73,11 +73,22 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { } if (randomRotation.get()) { - RotationAxis axis = RotationAxis.POSITIVE_Y; - if (info.flat) axis = RotationAxis.POSITIVE_Z; + var axis = RotationAxis.POSITIVE_Y; + var x = 0.5f; + var y = 0.0f; + var z = 0.5f; + + if (info.flat) { + axis = RotationAxis.POSITIVE_Z; + y = 0.5f; + z = 0.0f; + } float degrees = (random.nextFloat() * 2 - 1) * 90; + + matrices.translate(x, y, z); matrices.multiply(axis.rotationDegrees(degrees)); + matrices.translate(-x, -y, -z); } renderLayer(event, info); @@ -151,14 +162,12 @@ private ModelInfo getInfo(List quads) { IBakedQuad quad = (IBakedQuad) (Object) _quad; for (int i = 0; i < 4; i++) { - switch (_quad.face()) { - case DOWN -> minY = Math.min(minY, quad.meteor$getY(i)); - case UP -> maxY = Math.max(maxY, quad.meteor$getY(i)); - case NORTH -> minZ = Math.min(minZ, quad.meteor$getZ(i)); - case SOUTH -> maxZ = Math.max(maxZ, quad.meteor$getZ(i)); - case WEST -> minX = Math.min(minX, quad.meteor$getX(i)); - case EAST -> maxX = Math.max(maxX, quad.meteor$getX(i)); - } + minY = Math.min(minY, quad.meteor$getY(i)); + maxY = Math.max(maxY, quad.meteor$getY(i)); + minZ = Math.min(minZ, quad.meteor$getZ(i)); + maxZ = Math.max(maxZ, quad.meteor$getZ(i)); + minX = Math.min(minX, quad.meteor$getX(i)); + maxX = Math.max(maxX, quad.meteor$getX(i)); } } @@ -176,7 +185,7 @@ private ModelInfo getInfo(List quads) { boolean flat = (x > PIXEL_SIZE && y > PIXEL_SIZE && z <= PIXEL_SIZE); - return new ModelInfo(flat, 0.5f - minY, minZ - minY); + return new ModelInfo(flat, 0.5f - minY, -maxZ); } record ModelInfo(boolean flat, float offsetY, float offsetZ) {} From 1a58362eab323377826b1bd2d4589c73264d5ccb Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 22:56:43 +0200 Subject: [PATCH 37/38] Fix stuff --- .../meteorclient/mixin/GameRendererMixin.java | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index 5f5bef9c4a..0e6dee8ec4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -26,10 +26,15 @@ import meteordevelopment.meteorclient.systems.modules.world.HighwayBuilder; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; +import meteordevelopment.meteorclient.utils.render.CustomBannerGuiElementRenderer; import meteordevelopment.meteorclient.utils.render.NametagUtils; import meteordevelopment.meteorclient.utils.render.RenderUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.render.GuiRenderer; +import net.minecraft.client.gui.render.SpecialGuiElementRenderer; +import net.minecraft.client.gui.render.state.GuiRenderState; +import net.minecraft.client.render.BufferBuilderStorage; import net.minecraft.client.render.Camera; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.RenderTickCounter; @@ -48,8 +53,12 @@ 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.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.ArrayList; +import java.util.List; + @Mixin(GameRenderer.class) public abstract class GameRendererMixin { @Shadow @@ -85,14 +94,6 @@ public abstract class GameRendererMixin { @Final private BufferBuilderStorage buffers; - @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/render/GuiRenderer;(Lnet/minecraft/client/gui/render/state/GuiRenderState;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/command/RenderDispatcher;Ljava/util/List;)V")) - private List> meteor$addSpecialRenderers(List> list) { - list = new ArrayList<>(list); - list.add(new CustomBannerGuiElementRenderer(buffers.getEntityVertexConsumers(), client.getAtlasManager())); - - return List.of(list.toArray(new SpecialGuiElementRenderer[0])); - } - @Shadow @Final private GuiRenderer guiRenderer; @@ -105,6 +106,14 @@ public abstract class GameRendererMixin { @Final private GuiRenderState guiState; + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/render/GuiRenderer;(Lnet/minecraft/client/gui/render/state/GuiRenderState;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/command/RenderDispatcher;Ljava/util/List;)V")) + private List> meteor$addSpecialRenderers(List> list) { + list = new ArrayList<>(list); + list.add(new CustomBannerGuiElementRenderer(buffers.getEntityVertexConsumers(), client.getAtlasManager())); + + return List.of(list.toArray(new SpecialGuiElementRenderer[0])); + } + @Inject(method = "renderWorld", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = {"ldc=hand"})) private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 0) Matrix4f projection, @Local(ordinal = 1) Matrix4f position, @Local(ordinal = 1) float tickDelta, @Local MatrixStack matrixStack) { if (!Utils.canUpdate()) return; From facd9498e0c0a31a8478ee355bfaf88a2f42c245 Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Fri, 17 Oct 2025 23:03:22 +0200 Subject: [PATCH 38/38] Disable Gradle configuration cache for now --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 2e5e2683a6..bc67d5db8b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx2G -org.gradle.configuration-cache=true +org.gradle.configuration-cache=false # Fabric (https://fabricmc.net/develop) minecraft_version=1.21.10