diff --git a/build.gradle.kts b/build.gradle.kts index 4658eaef79..455808b036 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,7 @@ 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" + id("com.gradleup.shadow") version "9.2.2" } base { diff --git a/gradle.properties b/gradle.properties index cf7f79acfd..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.8 -yarn_mappings=1.21.8+build.1 -loader_version=0.16.14 -fapi_version=0.129.0+1.21.8 +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 # Mod Properties maven_group=meteordevelopment @@ -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/MeteorClient.java b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java index 27668a514d..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; @@ -150,20 +150,20 @@ 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)); } } @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.input)) { toggleGui(); } } @EventHandler - private void onMouseButton(MouseButtonEvent event) { - if (event.action == KeyAction.Press && KeyBinds.OPEN_GUI.matchesMouse(event.button)) { + 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/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/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/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/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/InputCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/InputCommand.java index 8852feccce..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.getTranslationKey().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.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.getId()), handler.ticks, handler.totalTicks); } } return SINGLE_SUCCESS; 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/commands/commands/SpectateCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java index a3e21115a0..d54ed7cce9 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SpectateCommand.java @@ -10,6 +10,8 @@ import meteordevelopment.meteorclient.commands.Command; import meteordevelopment.meteorclient.commands.arguments.PlayerArgumentType; import meteordevelopment.meteorclient.events.meteor.KeyEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; +import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.orbit.EventHandler; import net.minecraft.command.CommandSource; import net.minecraft.text.Text; @@ -40,7 +42,16 @@ 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); + } + } + + @EventHandler + private void onMouse(MouseClickEvent 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/commands/commands/SwarmCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SwarmCommand.java index 555b73793d..07256c85bb 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SwarmCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SwarmCommand.java @@ -34,8 +34,8 @@ import net.minecraft.util.math.BlockPos; import org.jetbrains.annotations.Nullable; -import java.util.List; import java.util.Random; +import java.util.Set; public class SwarmCommand extends Command { @@ -212,7 +212,7 @@ else if (swarm.isWorker()) { swarm.host.sendMessage(context.getInput()); } else if (swarm.isWorker()) { - Modules.get().get(InfinityMiner.class).targetBlocks.set(List.of(context.getArgument("target", BlockStateArgument.class).getBlockState().getBlock())); + Modules.get().get(InfinityMiner.class).targetBlocks.set(Set.of(context.getArgument("target", BlockStateArgument.class).getBlockState().getBlock())); runInfinityMiner(); } } @@ -228,8 +228,8 @@ else if (swarm.isWorker()) { swarm.host.sendMessage(context.getInput()); } else if (swarm.isWorker()) { - Modules.get().get(InfinityMiner.class).targetBlocks.set(List.of(context.getArgument("target", BlockStateArgument.class).getBlockState().getBlock())); - Modules.get().get(InfinityMiner.class).repairBlocks.set(List.of(context.getArgument("repair", BlockStateArgument.class).getBlockState().getBlock())); + Modules.get().get(InfinityMiner.class).targetBlocks.set(Set.of(context.getArgument("target", BlockStateArgument.class).getBlockState().getBlock())); + Modules.get().get(InfinityMiner.class).repairBlocks.set(Set.of(context.getArgument("repair", BlockStateArgument.class).getBlockState().getBlock())); runInfinityMiner(); } } 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/events/meteor/KeyEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java index 97df70f8a5..2d592f7f52 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.client.input.KeyInput; public class KeyEvent extends Cancellable { private static final KeyEvent INSTANCE = new KeyEvent(); - public int key, modifiers; + public KeyInput input; public KeyAction action; - public static KeyEvent get(int key, int modifiers, KeyAction action) { + public static KeyEvent get(KeyInput keyInput, KeyAction action) { INSTANCE.setCancelled(false); - 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 52% rename from src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java rename to src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java index bb0e2b3b11..3519ab6c0a 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java @@ -7,16 +7,20 @@ 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 static MouseButtonEvent get(int button, KeyAction action) { + public static MouseClickEvent get(MouseInput mouseInput, Click click, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.button = button; + INSTANCE.input = mouseInput; + INSTANCE.click = click; 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..27c1595816 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.client.render.block.entity.state.BlockEntityRenderState; public class RenderBlockEntityEvent extends Cancellable { private static final RenderBlockEntityEvent INSTANCE = new RenderBlockEntityEvent(); - public BlockEntity blockEntity; + public BlockEntityRenderState blockEntityState; - public static RenderBlockEntityEvent get(BlockEntity blockEntity) { + public static RenderBlockEntityEvent get(BlockEntityRenderState blockEntityState) { INSTANCE.setCancelled(false); - INSTANCE.blockEntity = blockEntity; + INSTANCE.blockEntityState = blockEntityState; return INSTANCE; } } diff --git a/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/RenderItemEntityEvent.java index 14cd7fbcf4..25fa0d8c7c 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.command.OrderedRenderCommandQueue; 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 OrderedRenderCommandQueue 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, OrderedRenderCommandQueue 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/events/render/TooltipDataEvent.java b/src/main/java/meteordevelopment/meteorclient/events/render/TooltipDataEvent.java index f632f4fb88..8a20cdb51d 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/render/TooltipDataEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/render/TooltipDataEvent.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.events.render; -import net.minecraft.item.tooltip.TooltipData; import net.minecraft.item.ItemStack; +import net.minecraft.item.tooltip.TooltipData; public class TooltipDataEvent { diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 6e250a25dc..0ea3c98cf4 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -18,8 +18,12 @@ import meteordevelopment.meteorclient.utils.misc.CursorStyle; import meteordevelopment.meteorclient.utils.misc.input.Input; 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; @@ -114,25 +118,31 @@ public void onClosed(Runnable action) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click arg, boolean doubled) { 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.button(), doubled); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click 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.button()); } @Override @@ -159,31 +169,31 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou } @Override - public boolean keyReleased(int keyCode, int scanCode, int modifiers) { + public boolean keyReleased(KeyInput 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(KeyInput 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); @@ -214,10 +224,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) { @@ -227,10 +237,10 @@ public void keyRepeated(int key, int modifiers) { } @Override - public boolean charTyped(char chr, int keyCode) { + public boolean charTyped(CharInput 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/screens/settings/base/DynamicRegistryListSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java index f151dddea3..15605c792f 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java @@ -12,7 +12,10 @@ import meteordevelopment.meteorclient.gui.widgets.input.WTextBox; import meteordevelopment.meteorclient.settings.Setting; import net.minecraft.client.MinecraftClient; -import net.minecraft.registry.*; +import net.minecraft.registry.BuiltinRegistries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryWrapper; import net.minecraft.util.Identifier; import net.minecraft.util.InvalidIdentifierException; 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/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/gui/widgets/WMultiLabel.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WMultiLabel.java index 25ec7fa826..4f5a20309d 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WMultiLabel.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WMultiLabel.java @@ -6,7 +6,6 @@ package meteordevelopment.meteorclient.gui.widgets; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; public abstract class WMultiLabel extends WLabel { 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/ArmorFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ArmorFeatureRendererMixin.java index 3923eddaf5..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.VertexConsumerProvider; +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/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/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 94c4408ef0..f80763a019 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerBlockEntityRendererMixin.java @@ -8,15 +8,21 @@ 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.OverlayTexture; 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.state.BannerBlockEntityRenderState; +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; +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; @@ -27,28 +33,49 @@ @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); + @Final + private SpriteHolder materials; - @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/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/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) - 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/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(matrixStack, vertexConsumerProvider, light, overlay, rotation, bannerBlockModel); + renderPillar( + matrixStack, + orderedRenderCommandQueue, + bannerBlockEntityRenderState.lightmapCoordinates, + bannerBlockEntityRenderState.yaw, + bannerBlockModel, + this.materials, + bannerBlockEntityRenderState.crumblingOverlay + ); ci.cancel(); } } @Unique - private static void renderPillar(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay, float rotation, BannerBlockModel model) { + 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)); matrices.scale(0.6666667F, -0.6666667F, -0.6666667F); - model.render(matrices, ModelBaker.BANNER_BASE.getVertexConsumer(vertexConsumers, RenderLayer::getEntitySolid), light, overlay); + SpriteIdentifier spriteIdentifier = ModelBaker.BANNER_BASE; + entityRenderCommandQueue.submitModel( + model, + Unit.INSTANCE, + matrices, + spriteIdentifier.getRenderLayer(RenderLayer::getEntitySolid), + light, + OverlayTexture.DEFAULT_UV, + -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..49e45c49db 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BeaconBlockEntityRendererMixin.java @@ -9,20 +9,21 @@ 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.block.entity.state.BeaconBlockEntityRenderState; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.util.math.Vec3d; +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, VertexConsumerProvider vertexConsumers, int light, int overlay, Vec3d cameraPos, 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/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/BlockEntityRenderManagerAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerAccessor.java new file mode 100644 index 0000000000..b582915859 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerAccessor.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.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(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 51% rename from src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherMixin.java rename to src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java index 5774208d4b..4fc4ef95fc 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BlockEntityRenderManagerMixin.java @@ -7,20 +7,21 @@ 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.BlockEntityRenderDispatcher; +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; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -@Mixin(BlockEntityRenderDispatcher.class) -public abstract class BlockEntityRenderDispatcherMixin { - @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)); - if (event.isCancelled()) info.cancel(); +@Mixin(BlockEntityRenderManager.class) +public abstract class BlockEntityRenderManagerMixin { + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + 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/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/CapeFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java index 990c0bd158..7d3b482c15 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CapeFeatureRendererMixin.java @@ -8,22 +8,23 @@ 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.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/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/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 : id; + return id == null ? original : new AssetInfo.TextureAssetInfo(id, id); } return original; 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 1bd58a0c6c..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/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/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/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/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 e47dd8e1b0..7ace512dcf 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 = "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/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/CompassStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CompassStateMixin.java index 8554b393db..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.entity.Entity; +import net.minecraft.util.HeldItemContext; 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/entity/Entity;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/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/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(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/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/ElytraFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ElytraFeatureRendererMixin.java index 085a84ddd4..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.VertexConsumerProvider; +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/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/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 c3a97b0075..dd09a45147 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.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; 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/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 3818803f9c..08aa2cb5e6 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalEntityRendererMixin.java @@ -8,12 +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.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.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; import net.minecraft.client.render.entity.EndCrystalEntityRenderer; -import net.minecraft.client.render.entity.model.EndCrystalEntityModel; 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.*; @@ -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/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/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/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/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(); @@ -61,14 +62,22 @@ 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/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, S state, MatrixStack matrixStack, RenderLayer renderLayer, int light, int uv, int outlineColor, ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlayCommand) { if (chams.isActive() && chams.crystals.get()) { - model.render(matrices, vertices, light, overlay, chams.crystalsColor.get().getPacked()); + instance.submitModel( + model, + state, + matrixStack, + END_CRYSTAL, + light, + uv, + chams.crystalsColor.get().getPacked(), + null, + outlineColor, + null + ); + return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java similarity index 52% rename from src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java rename to src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java index c903e8d1bd..85e2980d84 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java @@ -7,37 +7,22 @@ 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.EntityRenderManager; import net.minecraft.client.render.entity.state.EntityRenderState; -import net.minecraft.client.render.entity.state.LivingEntityRenderState; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; -import net.minecraft.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) -public abstract class EntityRenderDispatcherMixin { +@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(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) { @@ -74,30 +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); - } - - @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/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 2df6e07fb4..74dc547380 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -8,26 +8,33 @@ 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; 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; 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 +65,38 @@ 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(); + } + } + + @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) { + 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..e4993afe5f 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("velocity") + void meteor$setVelocity(Vec3d velocity); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FireworksSparkParticleSubMixin.java index 388a02cbdf..225501c517 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.client.particle.BillboardParticleSubmittable; 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(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/FishingBobberEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FishingBobberEntityMixin.java index 5aa409b185..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.getWorld().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/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index a3c6ae5d44..6641233904 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()); @@ -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/mixin/HandledScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java index a668028284..3b7ad9ff59 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.client.gui.Click; 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(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(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.isShiftPressed()) onMouseClick(slot, slot.id, arg.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 arg, boolean doubled, 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.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/HeadFeatureRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HeadFeatureRendererMixin.java index c575174308..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.VertexConsumerProvider; +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/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/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 fcea6516b8..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.VertexConsumerProvider; +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/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/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/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/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/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/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/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..8d22ab70ce 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemEntityRendererMixin.java @@ -8,9 +8,10 @@ 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.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; @@ -27,9 +28,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/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/ItemMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemMixin.java index cfd2422820..04b25c1b7c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemMixin.java @@ -7,7 +7,6 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.render.TooltipDataEvent; - import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.tooltip.TooltipData; 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..628cfcb8f4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardMixin.java @@ -15,6 +15,8 @@ import meteordevelopment.meteorclient.utils.misc.input.KeyAction; 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; @@ -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, 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(key); + modifiers |= Input.getModifier(keyEvent.key()); } else if (action == GLFW.GLFW_RELEASE) { - modifiers &= ~Input.getModifier(key); + modifiers &= ~Input.getModifier(keyEvent.key()); } if (client.currentScreen instanceof WidgetScreen && action == GLFW.GLFW_REPEAT) { - ((WidgetScreen) client.currentScreen).keyRepeated(key, modifiers); + ((WidgetScreen) client.currentScreen).keyRepeated(keyEvent.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(keyEvent.key(), action != GLFW.GLFW_RELEASE); + if (MeteorClient.EVENT_BUS.post(KeyEvent.get(keyEvent, 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, CharInput 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/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index a3b8586969..da413cd711 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -14,12 +14,15 @@ 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.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; 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; import net.minecraft.entity.LivingEntity; @@ -62,12 +65,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/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, 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; - instance.render(matrixStack, vertexConsumer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked()); + instance.submitModel(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, null); return false; } @@ -88,12 +91,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/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; - 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 +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/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/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/MapRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MapRendererMixin.java index 4a064dccf2..9a50e5e51b 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.VertexConsumerProvider; +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; @@ -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, 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/MinecraftClientAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftClientAccessor.java index 57b5ecb430..ef985ca8d3 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("apiServices") + void meteor$setApiServices(ApiServices apiServices); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java index 52e75eb792..ef841ae845 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MobSpawnerBlockEntityRendererMixin.java @@ -10,15 +10,16 @@ import net.minecraft.block.entity.MobSpawnerBlockEntity; 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/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) - private void onRender(CallbackInfo ci) { +public abstract class MobSpawnerBlockEntityRendererMixin implements BlockEntityRenderer { + @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/mixin/MouseMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java index 3e2b20d565..7747739299 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseMixin.java @@ -6,12 +6,18 @@ 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; +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; +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,22 @@ @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, MouseInput mouseInput, int action, CallbackInfo ci) { + Input.setButtonState(mouseInput.button(), action != GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(MouseButtonEvent.get(button, KeyAction.get(action))).isCancelled()) info.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/mixin/MultiplayerScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MultiplayerScreenMixin.java index 85e051fb80..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/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/PlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityMixin.java index 70070cc1d4..71e8f01c61 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 (!getEntityWorld().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 (getEntityWorld().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 (!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; @@ -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 (!getEntityWorld().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 (!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..33cf1bbbc7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerEntityRendererMixin.java @@ -12,13 +12,17 @@ import meteordevelopment.meteorclient.systems.modules.render.Chams; import meteordevelopment.meteorclient.utils.player.Rotations; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.network.AbstractClientPlayerEntity; +import net.minecraft.client.network.ClientPlayerLikeEntity; import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; +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; +import net.minecraft.entity.PlayerLikeEntity; import net.minecraft.util.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; @@ -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/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; @@ -57,7 +66,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, 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 +77,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/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.render(matrices, vertices, light, overlay, chams.handColor.get().getPacked()); + instance.submitModelPart(modelPart, matrixStack, renderLayer, light, uv, null, chams.handColor.get().getPacked(), null); return false; } @@ -80,9 +89,10 @@ 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/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; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerListEntryMixin.java index 298b7e610e..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; @@ -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/mixin/ScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java index 55f66d72da..7d299935de 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java @@ -18,6 +18,7 @@ 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; @@ -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(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); - 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/ServerPlayerEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ServerPlayerEntityMixin.java index 4e89c0564c..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 (!getWorld().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/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(); } } 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/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 46b7b0d7c2..00790464e9 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.client.gui.Click; 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, CallbackInfoReturnable info) { - if (Config.get().titleScreenCredits.get() && button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - if (TitleScreenCredits.onClicked(mouseX, mouseY)) info.setReturnValue(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); } } } 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/WorldRendererAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererAccessor.java index f60acead4b..fe6a42c6dc 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererAccessor.java @@ -6,7 +6,6 @@ package meteordevelopment.meteorclient.mixin; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; - import net.minecraft.client.render.WorldRenderer; import net.minecraft.entity.player.BlockBreakingInfo; import org.spongepowered.asm.mixin.Mixin; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 6555f898d4..21bc407fac 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -6,33 +6,24 @@ 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; 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; -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; @@ -47,35 +38,30 @@ @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(); } @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 matrices, VertexConsumer vertexConsumer, double x, double y, double z, OutlineRenderState state, int i, CallbackInfo ci) { 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; } // 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/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/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/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(); } @@ -93,6 +79,7 @@ private void onRenderHead(ObjectAllocator allocator, Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, + Matrix4f matrix4f2, GpuBufferSlice fog, Vector4f fogColor, boolean shouldRenderSky, @@ -100,6 +87,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); @@ -112,44 +104,25 @@ 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; 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.r, color.g, color.b, color.a); - } - } - @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/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 wrapper = sgBool.add(new BoolSetting.Builder() - .name(setting.getName()) - .description(getDescription(setting.getName())) - .defaultValue((boolean) setting.defaultValue) - .onChanged(aBoolean -> setting.value = aBoolean) - .onModuleActivated(booleanSetting -> booleanSetting.set((Boolean) setting.value)) - .build() - ); + switch (value) { + case Boolean b -> { + Setting wrapper = sgBool.add(new BoolSetting.Builder() + .name(setting.getName()) + .description(getDescription(setting.getName())) + .defaultValue((boolean) setting.defaultValue) + .onChanged(aBoolean -> setting.value = aBoolean) + .onModuleActivated(booleanSetting -> booleanSetting.set((Boolean) setting.value)) + .build() + ); - switch (wrapper.name) { - case "assumeWalkOnWater" -> walkOnWater = wrapper; - case "assumeWalkOnLava" -> walkOnLava = wrapper; - case "assumeStep" -> step = wrapper; + switch (wrapper.name) { + case "assumeWalkOnWater" -> walkOnWater = wrapper; + case "assumeWalkOnLava" -> walkOnLava = wrapper; + case "assumeStep" -> step = wrapper; + } } - } - else if (value instanceof Double) { - sgDouble.add(new DoubleSetting.Builder() + case Double v -> sgDouble.add(new DoubleSetting.Builder() .name(setting.getName()) .description(getDescription(setting.getName())) .defaultValue((double) setting.defaultValue) @@ -115,9 +119,7 @@ else if (value instanceof Double) { .onModuleActivated(doubleSetting -> doubleSetting.set((Double) setting.value)) .build() ); - } - else if (value instanceof Float) { - sgDouble.add(new DoubleSetting.Builder() + case Float v -> sgDouble.add(new DoubleSetting.Builder() .name(setting.getName()) .description(getDescription(setting.getName())) .defaultValue(((Float) setting.defaultValue).doubleValue()) @@ -127,29 +129,27 @@ else if (value instanceof Float) { .onModuleActivated(doubleSetting -> doubleSetting.set(((Float) setting.value).doubleValue())) .build() ); - } - else if (value instanceof Integer) { - Setting wrapper = sgInt.add(new IntSetting.Builder() - .name(setting.getName()) - .description(getDescription(setting.getName())) - .defaultValue((int) setting.defaultValue) - .onChanged(integer -> setting.value = integer) - .onModuleActivated(integerSetting -> integerSetting.set((Integer) setting.value)) - .build() - ); + case Integer i -> { + Setting wrapper = sgInt.add(new IntSetting.Builder() + .name(setting.getName()) + .description(getDescription(setting.getName())) + .defaultValue((int) setting.defaultValue) + .onChanged(integer -> setting.value = integer) + .onModuleActivated(integerSetting -> integerSetting.set((Integer) setting.value)) + .build() + ); - if (wrapper.name.equals("maxFallHeightNoWater")) { - noFall = new BoolSetting.Builder() - .name(wrapper.name) - .description(wrapper.description) - .defaultValue(false) - .onChanged(aBoolean -> wrapper.set(aBoolean ? 159159 : wrapper.getDefaultValue())) - .onModuleActivated(booleanSetting -> booleanSetting.set(wrapper.get() >= 255)) - .build(); + if (wrapper.name.equals("maxFallHeightNoWater")) { + noFall = new BoolSetting.Builder() + .name(wrapper.name) + .description(wrapper.description) + .defaultValue(false) + .onChanged(aBoolean -> wrapper.set(aBoolean ? 159159 : wrapper.getDefaultValue())) + .onModuleActivated(booleanSetting -> booleanSetting.set(wrapper.get() >= 255)) + .build(); + } } - } - else if (value instanceof Long) { - sgInt.add(new IntSetting.Builder() + case Long l -> sgInt.add(new IntSetting.Builder() .name(setting.getName()) .description(getDescription(setting.getName())) .defaultValue(((Long) setting.defaultValue).intValue()) @@ -157,9 +157,7 @@ else if (value instanceof Long) { .onModuleActivated(integerSetting -> integerSetting.set(((Long) setting.value).intValue())) .build() ); - } - else if (value instanceof String) { - sgString.add(new StringSetting.Builder() + case String s -> sgString.add(new StringSetting.Builder() .name(setting.getName()) .description(getDescription(setting.getName())) .defaultValue((String) setting.defaultValue) @@ -167,42 +165,43 @@ else if (value instanceof String) { .onModuleActivated(stringSetting -> stringSetting.set((String) setting.value)) .build() ); - } - else if (value instanceof Color) { - Color c = (Color) setting.value; - - sgColor.add(new ColorSetting.Builder() - .name(setting.getName()) - .description(getDescription(setting.getName())) - .defaultValue(new SettingColor(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha())) - .onChanged(color -> setting.value = new Color(color.r, color.g, color.b, color.a)) - .onModuleActivated(colorSetting -> colorSetting.set(new SettingColor(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()))) - .build() - ); - } - else if (value instanceof List) { - Type listType = ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; - Type type = ((ParameterizedType) listType).getActualTypeArguments()[0]; + case Color color1 -> { + Color c = (Color) setting.value; - if (type == Block.class) { - sgBlockLists.add(new BlockListSetting.Builder() + sgColor.add(new ColorSetting.Builder() .name(setting.getName()) .description(getDescription(setting.getName())) - .defaultValue((List) setting.defaultValue) - .onChanged(blockList -> setting.value = blockList) - .onModuleActivated(blockListSetting -> blockListSetting.set((List) setting.value)) + .defaultValue(new SettingColor(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha())) + .onChanged(color -> setting.value = new Color(color.r, color.g, color.b, color.a)) + .onModuleActivated(colorSetting -> colorSetting.set(new SettingColor(c.getRed(), c.getGreen(), c.getBlue(), c.getAlpha()))) .build() ); } - else if (type == Item.class) { - sgItemLists.add(new ItemListSetting.Builder() - .name(setting.getName()) - .description(getDescription(setting.getName())) - .defaultValue((List) setting.defaultValue) - .onChanged(itemList -> setting.value = itemList) - .onModuleActivated(itemListSetting -> itemListSetting.set((List) setting.value)) - .build() - ); + case List list -> { + Type listType = ((ParameterizedType) field.getGenericType()).getActualTypeArguments()[0]; + Type type = ((ParameterizedType) listType).getActualTypeArguments()[0]; + + if (type == Block.class) { + sgBlockLists.add(new BlockListSetting.Builder() + .name(setting.getName()) + .description(getDescription(setting.getName())) + .defaultValue(new ReferenceOpenHashSet<>((List) setting.defaultValue)) + .onChanged(blockList -> setting.value = blockList) + .onModuleActivated(blockListSetting -> blockListSetting.set(new ReferenceOpenHashSet<>((List) setting.value))) + .build() + ); + } else if (type == Item.class) { + sgItemLists.add(new ItemListSetting.Builder() + .name(setting.getName()) + .description(getDescription(setting.getName())) + .defaultValue(new ReferenceOpenHashSet<>((List) setting.defaultValue)) + .onChanged(itemList -> setting.value = itemList) + .onModuleActivated(itemListSetting -> itemListSetting.set(new ReferenceOpenHashSet<>((List) setting.value))) + .build() + ); + } + } + case null, default -> { } } } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryItemSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryItemSetting.java new file mode 100644 index 0000000000..ccccf7397a --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryItemSetting.java @@ -0,0 +1,77 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.settings; + +import com.google.common.base.Predicates; +import net.minecraft.nbt.NbtCompound; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; + +import java.util.function.Consumer; +import java.util.function.Predicate; + +public abstract class AbstractRegistryItemSetting extends Setting { + public final Predicate filter; + public final Registry registry; + + protected AbstractRegistryItemSetting(String name, String description, V defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, Predicate filter, Registry registry) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + + this.filter = filter; + this.registry = registry; + } + + @Override + protected final V parseImpl(String str) { + return parseId(registry, str); + } + + @Override + protected final boolean isValueValid(V value) { + return value != null && filter.test(value); + } + + @Override + public final Iterable getIdentifierSuggestions() { + return registry.getIds(); + } + + @Override + protected final NbtCompound save(NbtCompound tag) { + tag.putString("value", registry.getId(get()).toString()); + + return tag; + } + + @Override + protected final V load(NbtCompound tag) { + V value = registry.get(Identifier.of(tag.getString("value", ""))); + + if (!isValueValid(value)) { + resetImpl(); + } else { + this.value = value; + } + + return get(); + } + + @SuppressWarnings("unchecked") + protected static abstract class AbstractBuilder, V, S extends AbstractRegistryItemSetting> extends SettingBuilder { + protected Predicate filter = Predicates.alwaysTrue(); + + protected AbstractBuilder() { + super(null); + } + + public B filter(Predicate filter) { + this.filter = filter; + return (B) this; + } + } + +} + diff --git a/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryListSetting.java new file mode 100644 index 0000000000..9a3add5668 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/settings/AbstractRegistryListSetting.java @@ -0,0 +1,90 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.settings; + +import net.minecraft.nbt.NbtCompound; +import net.minecraft.nbt.NbtElement; +import net.minecraft.nbt.NbtList; +import net.minecraft.nbt.NbtString; +import net.minecraft.registry.Registry; +import net.minecraft.util.Identifier; +import org.apache.commons.lang3.StringUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Predicate; + +public abstract class AbstractRegistryListSetting, V> extends Setting { + public final Predicate filter; + public final Registry registry; + + protected AbstractRegistryListSetting(String name, String description, C defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, Predicate filter, Registry registry) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible); + this.filter = filter; + this.registry = registry; + } + + protected abstract C transferCollection(Collection from); + + @Override + public final void resetImpl() { + value = transferCollection(defaultValue); + } + + @Override + protected final C parseImpl(String str) { + String[] values = StringUtils.split(str, ','); + List items = new ArrayList<>(values.length); + + try { + for (String string : values) { + V value = parseId(this.registry, string); + if (value != null && filter.test(value)) items.add(value); + } + } catch (Exception ignored) {} + + return transferCollection(items); + } + + @Override + protected boolean isValueValid(C value) { + return true; + } + + @Override + public final Iterable getIdentifierSuggestions() { + return this.registry.getIds(); + } + + @Override + protected NbtCompound save(NbtCompound tag) { + NbtList valueTag = new NbtList(); + for (V value : get()) { + valueTag.add(NbtString.of(this.registry.getId(value).toString())); + } + tag.put("value", valueTag); + + return tag; + } + + @Override + protected C load(NbtCompound tag) { + get().clear(); + + NbtList valueTag = tag.getListOrEmpty("value"); + for (NbtElement tagI : valueTag) { + V value = this.registry.get(Identifier.of(tagI.asString().orElse(""))); + if (value == null) continue; + + if (filter.test(value)) get().add(value); + } + + return get(); + } + +} diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java index 5d49ac76dd..97aad3bfb8 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockListSetting.java @@ -5,93 +5,36 @@ package meteordevelopment.meteorclient.settings; +import com.google.common.base.Predicates; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import net.minecraft.block.Block; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtString; import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; -public class BlockListSetting extends Setting> { - public final Predicate filter; - - public BlockListSetting(String name, String description, List defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, Predicate filter, IVisible visible) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); - - this.filter = filter; - } - - @Override - public void resetImpl() { - value = new ArrayList<>(defaultValue); - } - - @Override - protected List parseImpl(String str) { - String[] values = str.split(","); - List blocks = new ArrayList<>(values.length); - - try { - for (String value : values) { - Block block = parseId(Registries.BLOCK, value); - if (block != null && (filter == null || filter.test(block))) blocks.add(block); - } - } catch (Exception ignored) {} - - return blocks; - } - - @Override - protected boolean isValueValid(List value) { - return true; +public class BlockListSetting extends AbstractRegistryListSetting, Block> { + public BlockListSetting(String name, String description, Set defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, Predicate filter, IVisible visible) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible, filter, Registries.BLOCK); } @Override - public Iterable getIdentifierSuggestions() { - return Registries.BLOCK.getIds(); - } - - @Override - protected NbtCompound save(NbtCompound tag) { - NbtList valueTag = new NbtList(); - for (Block block : get()) { - valueTag.add(NbtString.of(Registries.BLOCK.getId(block).toString())); - } - tag.put("value", valueTag); - - return tag; - } - - @Override - protected List load(NbtCompound tag) { - get().clear(); - - NbtList valueTag = tag.getListOrEmpty("value"); - for (NbtElement tagI : valueTag) { - Block block = Registries.BLOCK.get(Identifier.of(tagI.asString().orElse(""))); - - if (filter == null || filter.test(block)) get().add(block); - } - - return get(); + protected Set transferCollection(Collection from) { + return new ReferenceOpenHashSet<>(from); } - public static class Builder extends SettingBuilder, BlockListSetting> { - private Predicate filter; + public static class Builder extends SettingBuilder, BlockListSetting> { + private Predicate filter = Predicates.alwaysTrue(); public Builder() { - super(new ArrayList<>(0)); + super(Collections.emptySet()); } public Builder defaultValue(Block... defaults) { - return defaultValue(defaults != null ? Arrays.asList(defaults) : new ArrayList<>()); + return defaultValue(defaults != null ? ReferenceOpenHashSet.of(defaults) : new ReferenceOpenHashSet<>()); } public Builder filter(Predicate filter) { diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java index 0700964b72..6a2ecb148e 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BlockSetting.java @@ -6,72 +6,17 @@ package meteordevelopment.meteorclient.settings; import net.minecraft.block.Block; -import net.minecraft.nbt.NbtCompound; import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import java.util.function.Consumer; import java.util.function.Predicate; -public class BlockSetting extends Setting { - public final Predicate filter; - +public class BlockSetting extends AbstractRegistryItemSetting { public BlockSetting(String name, String description, Block defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, Predicate filter) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); - - this.filter = filter; - } - - @Override - protected Block parseImpl(String str) { - return parseId(Registries.BLOCK, str); - } - - @Override - protected boolean isValueValid(Block value) { - return filter == null || filter.test(value); - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.BLOCK.getIds(); - } - - @Override - protected NbtCompound save(NbtCompound tag) { - tag.putString("value", Registries.BLOCK.getId(get()).toString()); - - return tag; + super(name, description, defaultValue, onChanged, onModuleActivated, visible, filter, Registries.BLOCK); } - @Override - protected Block load(NbtCompound tag) { - value = Registries.BLOCK.get(Identifier.of(tag.getString("value", ""))); - - if (filter != null && !filter.test(value)) { - for (Block block : Registries.BLOCK) { - if (filter.test(block)) { - value = block; - break; - } - } - } - - return get(); - } - - public static class Builder extends SettingBuilder { - private Predicate filter; - - public Builder() { - super(null); - } - - public Builder filter(Predicate filter) { - this.filter = filter; - return this; - } - + public static class Builder extends AbstractBuilder { @Override public BlockSetting build() { return new BlockSetting(name, description, defaultValue, onChanged, onModuleActivated, visible, filter); diff --git a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java index b554923443..e7c88a8871 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/BoolSetting.java @@ -31,7 +31,7 @@ protected boolean isValueValid(Boolean value) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { return SUGGESTIONS; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java index 930124b3ea..920afd927b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ColorSetting.java @@ -43,7 +43,7 @@ protected boolean isValueValid(SettingColor value) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { return SUGGESTIONS; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java index b716b4c219..276103dea3 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EntityTypeListSetting.java @@ -88,7 +88,7 @@ protected boolean isValueValid(Set> value) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { if (suggestions == null) { suggestions = new ArrayList<>(groups); for (EntityType entityType : Registries.ENTITY_TYPE) { diff --git a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java index fae07d2770..cd989e253b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/EnumSetting.java @@ -5,33 +5,27 @@ package meteordevelopment.meteorclient.settings; +import it.unimi.dsi.fastutil.objects.Object2ObjectRBTreeMap; import net.minecraft.nbt.NbtCompound; -import java.util.ArrayList; -import java.util.List; +import java.util.Map; import java.util.function.Consumer; public class EnumSetting> extends Setting { - private final T[] values; - - private final List suggestions; + private final Map nameToValueMap = new Object2ObjectRBTreeMap<>(String.CASE_INSENSITIVE_ORDER); @SuppressWarnings("unchecked") public EnumSetting(String name, String description, T defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible) { super(name, description, defaultValue, onChanged, onModuleActivated, visible); - values = (T[]) defaultValue.getDeclaringClass().getEnumConstants(); - suggestions = new ArrayList<>(values.length); - for (T value : values) suggestions.add(value.toString()); + for (Object t : defaultValue.getDeclaringClass().getEnumConstants()) { + nameToValueMap.put(t.toString(), (T) t); + } } @Override protected T parseImpl(String str) { - for (T possibleValue : values) { - if (str.equalsIgnoreCase(possibleValue.toString())) return possibleValue; - } - - return null; + return nameToValueMap.get(str); } @Override @@ -40,8 +34,8 @@ protected boolean isValueValid(T value) { } @Override - public List getSuggestions() { - return suggestions; + public Iterable getSuggestions() { + return nameToValueMap.keySet(); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/settings/FontFaceSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/FontFaceSetting.java index 3ed272c878..366988c1c2 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/FontFaceSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/FontFaceSetting.java @@ -39,7 +39,7 @@ protected FontFace parseImpl(String str) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { return List.of("JetBrainsMono-Regular", "Arial-Bold"); } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java index 89da126639..0ca2cd8c1b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemListSetting.java @@ -5,6 +5,8 @@ package meteordevelopment.meteorclient.settings; +import com.google.common.base.Predicates; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import net.minecraft.item.Item; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; @@ -13,55 +15,27 @@ import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; -public class ItemListSetting extends Setting> { - public final Predicate filter; +public class ItemListSetting extends AbstractRegistryListSetting, Item> { private final boolean bypassFilterWhenSavingAndLoading; - public ItemListSetting(String name, String description, List defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, IVisible visible, Predicate filter, boolean bypassFilterWhenSavingAndLoading) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); - - this.filter = filter; + public ItemListSetting(String name, String description, Set defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, IVisible visible, Predicate filter, boolean bypassFilterWhenSavingAndLoading) { + super(name, description, defaultValue, onChanged, onModuleActivated, visible, filter, Registries.ITEM); this.bypassFilterWhenSavingAndLoading = bypassFilterWhenSavingAndLoading; } @Override - protected List parseImpl(String str) { - String[] values = str.split(","); - List items = new ArrayList<>(values.length); - - try { - for (String value : values) { - Item item = parseId(Registries.ITEM, value); - if (item != null && (filter == null || filter.test(item))) items.add(item); - } - } catch (Exception ignored) {} - - return items; - } - - @Override - public void resetImpl() { - value = new ArrayList<>(defaultValue); - } - - @Override - protected boolean isValueValid(List value) { - return true; - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.ITEM.getIds(); + protected Set transferCollection(Collection from) { + return new ReferenceOpenHashSet<>(from); } @Override - public NbtCompound save(NbtCompound tag) { + protected NbtCompound save(NbtCompound tag) { NbtList valueTag = new NbtList(); for (Item item : get()) { if (bypassFilterWhenSavingAndLoading || (filter == null || filter.test(item))) valueTag.add(NbtString.of(Registries.ITEM.getId(item).toString())); @@ -72,7 +46,7 @@ public NbtCompound save(NbtCompound tag) { } @Override - public List load(NbtCompound tag) { + public Set load(NbtCompound tag) { get().clear(); NbtList valueTag = tag.getListOrEmpty("value"); @@ -85,16 +59,16 @@ public List load(NbtCompound tag) { return get(); } - public static class Builder extends SettingBuilder, ItemListSetting> { - private Predicate filter; + public static class Builder extends SettingBuilder, ItemListSetting> { + private Predicate filter = Predicates.alwaysTrue(); private boolean bypassFilterWhenSavingAndLoading; public Builder() { - super(new ArrayList<>(0)); + super(Collections.emptySet()); } public Builder defaultValue(Item... defaults) { - return defaultValue(defaults != null ? Arrays.asList(defaults) : new ArrayList<>()); + return defaultValue(defaults != null ? ReferenceOpenHashSet.of(defaults) : new ReferenceOpenHashSet<>()); } public Builder filter(Predicate filter) { diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java index 05e65c66a2..d66511470e 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ItemSetting.java @@ -6,72 +6,17 @@ package meteordevelopment.meteorclient.settings; import net.minecraft.item.Item; -import net.minecraft.nbt.NbtCompound; import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import java.util.function.Consumer; import java.util.function.Predicate; -public class ItemSetting extends Setting { - public final Predicate filter; - +public class ItemSetting extends AbstractRegistryItemSetting { public ItemSetting(String name, String description, Item defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, Predicate filter) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); - - this.filter = filter; - } - - @Override - protected Item parseImpl(String str) { - return parseId(Registries.ITEM, str); - } - - @Override - protected boolean isValueValid(Item value) { - return filter == null || filter.test(value); - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.ITEM.getIds(); - } - - @Override - public NbtCompound save(NbtCompound tag) { - tag.putString("value", Registries.ITEM.getId(get()).toString()); - - return tag; + super(name, description, defaultValue, onChanged, onModuleActivated, visible, filter, Registries.ITEM); } - @Override - public Item load(NbtCompound tag) { - value = Registries.ITEM.get(Identifier.of(tag.getString("value",""))); - - if (filter != null && !filter.test(value)) { - for (Item item : Registries.ITEM) { - if (filter.test(item)) { - value = item; - break; - } - } - } - - return get(); - } - - public static class Builder extends SettingBuilder { - private Predicate filter; - - public Builder() { - super(null); - } - - public Builder filter(Predicate filter) { - this.filter = filter; - return this; - } - + public static class Builder extends AbstractBuilder { @Override public ItemSetting build() { return new ItemSetting(name, description, defaultValue, onChanged, onModuleActivated, visible, filter); 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/settings/ModuleListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ModuleListSetting.java index 6000407ca4..4b4ab2e1ad 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ModuleListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ModuleListSetting.java @@ -49,7 +49,7 @@ protected boolean isValueValid(List value) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { if (suggestions == null) { suggestions = new ArrayList<>(Modules.get().getAll().size()); for (Module module : Modules.get().getAll()) suggestions.add(module.name); diff --git a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java index a0197e0f4f..0435dabd40 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/PacketListSetting.java @@ -55,7 +55,7 @@ protected boolean isValueValid(Set>> value) { } @Override - public List getSuggestions() { + public Iterable getSuggestions() { if (suggestions == null) { suggestions = new ArrayList<>(PacketUtils.getC2SPackets().size() + PacketUtils.getS2CPackets().size()); diff --git a/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java index 6767344ede..5161cd213b 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/ParticleTypeListSetting.java @@ -5,78 +5,24 @@ package meteordevelopment.meteorclient.settings; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtString; -import net.minecraft.particle.ParticleEffect; +import com.google.common.base.Predicates; import net.minecraft.particle.ParticleType; import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.function.Consumer; -public class ParticleTypeListSetting extends Setting>> { +public class ParticleTypeListSetting extends AbstractRegistryListSetting>, ParticleType> { public ParticleTypeListSetting(String name, String description, List> defaultValue, Consumer>> onChanged, Consumer>>> onModuleActivated, IVisible visible) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); + super(name, description, defaultValue, onChanged, onModuleActivated, visible, Predicates.alwaysTrue(), Registries.PARTICLE_TYPE); } @Override - public void resetImpl() { - value = new ArrayList<>(defaultValue); - } - - @Override - protected List> parseImpl(String str) { - String[] values = str.split(","); - List> particleTypes = new ArrayList<>(values.length); - - try { - for (String value : values) { - ParticleType particleType = parseId(Registries.PARTICLE_TYPE, value); - if (particleType instanceof ParticleEffect) particleTypes.add(particleType); - } - } catch (Exception ignored) {} - - return particleTypes; - } - - @Override - protected boolean isValueValid(List> value) { - return true; - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.PARTICLE_TYPE.getIds(); - } - - @Override - public NbtCompound save(NbtCompound tag) { - NbtList valueTag = new NbtList(); - for (ParticleType particleType : get()) { - Identifier id = Registries.PARTICLE_TYPE.getId(particleType); - if (id != null) valueTag.add(NbtString.of(id.toString())); - } - tag.put("value", valueTag); - - return tag; - } - - @Override - public List> load(NbtCompound tag) { - get().clear(); - - NbtList valueTag = tag.getListOrEmpty("value"); - for (NbtElement tagI : valueTag) { - ParticleType particleType = Registries.PARTICLE_TYPE.get(Identifier.of(tagI.asString().orElse(""))); - if (particleType != null) get().add(particleType); - } - - return get(); + protected List> transferCollection(Collection> from) { + return new ArrayList<>(from); } public static class Builder extends SettingBuilder>, ParticleTypeListSetting> { diff --git a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java b/src/main/java/meteordevelopment/meteorclient/settings/Setting.java index 443fe390fe..f02bbd1a24 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/Setting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/Setting.java @@ -14,14 +14,11 @@ import net.minecraft.util.Identifier; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.List; +import java.util.Collections; import java.util.Objects; import java.util.function.Consumer; public abstract class Setting implements IGetter, ISerializable { - private static final List NO_SUGGESTIONS = new ArrayList<>(0); - public final String name, title, description; private final IVisible visible; @@ -108,8 +105,8 @@ public Iterable getIdentifierSuggestions() { return null; } - public List getSuggestions() { - return NO_SUGGESTIONS; + public Iterable getSuggestions() { + return Collections.emptyList(); } protected abstract NbtCompound save(NbtCompound tag); @@ -158,7 +155,7 @@ public static T parseId(Registry registry, String name) { Identifier id; if (name.contains(":")) id = Identifier.of(name); - else id = Identifier.of("minecraft", name); + else id = Identifier.ofVanilla(name); if (registry.containsId(id)) return registry.get(id); return null; diff --git a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java index f516843a4c..2a1a5e7973 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/SoundEventListSetting.java @@ -5,76 +5,24 @@ package meteordevelopment.meteorclient.settings; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtString; +import com.google.common.base.Predicates; import net.minecraft.registry.Registries; import net.minecraft.sound.SoundEvent; -import net.minecraft.util.Identifier; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.function.Consumer; -public class SoundEventListSetting extends Setting> { +public class SoundEventListSetting extends AbstractRegistryListSetting, SoundEvent> { public SoundEventListSetting(String name, String description, List defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, IVisible visible) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); + super(name, description, defaultValue, onChanged, onModuleActivated, visible, Predicates.alwaysTrue(), Registries.SOUND_EVENT); } @Override - public void resetImpl() { - value = new ArrayList<>(defaultValue); - } - - @Override - protected List parseImpl(String str) { - String[] values = str.split(","); - List sounds = new ArrayList<>(values.length); - - try { - for (String value : values) { - SoundEvent sound = parseId(Registries.SOUND_EVENT, value); - if (sound != null) sounds.add(sound); - } - } catch (Exception ignored) {} - - return sounds; - } - - @Override - protected boolean isValueValid(List value) { - return true; - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.SOUND_EVENT.getIds(); - } - - @Override - public NbtCompound save(NbtCompound tag) { - NbtList valueTag = new NbtList(); - for (SoundEvent sound : get()) { - Identifier id = Registries.SOUND_EVENT.getId(sound); - if (id != null) valueTag.add(NbtString.of(id.toString())); - } - tag.put("value", valueTag); - - return tag; - } - - @Override - public List load(NbtCompound tag) { - get().clear(); - - for (NbtElement tagI : tag.getListOrEmpty("value")) { - SoundEvent soundEvent = Registries.SOUND_EVENT.get(Identifier.of(tagI.asString().orElse(""))); - if (soundEvent != null) get().add(soundEvent); - } - - return get(); + protected List transferCollection(Collection from) { + return new ArrayList<>(from); } public static class Builder extends SettingBuilder, SoundEventListSetting> { diff --git a/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java index e4335ca2d8..66ed60a00d 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/StatusEffectListSetting.java @@ -5,77 +5,24 @@ package meteordevelopment.meteorclient.settings; +import com.google.common.base.Predicates; import net.minecraft.entity.effect.StatusEffect; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.nbt.NbtList; -import net.minecraft.nbt.NbtString; import net.minecraft.registry.Registries; -import net.minecraft.util.Identifier; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.function.Consumer; -public class StatusEffectListSetting extends Setting> { +public class StatusEffectListSetting extends AbstractRegistryListSetting, StatusEffect> { public StatusEffectListSetting(String name, String description, List defaultValue, Consumer> onChanged, Consumer>> onModuleActivated, IVisible visible) { - super(name, description, defaultValue, onChanged, onModuleActivated, visible); + super(name, description, defaultValue, onChanged, onModuleActivated, visible, Predicates.alwaysTrue(), Registries.STATUS_EFFECT); } @Override - public void resetImpl() { - value = new ArrayList<>(defaultValue); - } - - @Override - protected List parseImpl(String str) { - String[] values = str.split(","); - List effects = new ArrayList<>(values.length); - - try { - for (String value : values) { - StatusEffect effect = parseId(Registries.STATUS_EFFECT, value); - if (effect != null) effects.add(effect); - } - } catch (Exception ignored) {} - - return effects; - } - - @Override - protected boolean isValueValid(List value) { - return true; - } - - @Override - public Iterable getIdentifierSuggestions() { - return Registries.STATUS_EFFECT.getIds(); - } - - @Override - public NbtCompound save(NbtCompound tag) { - NbtList valueTag = new NbtList(); - - for (StatusEffect effect : get()) { - Identifier id = Registries.STATUS_EFFECT.getId(effect); - if (id != null) valueTag.add(NbtString.of(id.toString())); - } - tag.put("value", valueTag); - - return tag; - } - - @Override - public List load(NbtCompound tag) { - get().clear(); - - for (NbtElement tagI : tag.getListOrEmpty("value")) { - StatusEffect effect = Registries.STATUS_EFFECT.get(Identifier.of(tagI.asString().orElse(""))); - if (effect != null) get().add(effect); - } - - return get(); + protected List transferCollection(Collection from) { + return new ArrayList<>(from); } public static class Builder extends SettingBuilder, StatusEffectListSetting> { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java index 3b5e19e151..30c4734ce9 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; @@ -20,8 +19,10 @@ 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; import net.minecraft.util.Util; import java.nio.file.Path; @@ -44,8 +45,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 +67,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.getApiServices().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.getApiServices(), new PlayerSkinTextureDownloader(mc.getNetworkProxy(), mc.getTextureManager(), mc), mc)); } @Override 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..663f63ff15 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; @@ -25,8 +23,8 @@ 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 YggdrasilAuthenticationService SERVICE = new YggdrasilAuthenticationService(((MinecraftClientAccessor) mc).meteor$getProxy(), ENVIRONMENT); + 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; @@ -42,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; @@ -59,10 +57,10 @@ 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(), Session.AccountType.MOJANG)); + 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/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/hud/elements/HoleHud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/HoleHud.java index da963f4230..7929e536ac 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/HoleHud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/HoleHud.java @@ -18,7 +18,7 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.math.MathHelper; -import java.util.List; +import java.util.Set; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -31,7 +31,7 @@ public class HoleHud extends HudElement { // General - public final Setting> safe = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> safe = sgGeneral.add(new BlockListSetting.Builder() .name("safe-blocks") .description("Which blocks to consider safe.") .defaultValue(Blocks.OBSIDIAN, Blocks.BEDROCK, Blocks.CRYING_OBSIDIAN, Blocks.NETHERITE_BLOCK) 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..5f0f5f1858 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -16,8 +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.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; @@ -65,13 +67,16 @@ public HudEditorScreen(GuiTheme theme) { public void initWidgets() {} @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click arg, boolean doubled) { 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.button() == 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(Click 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.button() == 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.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); } else { - if (button == 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 (button == 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)); @@ -141,7 +149,7 @@ else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } } - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (arg.button() == 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(KeyInput 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/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..9d322a9627 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; @@ -30,8 +30,8 @@ import meteordevelopment.meteorclient.systems.modules.render.*; import meteordevelopment.meteorclient.systems.modules.render.blockesp.BlockESP; import meteordevelopment.meteorclient.systems.modules.render.marker.Marker; -import meteordevelopment.meteorclient.systems.modules.world.Timer; import meteordevelopment.meteorclient.systems.modules.world.*; +import meteordevelopment.meteorclient.systems.modules.world.Timer; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.misc.Keybind; import meteordevelopment.meteorclient.utils.misc.ValueComparableMap; @@ -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/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/AutoTrap.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoTrap.java index d22367c277..117c451ae7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoTrap.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoTrap.java @@ -25,17 +25,13 @@ import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Box; -import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.RaycastContext; -import java.util.Set; -import java.util.LinkedHashSet; -import java.util.ArrayList; -import java.util.List; -import java.util.Comparator; +import java.util.*; public class AutoTrap extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -43,7 +39,7 @@ public class AutoTrap extends Module { // General - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("whitelist") .description("Which blocks to use.") .defaultValue(Blocks.OBSIDIAN, Blocks.CRYING_OBSIDIAN) 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/BedAura.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java index 366a95cf4c..a7a0024954 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java @@ -16,7 +16,10 @@ import meteordevelopment.meteorclient.utils.entity.EntityUtils; import meteordevelopment.meteorclient.utils.entity.SortPriority; import meteordevelopment.meteorclient.utils.entity.TargetUtils; -import meteordevelopment.meteorclient.utils.player.*; +import meteordevelopment.meteorclient.utils.player.FindItemResult; +import meteordevelopment.meteorclient.utils.player.InvUtils; +import meteordevelopment.meteorclient.utils.player.PlayerUtils; +import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.meteorclient.utils.render.color.SettingColor; import meteordevelopment.meteorclient.utils.world.BlockUtils; import meteordevelopment.meteorclient.utils.world.CardinalDirection; 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/Burrow.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java index 232ea1837c..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.key, 0)) { + 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/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..59f9cca06c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java @@ -36,13 +36,14 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; public class HoleFiller extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgSmart = settings.createGroup("Smart"); private final SettingGroup sgRender = settings.createGroup("Render"); - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Which blocks can be used to fill holes.") .defaultValue( @@ -385,7 +386,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/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/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/combat/SelfTrap.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/SelfTrap.java index d1706de6b9..b3b84859cb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/SelfTrap.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/SelfTrap.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; public class SelfTrap extends Module { public enum TopMode { @@ -43,7 +44,7 @@ public enum BottomMode { // General - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("whitelist") .description("Which blocks to use.") .defaultValue(Blocks.OBSIDIAN, Blocks.NETHERITE_BLOCK) 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..2f0d6f0b65 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java @@ -39,6 +39,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.function.Predicate; public class Surround extends Module { @@ -48,7 +49,7 @@ public class Surround extends Module { // General - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("What blocks to use for surround.") .defaultValue(Blocks.OBSIDIAN, Blocks.CRYING_OBSIDIAN, Blocks.NETHERITE_BLOCK) @@ -378,7 +379,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/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/InventoryTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java index d9b4106e49..e135040b59 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; @@ -39,6 +39,7 @@ import org.lwjgl.glfw.GLFW; import java.util.List; +import java.util.Set; import java.util.concurrent.ThreadLocalRandom; public class InventoryTweaks extends Module { @@ -106,7 +107,7 @@ public class InventoryTweaks extends Module { // Anti drop - private final Setting> antiDropItems = sgAntiDrop.add(new ItemListSetting.Builder() + private final Setting> antiDropItems = sgAntiDrop.add(new ItemListSetting.Builder() .name("anti-drop-items") .description("Items to prevent dropping. Doesn't work in creative inventory screen.") .build() @@ -127,7 +128,7 @@ public class InventoryTweaks extends Module { // Auto Drop - private final Setting> autoDropItems = sgAutoDrop.add(new ItemListSetting.Builder() + private final Setting> autoDropItems = sgAutoDrop.add(new ItemListSetting.Builder() .name("auto-drop-items") .description("Items to drop.") .build() @@ -192,7 +193,7 @@ public class InventoryTweaks extends Module { .build() ); - private final Setting> dumpItems = sgStealDump.add(new ItemListSetting.Builder() + private final Setting> dumpItems = sgStealDump.add(new ItemListSetting.Builder() .name("dump-items") .description("Items to dump.") .build() @@ -205,7 +206,7 @@ public class InventoryTweaks extends Module { .build() ); - private final Setting> stealItems = sgStealDump.add(new ItemListSetting.Builder() + private final Setting> stealItems = sgStealDump.add(new ItemListSetting.Builder() .name("steal-items") .description("Items to steal.") .build() @@ -281,16 +282,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/misc/Notifier.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notifier.java index 70f4156986..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); } @@ -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/AirJump.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/AirJump.java index 6cf2293681..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.key, 0)) { + if (mc.options.jumpKey.matchesKey(event.input)) { level = mc.player.getBlockPos().getY(); mc.player.jump(); } - else if (mc.options.sneakKey.matchesKey(event.key, 0)) { + 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 42320ed2fc..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; @@ -23,6 +23,8 @@ import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.KeyInput; 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.input) && event.action == KeyAction.Press) onMovement(); } @EventHandler - private void onMouseButton(MouseButtonEvent event) { - if (isMovementButton(event.button) && event.action == KeyAction.Press) onMovement(); + private void onMouseClick(MouseClickEvent event) { + if (isMovementButton(event.click) && 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(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 isMovementButton(int 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/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 28f1817c2e..d5305d412e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Blink.java @@ -66,14 +66,14 @@ 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; 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/Flight.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Flight.java index e882d06ac6..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.getWorld().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/movement/GUIMove.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java index a8ec88e3f4..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.key, 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, 0)) 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/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..f57851d104 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java @@ -29,12 +29,13 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Set; public class Scaffold extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgRender = settings.createGroup("Render"); - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Selected blocks.") .build() @@ -190,11 +191,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 +214,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 +242,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/Slippy.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Slippy.java index 18ee10e8d7..c3491afc3a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Slippy.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Slippy.java @@ -10,7 +10,7 @@ import meteordevelopment.meteorclient.systems.modules.Module; import net.minecraft.block.Block; -import java.util.List; +import java.util.Set; public class Slippy extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -31,14 +31,14 @@ public class Slippy extends Module { .build() ); - public final Setting> ignoredBlocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> ignoredBlocks = sgGeneral.add(new BlockListSetting.Builder() .name("ignored-blocks") .description("Decide which blocks not to slip on") .visible(() -> listMode.get() == ListMode.Blacklist) .build() ); - public final Setting> allowedBlocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> allowedBlocks = sgGeneral.add(new BlockListSetting.Builder() .name("allowed-blocks") .description("Decide which blocks to slip on") .visible(() -> listMode.get() == ListMode.Whitelist) 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/Velocity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java index b930f6927a..8a682caabc 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.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) + ); } } 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/AutoEat.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoEat.java index 26dec3ad27..5fa9bfa6bb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoEat.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoEat.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.function.BiPredicate; public class AutoEat extends Module { @@ -39,7 +40,7 @@ public class AutoEat extends Module { private final SettingGroup sgThreshold = settings.createGroup("Threshold"); // General - public final Setting> blacklist = sgGeneral.add(new ItemListSetting.Builder() + public final Setting> blacklist = sgGeneral.add(new ItemListSetting.Builder() .name("blacklist") .description("Which items to not eat.") .defaultValue( diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java index 569400a272..02bd176bbc 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoMend.java @@ -20,12 +20,12 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import java.util.List; +import java.util.Set; public class AutoMend extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - private final Setting> blacklist = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> blacklist = sgGeneral.add(new ItemListSetting.Builder() .name("blacklist") .description("Item blacklist.") .filter(item -> item.getComponents().get(DataComponentTypes.DAMAGE) != null) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoReplenish.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoReplenish.java index 1f3fa9a9fc..a7d7722084 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoReplenish.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoReplenish.java @@ -18,7 +18,7 @@ import net.minecraft.item.Items; import java.util.Arrays; -import java.util.List; +import java.util.Set; public class AutoReplenish extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -69,7 +69,7 @@ public class AutoReplenish extends Module { .build() ); - private final Setting> excludedItems = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> excludedItems = sgGeneral.add(new ItemListSetting.Builder() .name("excluded-items") .description("Items that won't be replenished.") .build() 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/player/AutoTool.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoTool.java index fdc6774c86..53d9f505cc 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoTool.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoTool.java @@ -28,7 +28,7 @@ import net.minecraft.registry.tag.BlockTags; import net.minecraft.registry.tag.ItemTags; -import java.util.List; +import java.util.Set; import java.util.function.Predicate; public class AutoTool extends Module { @@ -98,7 +98,7 @@ public class AutoTool extends Module { .build() ); - private final Setting> whitelist = sgWhitelist.add(new ItemListSetting.Builder() + private final Setting> whitelist = sgWhitelist.add(new ItemListSetting.Builder() .name("whitelist") .description("The tools you want to use.") .visible(() -> listMode.get() == ListMode.Whitelist) @@ -106,7 +106,7 @@ public class AutoTool extends Module { .build() ); - private final Setting> blacklist = sgWhitelist.add(new ItemListSetting.Builder() + private final Setting> blacklist = sgWhitelist.add(new ItemListSetting.Builder() .name("blacklist") .description("The tools you don't want to use.") .visible(() -> listMode.get() == ListMode.Blacklist) 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/FastUse.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/FastUse.java index 0a17c7d48a..5b88f3b9aa 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/FastUse.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/FastUse.java @@ -12,7 +12,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import java.util.List; +import java.util.Set; public class FastUse extends Module { public enum Mode { @@ -29,7 +29,7 @@ public enum Mode { .build() ); - private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() .name("items") .description("Which items should fast place work on in \"Some\" mode.") .visible(() -> mode.get() == Mode.Some) 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/player/NoInteract.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoInteract.java index 4bea37d511..757c9a8e11 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoInteract.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoInteract.java @@ -24,7 +24,6 @@ import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; -import java.util.List; import java.util.Set; public class NoInteract extends Module { @@ -33,7 +32,7 @@ public class NoInteract extends Module { // Blocks - private final Setting> blockMine = sgBlocks.add(new BlockListSetting.Builder() + private final Setting> blockMine = sgBlocks.add(new BlockListSetting.Builder() .name("block-mine") .description("Cancels block mining.") .build() @@ -46,7 +45,7 @@ public class NoInteract extends Module { .build() ); - private final Setting> blockInteract = sgBlocks.add(new BlockListSetting.Builder() + private final Setting> blockInteract = sgBlocks.add(new BlockListSetting.Builder() .name("block-interact") .description("Cancels block interaction.") .build() 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/player/NoStatusEffects.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoStatusEffects.java index 85e8c3cc0c..f7d1df7ec4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoStatusEffects.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoStatusEffects.java @@ -5,7 +5,9 @@ package meteordevelopment.meteorclient.systems.modules.player; -import meteordevelopment.meteorclient.settings.*; +import meteordevelopment.meteorclient.settings.Setting; +import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.settings.StatusEffectListSetting; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import net.minecraft.entity.effect.StatusEffect; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SpeedMine.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SpeedMine.java index 1f5f738693..faa83b8327 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SpeedMine.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/SpeedMine.java @@ -18,7 +18,7 @@ import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket; import net.minecraft.util.math.BlockPos; -import java.util.List; +import java.util.Set; import static net.minecraft.entity.effect.StatusEffects.HASTE; @@ -32,7 +32,7 @@ public class SpeedMine extends Module { .build() ); - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Selected blocks.") .filter(block -> block.getHardness() > 0) 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/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/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/Freecam.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java index e79ba5a800..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; @@ -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); @@ -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.key, 0)) { - forward = event.action != KeyAction.Release; - mc.options.forwardKey.setPressed(false); - } - else if (mc.options.backKey.matchesKey(event.key, 0)) { - backward = event.action != KeyAction.Release; - mc.options.backKey.setPressed(false); - } - else if (mc.options.rightKey.matchesKey(event.key, 0)) { - right = event.action != KeyAction.Release; - mc.options.rightKey.setPressed(false); - } - else if (mc.options.leftKey.matchesKey(event.key, 0)) { - left = event.action != KeyAction.Release; - mc.options.leftKey.setPressed(false); - } - else if (mc.options.jumpKey.matchesKey(event.key, 0)) { - up = event.action != KeyAction.Release; - mc.options.jumpKey.setPressed(false); - } - else if (mc.options.sneakKey.matchesKey(event.key, 0)) { - 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.button)) { - 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.button)) { - 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.button)) { - 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.button)) { - 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.button)) { - 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.button)) { - 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/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/ItemHighlight.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemHighlight.java index 3b4d786bb1..03c87b7f0f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemHighlight.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemHighlight.java @@ -15,12 +15,12 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import java.util.List; +import java.util.Set; public class ItemHighlight extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() .name("items") .description("Items to highlight.") .build() 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/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/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/systems/modules/render/NoRender.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java index a6503f91ce..1a2e8c9798 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.") @@ -322,7 +315,7 @@ public class NoRender extends Module { .build() ); - private final Setting> blockEntities = sgWorld.add(new BlockListSetting.Builder() + private final Setting> blockEntities = sgWorld.add(new BlockListSetting.Builder() .name("block-entities") .description("Block entities (chest, shulker block, etc.) to not render.") .filter(block -> block instanceof BlockEntityProvider && !(block instanceof AbstractBannerBlock)) @@ -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.blockEntity.getCachedState().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/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/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/systems/modules/render/Trajectories.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Trajectories.java index 373344d28e..bbe2237246 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Trajectories.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Trajectories.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.settings.*; @@ -31,6 +32,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; public class Trajectories extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -38,11 +40,11 @@ public class Trajectories extends Module { // General - private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> items = sgGeneral.add(new ItemListSetting.Builder() .name("items") .description("Items to display trajectories for.") - .defaultValue(getDefaultItems()) - .filter(this::itemFilter) + .defaultValue(Registries.ITEM.stream().filter(Trajectories::itemFilter).collect(ReferenceOpenHashSet.toSet())) + .filter(Trajectories::itemFilter) .build() ); @@ -141,22 +143,12 @@ public Trajectories() { super(Categories.Render, "trajectories", "Predicts the trajectory of throwable items."); } - private boolean itemFilter(Item item) { + private static boolean itemFilter(Item item) { return item instanceof RangedWeaponItem || item instanceof FishingRodItem || item instanceof TridentItem || item instanceof SnowballItem || item instanceof EggItem || item instanceof EnderPearlItem || item instanceof ExperienceBottleItem || item instanceof ThrowablePotionItem || item instanceof WindChargeItem; } - private List getDefaultItems() { - List items = new ArrayList<>(); - - for (Item item : Registries.ITEM) { - if (itemFilter(item)) items.add(item); - } - - return items; - } - private Path getEmptyPath() { for (Path path : paths) { if (path.points.isEmpty()) return path; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WallHack.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WallHack.java index be042352c5..21e01b5a5f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WallHack.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WallHack.java @@ -16,7 +16,7 @@ import net.irisshaders.iris.api.v0.IrisApi; import net.minecraft.block.Block; -import java.util.List; +import java.util.Set; public class WallHack extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -35,7 +35,7 @@ public class WallHack extends Module { .build() ); - public final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("What blocks should be targeted for Wall Hack.") .defaultValue() 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/render/Xray.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java index 4664987c29..14146d7807 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import meteordevelopment.meteorclient.MixinPlugin; import meteordevelopment.meteorclient.events.render.RenderBlockEntityEvent; import meteordevelopment.meteorclient.events.world.AmbientOcclusionEvent; @@ -25,14 +26,14 @@ import net.minecraft.util.math.Direction; import net.minecraft.util.shape.VoxelShapes; -import java.util.List; +import java.util.Set; public class Xray extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - public static final List ORES = List.of(Blocks.COAL_ORE, Blocks.DEEPSLATE_COAL_ORE, Blocks.IRON_ORE, Blocks.DEEPSLATE_IRON_ORE, Blocks.GOLD_ORE, Blocks.DEEPSLATE_GOLD_ORE, Blocks.LAPIS_ORE, Blocks.DEEPSLATE_LAPIS_ORE, Blocks.REDSTONE_ORE, Blocks.DEEPSLATE_REDSTONE_ORE, Blocks.DIAMOND_ORE, Blocks.DEEPSLATE_DIAMOND_ORE, Blocks.EMERALD_ORE, Blocks.DEEPSLATE_EMERALD_ORE, Blocks.COPPER_ORE, Blocks.DEEPSLATE_COPPER_ORE, Blocks.NETHER_GOLD_ORE, Blocks.NETHER_QUARTZ_ORE, Blocks.ANCIENT_DEBRIS); + public static final Set ORES = ReferenceOpenHashSet.of(Blocks.COAL_ORE, Blocks.DEEPSLATE_COAL_ORE, Blocks.IRON_ORE, Blocks.DEEPSLATE_IRON_ORE, Blocks.GOLD_ORE, Blocks.DEEPSLATE_GOLD_ORE, Blocks.LAPIS_ORE, Blocks.DEEPSLATE_LAPIS_ORE, Blocks.REDSTONE_ORE, Blocks.DEEPSLATE_REDSTONE_ORE, Blocks.DIAMOND_ORE, Blocks.DEEPSLATE_DIAMOND_ORE, Blocks.EMERALD_ORE, Blocks.DEEPSLATE_EMERALD_ORE, Blocks.COPPER_ORE, Blocks.DEEPSLATE_COPPER_ORE, Blocks.NETHER_GOLD_ORE, Blocks.NETHER_QUARTZ_ORE, Blocks.ANCIENT_DEBRIS); - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("whitelist") .description("Which blocks to show x-rayed.") .defaultValue(ORES) @@ -87,7 +88,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.blockState.getBlock(), event.blockEntityState.pos)) event.cancel(); } @EventHandler 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/render/blockesp/BlockESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java index 3763cf98c9..d9f89b1ca4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/BlockESP.java @@ -28,7 +28,6 @@ import net.minecraft.world.chunk.Chunk; import java.util.Iterator; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; @@ -39,7 +38,7 @@ public class BlockESP extends Module { // General - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Blocks to search for.") .onChanged(blocks1 -> { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPChunk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPChunk.java index 0fac693cf3..f116134dc7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPChunk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/blockesp/ESPChunk.java @@ -15,7 +15,7 @@ import net.minecraft.world.Heightmap; import net.minecraft.world.chunk.Chunk; -import java.util.List; +import java.util.Collection; import static meteordevelopment.meteorclient.MeteorClient.mc; import static meteordevelopment.meteorclient.utils.Utils.getRenderDistance; @@ -86,7 +86,7 @@ public void render(Render3DEvent event) { } - public static ESPChunk searchChunk(Chunk chunk, List blocks) { + public static ESPChunk searchChunk(Chunk chunk, Collection blocks) { ESPChunk schunk = new ESPChunk(chunk.getPos().x, chunk.getPos().z); if (schunk.shouldBeDeleted()) return schunk; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java index 80c600eeeb..e51ebdc9a9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java @@ -20,12 +20,12 @@ import net.minecraft.recipe.RecipePropertySet; import net.minecraft.screen.AbstractFurnaceScreenHandler; -import java.util.List; +import java.util.Set; public class AutoSmelter extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - private final Setting> fuelItems = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> fuelItems = sgGeneral.add(new ItemListSetting.Builder() .name("fuel-items") .description("Items to use as fuel") .defaultValue(Items.COAL, Items.CHARCOAL) @@ -34,7 +34,7 @@ public class AutoSmelter extends Module { .build() ); - private final Setting> smeltableItems = sgGeneral.add(new ItemListSetting.Builder() + private final Setting> smeltableItems = sgGeneral.add(new ItemListSetting.Builder() .name("smeltable-items") .description("Items to smelt") .defaultValue(Items.IRON_ORE, Items.GOLD_ORE, Items.COPPER_ORE, Items.RAW_IRON, Items.RAW_COPPER, Items.RAW_GOLD) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java index ab424c1a0d..465b5f882b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java @@ -21,12 +21,12 @@ import net.minecraft.network.packet.c2s.play.VehicleMoveC2SPacket; import net.minecraft.util.shape.VoxelShapes; -import java.util.List; +import java.util.Set; public class Collisions extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); - public final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("What blocks should be added collision box.") .filter(this::blockFilter) 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/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..d8d75b55a9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java @@ -71,7 +71,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Iterator; -import java.util.List; +import java.util.Set; import java.util.function.Predicate; @SuppressWarnings("ConstantConditions") @@ -254,7 +254,7 @@ public enum BlockadeType { // Paving - public final Setting> blocksToPlace = sgPaving.add(new BlockListSetting.Builder() + public final Setting> blocksToPlace = sgPaving.add(new BlockListSetting.Builder() .name("blocks-to-place") .description("Blocks it is allowed to place.") .defaultValue(Blocks.OBSIDIAN) @@ -288,7 +288,7 @@ public enum BlockadeType { // Inventory - private final Setting> trashItems = sgInventory.add(new ItemListSetting.Builder() + private final Setting> trashItems = sgInventory.add(new ItemListSetting.Builder() .name("trash-items") .description("Items that are considered trash and can be thrown out.") .defaultValue( @@ -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/InfinityMiner.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/InfinityMiner.java index 18c85701c6..bfbe28e72b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/InfinityMiner.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/InfinityMiner.java @@ -31,7 +31,7 @@ import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; -import java.util.List; +import java.util.Set; import java.util.function.Predicate; public class InfinityMiner extends Module { @@ -40,7 +40,7 @@ public class InfinityMiner extends Module { // General - public final Setting> targetBlocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> targetBlocks = sgGeneral.add(new BlockListSetting.Builder() .name("target-blocks") .description("The target blocks to mine.") .defaultValue(Blocks.DIAMOND_ORE, Blocks.DEEPSLATE_DIAMOND_ORE) @@ -48,14 +48,14 @@ public class InfinityMiner extends Module { .build() ); - public final Setting> targetItems = sgGeneral.add(new ItemListSetting.Builder() + public final Setting> targetItems = sgGeneral.add(new ItemListSetting.Builder() .name("target-items") .description("The target items to collect.") .defaultValue(Items.DIAMOND) .build() ); - public final Setting> repairBlocks = sgGeneral.add(new BlockListSetting.Builder() + public final Setting> repairBlocks = sgGeneral.add(new BlockListSetting.Builder() .name("repair-blocks") .description("The repair blocks to mine.") .defaultValue(Blocks.COAL_ORE, Blocks.REDSTONE_ORE, Blocks.NETHER_QUARTZ_ORE) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/LiquidFiller.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/LiquidFiller.java index cd3b248e9e..368a9a4023 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/LiquidFiller.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/LiquidFiller.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; +import java.util.Set; public class LiquidFiller extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -105,7 +106,7 @@ public class LiquidFiller extends Module { .build() ); - private final Setting> whitelist = sgWhitelist.add(new BlockListSetting.Builder() + private final Setting> whitelist = sgWhitelist.add(new BlockListSetting.Builder() .name("whitelist") .description("The allowed blocks that it will use to fill up the liquid.") .defaultValue( @@ -121,7 +122,7 @@ public class LiquidFiller extends Module { .build() ); - private final Setting> blacklist = sgWhitelist.add(new BlockListSetting.Builder() + private final Setting> blacklist = sgWhitelist.add(new BlockListSetting.Builder() .name("blacklist") .description("The denied blocks that it not will use to fill up the liquid.") .visible(() -> listMode.get() == ListMode.Blacklist) 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..36588aa370 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; @@ -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() ); @@ -196,14 +196,14 @@ public class Nuker extends Module { .build() ); - private final Setting> blacklist = sgWhitelist.add(new BlockListSetting.Builder() + private final Setting> blacklist = sgWhitelist.add(new BlockListSetting.Builder() .name("blacklist") .description("The blocks you don't want to mine.") .visible(() -> listMode.get() == ListMode.Blacklist) .build() ); - private final Setting> whitelist = sgWhitelist.add(new BlockListSetting.Builder() + private final Setting> whitelist = sgWhitelist.add(new BlockListSetting.Builder() .name("whitelist") .description("The blocks you want to mine.") .visible(() -> listMode.get() == ListMode.Whitelist) @@ -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(); } @@ -532,11 +532,10 @@ private void addTargetedBlockToList() { BlockPos pos = ((BlockHitResult) hitResult).getBlockPos(); Block targetBlock = mc.world.getBlockState(pos).getBlock(); - List list = listMode.get() == ListMode.Whitelist ? whitelist.get() : blacklist.get(); + Set list = listMode.get() == ListMode.Whitelist ? whitelist.get() : blacklist.get(); String modeName = listMode.get().name(); - if (list.contains(targetBlock)) { - list.remove(targetBlock); + if (list.remove(targetBlock)) { info("Removed " + Names.get(targetBlock) + " from " + modeName); } else { list.add(targetBlock); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java index 5cb8b9df3e..36f6a15d5d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/SpawnProofer.java @@ -17,14 +17,15 @@ import meteordevelopment.meteorclient.utils.world.BlockUtils; import meteordevelopment.orbit.EventHandler; import net.minecraft.block.*; +import net.minecraft.util.hit.BlockHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3d; -import net.minecraft.util.hit.BlockHitResult; import net.minecraft.world.RaycastContext; import java.util.ArrayList; -import java.util.List; import java.util.Comparator; +import java.util.List; +import java.util.Set; public class SpawnProofer extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -72,7 +73,7 @@ public class SpawnProofer extends Module { .build() ); - private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> blocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Block to use for spawn proofing.") .defaultValue(Blocks.TORCH, Blocks.STONE_BUTTON, Blocks.STONE_SLAB) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java index 7dc22f6cf0..9c51436785 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java @@ -52,7 +52,7 @@ public class VeinMiner extends Module { // General - private final Setting> selectedBlocks = sgGeneral.add(new BlockListSetting.Builder() + private final Setting> selectedBlocks = sgGeneral.add(new BlockListSetting.Builder() .name("blocks") .description("Which blocks to select.") .defaultValue(Blocks.STONE, Blocks.DIRT, Blocks.GRASS_BLOCK) 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/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/entity/fakeplayer/FakePlayerEntity.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/fakeplayer/FakePlayerEntity.java index eddc2f6a44..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,16 +31,9 @@ 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); - 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/FakeClientPlayer.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java index 730486be8e..592b066bd0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/FakeClientPlayer.java @@ -44,7 +44,22 @@ 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, + null, + false) + ), new ClientWorld.Properties(Difficulty.NORMAL, false, false), world.getRegistryKey(), world.getDimensionEntry(), 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); } 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/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/misc/input/KeyBinds.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java index 50de9a9314..6830326c87 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -5,15 +5,13 @@ package meteordevelopment.meteorclient.utils.misc.input; -import meteordevelopment.meteorclient.mixin.KeyBindingAccessor; +import meteordevelopment.meteorclient.MeteorClient; import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import org.lwjgl.glfw.GLFW; -import java.util.Map; - public class KeyBinds { - private static final String CATEGORY = "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); @@ -22,16 +20,6 @@ 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/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/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/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/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/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); 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/PeekScreen.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java index 3c0a232934..117909f674 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -10,9 +10,11 @@ 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.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; @@ -36,10 +38,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click arg, boolean doubled) { 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.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); @@ -54,13 +56,13 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click 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(KeyInput 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(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 d5a555190d..3ad71bc905 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -9,8 +9,13 @@ import net.minecraft.block.BlockRenderType; import net.minecraft.block.BlockState; import net.minecraft.block.entity.BlockEntity; -import net.minecraft.client.render.*; +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.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; @@ -31,17 +36,39 @@ 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) { 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, vertexConsumerProvider, LightmapTextureManager.MAX_LIGHT_COORDINATE, OverlayTexture.DEFAULT_UV, camera); + SimpleBlockRenderer.provider = vertexConsumerProvider; + + BlockEntityRenderState state = renderer.createRenderState(); + renderer.updateRenderState(blockEntity, state, tickDelta, mc.gameRenderer.getCamera().getPos(), null); + renderer.render(state, MATRICES, renderCommandQueue, mc.gameRenderer.getEntityRenderStates().cameraRenderState); + + renderDispatcher.render(); + renderCommandQueue.onNextFrame(); + + SimpleBlockRenderer.provider = null; } vertexConsumerProvider.setOffset(0, 0, 0); @@ -86,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 b748438f8d..dfff80a137 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -16,6 +16,8 @@ import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; +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.util.math.MatrixStack; @@ -30,6 +32,18 @@ public class WireframeEntityRenderer { private static Renderer3D renderer; + 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; private static ShapeMode shapeMode; @@ -64,14 +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, MyVertexConsumerProvider.INSTANCE, 15); + 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 @@ -88,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 { @@ -147,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; - } - } } 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..83f2f73bc0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -11,8 +11,10 @@ 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.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; @@ -27,19 +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"); + 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"); + ModelPart modelPart = mc.getLoadedEntityModels().getModelPart(EntityModelLayers.STANDING_BANNER_FLAG); + this.bannerFlag = new BannerFlagBlockModel(modelPart); } @Override @@ -61,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 @@ -77,22 +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); - VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers(); + RenderDispatcher renderDispatcher = mc.gameRenderer.getEntityRenderDispatcher(); + OrderedRenderCommandQueue renderCommandQueue = renderDispatcher.getQueue(); BannerBlockEntityRenderer.renderCanvas( + mc.getAtlasManager(), matrices, - immediate, + renderCommandQueue, 15728880, OverlayTexture.DEFAULT_UV, - bannerField, + bannerFlag, + 0f, ModelBaker.BANNER_BASE, true, color, - patterns + patterns, + false, + null, + 0 ); - immediate.draw(); - + renderDispatcher.render(); matrices.pop(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java index a4b5ecb61b..bf15394c41 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.getEntityRenderCommandQueue(), false, 0xF000F0); matrices2.pop(); } } 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/fabric.mod.json b/src/main/resources/fabric.mod.json index b147637cd4..0f5f204d16 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -47,14 +47,14 @@ }, "depends": { "java": ">=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.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 diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 44aea0cd37..caf6b43765 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -23,7 +23,8 @@ "BiomeColorsMixin", "BlockCollisionSpliteratorMixin", "BlockColorsMixin", - "BlockEntityRenderDispatcherMixin", + "BlockEntityRenderManagerAccessor", + "BlockEntityRenderManagerMixin", "BlockHitResultAccessor", "BlockItemMixin", "BlockMixin", @@ -48,7 +49,6 @@ "ChunkAccessor", "ChunkBorderDebugRendererMixin", "ChunkOcclusionDataBuilderMixin", - "ChunkSkyLightProviderMixin", "ClientChunkManagerAccessor", "ClientChunkMapAccessor", "ClientConnectionAccessor", @@ -69,7 +69,6 @@ "CreativeInventoryScreenAccessor", "CreativeSlotMixin", "CrossbowItemAccessor", - "DefaultSkinHelperMixin", "DirectionAccessor", "DisconnectedScreenMixin", "DrawContextMixin", @@ -80,7 +79,7 @@ "EntityAccessor", "EntityBucketItemAccessor", "EntityMixin", - "EntityRenderDispatcherMixin", + "EntityRenderManagerMixin", "EntityRendererMixin", "EntityRenderStateMixin", "EntityTrackingSectionAccessor",