diff --git a/build.gradle.kts b/build.gradle.kts index 4658eaef79..22ea04ed11 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,7 +1,6 @@ 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" } base { @@ -50,7 +49,7 @@ repositories { } val modInclude: Configuration by configurations.creating -val library: Configuration by configurations.creating +val jij: Configuration by configurations.creating configurations { // include mods @@ -61,12 +60,12 @@ configurations { extendsFrom(modInclude) } - // include libraries + // include libraries (jar-in-jar) implementation.configure { - extendsFrom(library) + extendsFrom(jij) } - shadow.configure { - extendsFrom(library) + include.configure { + extendsFrom(jij) } } @@ -78,6 +77,7 @@ dependencies { modInclude(fabricApi.module("fabric-api-base", properties["fapi_version"] as String)) modInclude(fabricApi.module("fabric-resource-loader-v0", properties["fapi_version"] as String)) + modInclude(fabricApi.module("fabric-resource-loader-v1", properties["fapi_version"] as String)) // Compat fixes modCompileOnly(fabricApi.module("fabric-renderer-indigo", properties["fapi_version"] as String)) @@ -93,16 +93,44 @@ dependencies { modCompileOnly("com.terraformersmc:modmenu:${properties["modmenu_version"] as String}") // Libraries - library("meteordevelopment:orbit:${properties["orbit_version"] as String}") - library("org.meteordev:starscript:${properties["starscript_version"] as String}") - library("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}") - library("org.reflections:reflections:${properties["reflections_version"] as String}") - library("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false } - library("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false } - library("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}") - - // Launch sub project - shadow(project(":launch")) + jij("meteordevelopment:orbit:${properties["orbit_version"] as String}") + jij("org.meteordev:starscript:${properties["starscript_version"] as String}") + jij("meteordevelopment:discord-ipc:${properties["discordipc_version"] as String}") + jij("org.reflections:reflections:${properties["reflections_version"] as String}") + jij("io.netty:netty-handler-proxy:${properties["netty_version"] as String}") { isTransitive = false } + jij("io.netty:netty-codec-socks:${properties["netty_version"] as String}") { isTransitive = false } + jij("de.florianmichael:WaybackAuthLib:${properties["waybackauthlib_version"] as String}") +} + +// Handle transitive dependencies for jar-in-jar +// Based on implementation from BaseProject by FlorianMichael/EnZaXD +// Source: https://github.com/FlorianMichael/BaseProject/blob/main/src/main/kotlin/de/florianmichael/baseproject/Fabric.kt +// Licensed under Apache License 2.0 +afterEvaluate { + val jijConfig = configurations.findByName("jij") ?: return@afterEvaluate + + // Dependencies to exclude from jar-in-jar + val excluded = setOf( + "org.slf4j", // Logging provided by Minecraft + "jsr305" // Compile time annotations only + ) + + + jijConfig.incoming.resolutionResult.allDependencies.forEach { dep -> + val requested = dep.requested.displayName + + if (excluded.any { requested.contains(it) }) return@forEach + + val compileOnlyDep = dependencies.create(requested) { + isTransitive = false + } + + val implDep = dependencies.create(compileOnlyDep) + + dependencies.add("compileOnlyApi", compileOnlyDep) + dependencies.add("implementation", implDep) + dependencies.add("include", compileOnlyDep) + } } loom { @@ -141,6 +169,10 @@ tasks { rename { "${it}_${inputs.properties["archivesName"]}" } } + // Launch sub project + dependsOn(":launch:compileJava") + from(project(":launch").layout.buildDirectory.dir("classes/java/main")) + manifest { attributes["Main-Class"] = "meteordevelopment.meteorclient.Main" } @@ -162,27 +194,6 @@ tasks { options.compilerArgs.add("-Xlint:unchecked") } - shadowJar { - configurations = listOf(project.configurations.shadow.get()) - - inputs.property("archivesName", project.base.archivesName.get()) - - from("LICENSE") { - rename { "${it}_${inputs.properties["archivesName"]}" } - } - - dependencies { - exclude { - it.moduleGroup == "org.slf4j" - } - } - } - - remapJar { - dependsOn(shadowJar) - inputFile.set(shadowJar.get().archiveFile) - } - javadoc { with(options as StandardJavadocDocletOptions) { addStringOption("Xdoclint:none", "-quiet") diff --git a/gradle.properties b/gradle.properties index f58163d0f1..bc67d5db8b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,11 +1,11 @@ org.gradle.jvmargs=-Xmx2G -org.gradle.configuration-cache=true +org.gradle.configuration-cache=false # 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.135.0+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.10-0.7.2-fabric # Lithium (https://github.com/CaffeineMC/lithium-fabric) -lithium_version=mc1.21.6-0.17.0-fabric +lithium_version=mc1.21.10-0.20.0-fabric # Iris (https://github.com/IrisShaders/Iris) -iris_version=1.9.0+1.21.6-fabric +iris_version=1.9.6+1.21.10-fabric # ModMenu (https://github.com/TerraformersMC/ModMenu) -modmenu_version=15.0.0-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.3.1 # WaybackAuthLib (https://github.com/FlorianMichael/WaybackAuthLib) waybackauthlib_version=1.0.1 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55baa..8bdaf60c75 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff23a68d70..2e1113280e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 23d15a9367..adff685a03 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee845..e509b2dd8f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -70,11 +70,10 @@ goto fail :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* :end @rem End local scope for the variables with windows NT shell 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/BlockPosArgumentType.java b/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java index 72725bbd5f..c9ce16f4de 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/arguments/BlockPosArgumentType.java @@ -157,7 +157,7 @@ public DefaultPosArgument(CoordinateArgument x, CoordinateArgument y, Coordinate @Override public Vec3d getPosition(S source) { - Vec3d vec3 = mc.player.getPos(); + Vec3d vec3 = mc.player.getEntityPos(); return new Vec3d(this.x.toAbsoluteCoordinate(vec3.x), this.y.toAbsoluteCoordinate(vec3.y), this.z.toAbsoluteCoordinate(vec3.z)); } diff --git a/src/main/java/meteordevelopment/meteorclient/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/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..e569d9f605 100644 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/KeyEvent.java @@ -7,18 +7,26 @@ 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 input, KeyAction action) { INSTANCE.setCancelled(false); - INSTANCE.key = key; - INSTANCE.modifiers = modifiers; + INSTANCE.input = input; INSTANCE.action = action; return INSTANCE; } + + public int key() { + return INSTANCE.input.key(); + } + + public int modifiers() { + return INSTANCE.input.modifiers(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.java deleted file mode 100644 index bb0e2b3b11..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseButtonEvent.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.events.meteor; - -import meteordevelopment.meteorclient.events.Cancellable; -import meteordevelopment.meteorclient.utils.misc.input.KeyAction; - -public class MouseButtonEvent extends Cancellable { - private static final MouseButtonEvent INSTANCE = new MouseButtonEvent(); - - public int button; - public KeyAction action; - - public static MouseButtonEvent get(int button, KeyAction action) { - INSTANCE.setCancelled(false); - INSTANCE.button = button; - INSTANCE.action = action; - return INSTANCE; - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.java new file mode 100644 index 0000000000..9c5d679a04 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/events/meteor/MouseClickEvent.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.events.meteor; + +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 MouseClickEvent extends Cancellable { + private static final MouseClickEvent INSTANCE = new MouseClickEvent(); + + public Click click; + public MouseInput input; + public KeyAction action; + + public static MouseClickEvent get(Click click, KeyAction action) { + INSTANCE.setCancelled(false); + INSTANCE.click = click; + INSTANCE.input = click.buttonInfo(); + INSTANCE.action = action; + return INSTANCE; + } + + public int button() { + return INSTANCE.input.button(); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/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/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 5c7723a469..ab25838f07 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 click, boolean doubled) { if (locked) return false; + double mouseX = click.x(); + double mouseY = click.y(); double s = mc.getWindow().getScaleFactor(); + mouseX *= s; mouseY *= s; - return root.mouseClicked(mouseX, mouseY, button, false); + return root.mouseClicked(new Click(mouseX, mouseY, click.buttonInfo()), doubled); } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click click) { if (locked) return false; + double mouseX = click.x(); + double mouseY = click.y(); double s = mc.getWindow().getScaleFactor(); + mouseX *= s; mouseY *= s; - return root.mouseReleased(mouseX, mouseY, button); + return root.mouseReleased(new Click(mouseX, mouseY, click.buttonInfo())); } @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 input) { if (locked) return false; - if ((modifiers == GLFW_MOD_CONTROL || modifiers == GLFW_MOD_SUPER) && keyCode == GLFW_KEY_9) { + if ((input.modifiers() == GLFW_MOD_CONTROL || input.modifiers() == GLFW_MOD_SUPER) && input.key() == GLFW_KEY_9) { debug = !debug; return true; } - if ((keyCode == GLFW_KEY_ENTER || keyCode == GLFW_KEY_KP_ENTER) && enterAction != null) { + if ((input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) && enterAction != null) { enterAction.run(); return true; } - return super.keyReleased(keyCode, scanCode, modifiers); + return super.keyReleased(input); } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyInput input) { if (locked) return false; - boolean shouldReturn = root.keyPressed(keyCode, modifiers) || super.keyPressed(keyCode, scanCode, modifiers); + boolean shouldReturn = root.keyPressed(input) || super.keyPressed(input); if (shouldReturn) return true; // Select next text box if TAB was pressed - if (keyCode == GLFW_KEY_TAB) { + if (input.key() == GLFW_KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); AtomicBoolean foundFocused = new AtomicBoolean(false); @@ -214,23 +224,23 @@ 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 ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; - return (control && keyCode == GLFW_KEY_C && toClipboard()) - || (control && keyCode == GLFW_KEY_V && fromClipboard()); + return (control && input.key() == GLFW_KEY_C && toClipboard()) + || (control && input.key() == GLFW_KEY_V && fromClipboard()); } - public void keyRepeated(int key, int modifiers) { + public void keyRepeated(KeyInput input) { if (locked) return; - root.keyRepeated(key, modifiers); + root.keyRepeated(input); } @Override - public boolean charTyped(char chr, int keyCode) { + public boolean charTyped(CharInput input) { if (locked) return false; - return root.charTyped(chr); + return root.charTyped(input); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java index ebcf6b271c..ba3b56b85e 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java @@ -9,8 +9,10 @@ import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.input.KeyInput; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.BundleContentsComponent; import net.minecraft.entity.player.PlayerInventory; @@ -126,11 +128,11 @@ public void render(DrawContext context, int mouseX, int mouseY, float delta) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click click, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - ItemStack stack = getSelectedItem((int) mouseX, (int) mouseY); - if (tooltips.shouldOpenContents(false, button, 0)) { + ItemStack stack = getSelectedItem((int) click.x(), (int) click.y()); + if (tooltips.shouldOpenContents(click)) { return tooltips.openContent(stack); } @@ -138,15 +140,15 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyInput input) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); ItemStack stack = getSelectedItem((int) mc.mouse.getScaledX(mc.getWindow()), (int) mc.mouse.getScaledY(mc.getWindow())); - if (tooltips.shouldOpenContents(true, keyCode, modifiers)) { + if (tooltips.shouldOpenContents(input)) { return tooltips.openContent(stack); } - if (keyCode == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(keyCode, scanCode)) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(input)) { close(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java index 467b1c38de..9c357dc977 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/ColorSettingScreen.java @@ -20,6 +20,7 @@ import meteordevelopment.meteorclient.utils.misc.NbtUtils; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -277,7 +278,7 @@ void calculateFromColor(Color c, boolean calculateNow) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (used) return false; if (mouseOver) { @@ -294,7 +295,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; } @@ -549,7 +550,7 @@ void calculateColor() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (used) return false; if (mouseOver) { @@ -566,7 +567,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java index 7b28053be4..c82be6a451 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(); @@ -370,7 +370,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/CharFilter.java b/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java index a0adcf1b73..9bb2544e68 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/utils/CharFilter.java @@ -7,4 +7,8 @@ public interface CharFilter { boolean filter(String text, char c); + + default boolean filter(String text, int i) { + return filter(text, (char) i); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/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/WLabel.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java index 6809155107..ad9d8be347 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WLabel.java @@ -7,6 +7,7 @@ import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable; import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.client.gui.Click; public abstract class WLabel extends WPressable { public Color color; @@ -26,14 +27,14 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (action != null) return super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + if (action != null) return super.onMouseClicked(click, used); return false; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (action != null) return super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (action != null) return super.onMouseReleased(click); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java index 8492d75ed3..c3286c2f36 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WWidget.java @@ -8,6 +8,9 @@ import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.utils.BaseWidget; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; public abstract class WWidget implements BaseWidget { public boolean visible = true; @@ -88,15 +91,15 @@ protected void onRender(GuiRenderer renderer, double mouseX, double mouseY, doub // Events - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean used) { - return onMouseClicked(mouseX, mouseY, button, used); + public boolean mouseClicked(Click click, boolean used) { + return onMouseClicked(click, used); } - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { return false; } + public boolean onMouseClicked(Click click, boolean used) { return false; } - public boolean mouseReleased(double mouseX, double mouseY, int button) { - return onMouseReleased(mouseX, mouseY, button); + public boolean mouseReleased(Click click) { + return onMouseReleased(click); } - public boolean onMouseReleased(double mouseX, double mouseY, int button) { return false; } + public boolean onMouseReleased(Click click) { return false; } public void mouseMoved(double mouseX, double mouseY, double lastMouseX, double lastMouseY) { mouseOver = isOver(mouseX, mouseY); @@ -109,20 +112,20 @@ public boolean mouseScrolled(double amount) { } public boolean onMouseScrolled(double amount) { return false; } - public boolean keyPressed(int key, int mods) { - return onKeyPressed(key, mods); + public boolean keyPressed(KeyInput input) { + return onKeyPressed(input); } - public boolean onKeyPressed(int key, int mods) { return false; } + public boolean onKeyPressed(KeyInput input) { return false; } - public boolean keyRepeated(int key, int mods) { - return onKeyRepeated(key, mods); + public boolean keyRepeated(KeyInput input) { + return onKeyRepeated(input); } - public boolean onKeyRepeated(int key, int mods) { return false; } + public boolean onKeyRepeated(KeyInput input) { return false; } - public boolean charTyped(char c) { - return onCharTyped(c); + public boolean charTyped(CharInput input) { + return onCharTyped(input); } - public boolean onCharTyped(char c) { return false; } + public boolean onCharTyped(CharInput input) { return false; } // Other diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java index 4ae00b5ffe..90ac5ea4df 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WContainer.java @@ -9,6 +9,9 @@ import meteordevelopment.meteorclient.gui.utils.Cell; import meteordevelopment.meteorclient.gui.widgets.WWidget; import net.minecraft.client.Mouse; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import java.util.ArrayList; import java.util.ConcurrentModificationException; @@ -124,26 +127,26 @@ protected boolean propagateEvents(WWidget widget) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean mouseClicked(Click click, boolean used) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().mouseClicked(mouseX, mouseY, button, used)) + if (propagateEvents(cell.widget()) && cell.widget().mouseClicked(click, used)) used = true; } } catch (ConcurrentModificationException ignored) {} - return super.mouseClicked(mouseX, mouseY, button, used) || used; + return super.mouseClicked(click, used) || used; } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click click) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().mouseReleased(mouseX, mouseY, button)) return true; + if (propagateEvents(cell.widget()) && cell.widget().mouseReleased(click)) return true; } } catch (ConcurrentModificationException ignored) {} - return super.mouseReleased(mouseX, mouseY, button); + return super.mouseReleased(click); } @Override @@ -169,35 +172,35 @@ public boolean mouseScrolled(double amount) { } @Override - public boolean keyPressed(int key, int modifiers) { + public boolean keyPressed(KeyInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().keyPressed(key, modifiers)) return true; + if (propagateEvents(cell.widget()) && cell.widget().keyPressed(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return onKeyPressed(key, modifiers); + return onKeyPressed(input); } @Override - public boolean keyRepeated(int key, int modifiers) { + public boolean keyRepeated(KeyInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().keyRepeated(key, modifiers)) return true; + if (propagateEvents(cell.widget()) && cell.widget().keyRepeated(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return onKeyRepeated(key, modifiers); + return onKeyRepeated(input); } @Override - public boolean charTyped(char c) { + public boolean charTyped(CharInput input) { try { for (Cell cell : cells) { - if (propagateEvents(cell.widget()) && cell.widget().charTyped(c)) return true; + if (propagateEvents(cell.widget()) && cell.widget().charTyped(input)) return true; } } catch (ConcurrentModificationException ignored) {} - return super.charTyped(c); + return super.charTyped(input); } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java index 3c1b163f12..145b4b6cd7 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java @@ -8,6 +8,7 @@ import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.utils.Cell; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @@ -123,8 +124,8 @@ public WHeader(String title) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (mouseOver && button == GLFW_MOUSE_BUTTON_LEFT && !used) { + public boolean onMouseClicked(Click click, boolean used) { + if (mouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !used) { onClick(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java index 8e2ce8ea07..0330c0b830 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java @@ -8,6 +8,7 @@ import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.utils.Utils; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @@ -74,8 +75,8 @@ protected void onCalculateWidgetPositions() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (handleMouseOver && button == GLFW_MOUSE_BUTTON_LEFT && !used) { + public boolean onMouseClicked(Click click, boolean used) { + if (handleMouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !used) { handlePressed = true; return true; } @@ -84,7 +85,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (handlePressed) handlePressed = false; return false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java index 86a4258b33..cb34e85422 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java @@ -10,6 +10,7 @@ import meteordevelopment.meteorclient.gui.utils.WindowConfig; import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.gui.widgets.pressable.WTriangle; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; import java.util.function.Consumer; @@ -188,9 +189,9 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { - if (button == GLFW_MOUSE_BUTTON_RIGHT) setExpanded(!expanded); + if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) setExpanded(!expanded); else { dragging = true; dragged = false; @@ -203,7 +204,7 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { dragging = false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java index b43476f4f2..1d5b2d1d44 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WDropdown.java @@ -10,6 +10,9 @@ import meteordevelopment.meteorclient.gui.widgets.WRoot; import meteordevelopment.meteorclient.gui.widgets.containers.WVerticalList; import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable; +import net.minecraft.client.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.util.math.MathHelper; public abstract class WDropdown extends WPressable { @@ -121,20 +124,20 @@ public boolean render(GuiRenderer renderer, double mouseX, double mouseY, double // Events @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (!mouseOver && !root.mouseOver) expanded = false; - if (super.onMouseClicked(mouseX, mouseY, button, used)) used = true; - if (expanded && root.mouseClicked(mouseX, mouseY, button, used)) used = true; + if (super.onMouseClicked(click, used)) used = true; + if (expanded && root.mouseClicked(click, used)) used = true; return used; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (super.onMouseReleased(mouseX, mouseY, button)) return true; + public boolean onMouseReleased(Click click) { + if (super.onMouseReleased(click)) return true; - return expanded && root.mouseReleased(mouseX, mouseY, button); + return expanded && root.mouseReleased(click); } @Override @@ -156,24 +159,24 @@ public boolean onMouseScrolled(double amount) { } @Override - public boolean onKeyPressed(int key, int mods) { - if (super.onKeyPressed(key, mods)) return true; + public boolean onKeyPressed(KeyInput input) { + if (super.onKeyPressed(input)) return true; - return expanded && root.keyPressed(key, mods); + return expanded && root.keyPressed(input); } @Override - public boolean onKeyRepeated(int key, int mods) { - if (super.onKeyRepeated(key, mods)) return true; + public boolean onKeyRepeated(KeyInput input) { + if (super.onKeyRepeated(input)) return true; - return expanded && root.keyRepeated(key, mods); + return expanded && root.keyRepeated(input); } @Override - public boolean onCharTyped(char c) { - if (super.onCharTyped(c)) return true; + public boolean onCharTyped(CharInput input) { + if (super.onCharTyped(input)) return true; - return expanded && root.charTyped(c); + return expanded && root.charTyped(input); } // Widgets diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java index a2384ccd3f..12120f72c1 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WSlider.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.input; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import net.minecraft.util.math.MathHelper; public abstract class WSlider extends WWidget { @@ -42,12 +43,12 @@ protected void onCalculateSize() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { valueAtDragStart = value; double handleSize = handleSize(); - double valueWidth = mouseX - (x + handleSize / 2); + double valueWidth = click.x() - (x + handleSize / 2); set((valueWidth / (width - handleSize)) * (max - min) + min); if (action != null) action.run(); @@ -104,7 +105,7 @@ public void onMouseMoved(double mouseX, double mouseY, double lastMouseX, double } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (dragging) { if (value != valueAtDragStart && actionOnRelease != null) { actionOnRelease.run(); @@ -120,7 +121,7 @@ public boolean onMouseReleased(double mouseX, double mouseY, int button) { @Override public boolean onMouseScrolled(double amount) { // when user starts to scroll over regular handle - // remember it's position and check only this "ghost" + // remember its position and check only this "ghost" // position to allow scroll (until it leaves ghost area) if (!scrollHandleMouseOver && handleMouseOver) { scrollHandleX = x; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java index 2aa35dc543..3cfb713c9c 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,10 @@ 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.gui.Click; +import net.minecraft.client.input.CharInput; +import net.minecraft.client.input.KeyInput; +import net.minecraft.client.util.MacWindowUtil; import net.minecraft.util.math.MathHelper; import org.apache.commons.lang3.SystemUtils; @@ -105,9 +108,9 @@ protected double maxTextWidth() { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { + public boolean onMouseClicked(Click click, boolean used) { if (mouseOver && !used) { - if (button == GLFW_MOUSE_BUTTON_RIGHT) { + if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) { if (!text.isEmpty()) { text = ""; cursor = 0; @@ -117,11 +120,11 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean runAction(); } } - else if (button == GLFW_MOUSE_BUTTON_LEFT) { + else if (click.button() == GLFW_MOUSE_BUTTON_LEFT) { selecting = true; double overflowWidth = getOverflowWidthForRender(); - double relativeMouseX = mouseX - x + overflowWidth; + double relativeMouseX = click.x() - x + overflowWidth; double pad = pad(); double smallestDifference = Double.MAX_VALUE; @@ -183,7 +186,7 @@ else if (i > preSelectionCursor) { } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { selecting = false; if (selectionStart < preSelectionCursor && preSelectionCursor == selectionEnd) { @@ -197,18 +200,18 @@ else if (selectionEnd > preSelectionCursor && preSelectionCursor == selectionSta } @Override - public boolean onKeyPressed(int key, int mods) { + public boolean onKeyPressed(KeyInput input) { if (!focused) return false; - boolean control = MinecraftClient.IS_SYSTEM_MAC ? mods == GLFW_MOD_SUPER : mods == GLFW_MOD_CONTROL; + boolean control = MacWindowUtil.IS_MAC ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; - if (control && key == GLFW_KEY_C) { + if (control && input.key() == GLFW_KEY_C) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboard.setClipboard(text.substring(selectionStart, selectionEnd)); } return true; } - else if (control && key == GLFW_KEY_X) { + else if (control && input.key() == GLFW_KEY_X) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboard.setClipboard(text.substring(selectionStart, selectionEnd)); clearSelection(); @@ -216,21 +219,21 @@ else if (control && key == GLFW_KEY_X) { return true; } - else if (control && key == GLFW_KEY_A) { + else if (control && input.key() == GLFW_KEY_A) { cursor = text.length(); selectionStart = 0; selectionEnd = cursor; } - else if (mods == ((MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && key == GLFW_KEY_A) { + else if (input.modifiers() == ((MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && input.key() == GLFW_KEY_A) { resetSelection(); } - else if (key == GLFW_KEY_ENTER || key == GLFW_KEY_KP_ENTER) { + else if (input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) { setFocused(false); if (actionOnUnfocused != null) actionOnUnfocused.run(); return true; } - else if (key == GLFW_KEY_TAB && completionsW != null) { + else if (input.key() == GLFW_KEY_TAB && completionsW != null) { String completion = ((ICompletionItem) completionsW.cells.get(getSelectedCompletion()).widget()).getCompletion(); StringBuilder sb = new StringBuilder(text.length() + completion.length() + 1); @@ -257,19 +260,19 @@ else if (key == GLFW_KEY_TAB && completionsW != null) { return true; } - return onKeyRepeated(key, mods); + return onKeyRepeated(input); } @Override - public boolean onKeyRepeated(int key, int mods) { + public boolean onKeyRepeated(KeyInput input) { if (!focused) return false; - boolean control = MinecraftClient.IS_SYSTEM_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 altShift = mods == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); + boolean control = MacWindowUtil.IS_MAC ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; + boolean shift = input.modifiers() == GLFW_MOD_SHIFT; + boolean controlShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); + boolean altShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); - if (control && key == GLFW_KEY_V) { + if (control && input.key() == GLFW_KEY_V) { clearSelection(); String preText = text; @@ -294,13 +297,13 @@ public boolean onKeyRepeated(int key, int mods) { if (!text.equals(preText)) runAction(); return true; } - else if (key == GLFW_KEY_BACKSPACE) { + else if (input.key() == GLFW_KEY_BACKSPACE) { if (cursor > 0 && cursor == selectionStart && cursor == selectionEnd) { String preText = text; - int count = (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) + int count = (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) ? cursor - : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(true) : 1; @@ -316,14 +319,14 @@ else if (cursor != selectionStart || cursor != selectionEnd) { return true; } - else if (key == GLFW_KEY_DELETE) { + else if (input.key() == GLFW_KEY_DELETE) { if (cursor == selectionStart && cursor == selectionEnd) { if (cursor < text.length()) { String preText = text; - int count = mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) + int count = input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) ? text.length() - cursor - : (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) ? countToNextSpace(false) : 1; @@ -337,13 +340,13 @@ else if (key == GLFW_KEY_DELETE) { } return true; } - else if (key == GLFW_KEY_LEFT) { + else if (input.key() == GLFW_KEY_LEFT) { if (cursor > 0) { - if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { cursor -= countToNextSpace(true); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = 0; resetSelection(); } @@ -388,7 +391,7 @@ else if (shift) { cursorChanged(); } - else if (selectionStart != selectionEnd && selectionStart == 0 && mods == 0) { + else if (selectionStart != selectionEnd && selectionStart == 0 && input.modifiers() == 0) { cursor = 0; resetSelection(); cursorChanged(); @@ -396,13 +399,13 @@ else if (selectionStart != selectionEnd && selectionStart == 0 && mods == 0) { return true; } - else if (key == GLFW_KEY_RIGHT) { + else if (input.key() == GLFW_KEY_RIGHT) { if (cursor < text.length()) { - if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { cursor += countToNextSpace(false); resetSelection(); } - else if (mods == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MinecraftClient.IS_SYSTEM_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacWindowUtil.IS_MAC ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { cursor = text.length(); resetSelection(); } @@ -446,7 +449,7 @@ else if (shift) { cursorChanged(); } - else if (selectionStart != selectionEnd && selectionEnd == text.length() && mods == 0) { + else if (selectionStart != selectionEnd && selectionEnd == text.length() && input.modifiers() == 0) { cursor = text.length(); resetSelection(); cursorChanged(); @@ -454,7 +457,7 @@ else if (selectionStart != selectionEnd && selectionEnd == text.length() && mods return true; } - else if (key == GLFW_KEY_DOWN && completionsW != null) { + else if (input.key() == GLFW_KEY_DOWN && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == Math.min(5, completions.size() - 1)) { @@ -470,7 +473,7 @@ else if (key == GLFW_KEY_DOWN && completionsW != null) { return true; } - else if (key == GLFW_KEY_UP && completionsW != null) { + else if (input.key() == GLFW_KEY_UP && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == 0) { @@ -502,13 +505,13 @@ private int getSelectedCompletion() { } @Override - public boolean onCharTyped(char c) { + public boolean onCharTyped(CharInput input) { if (!focused) return false; - if (filter.filter(text, c)) { + if (filter.filter(text, input.codepoint())) { clearSelection(); - text = text.substring(0, cursor) + c + text.substring(cursor); + text = text.substring(0, cursor) + input.asString() + text.substring(cursor); cursor++; resetSelection(); diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java index 1aec3b10c4..69735493d3 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedButton.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; import meteordevelopment.meteorclient.gui.renderer.packer.GuiTexture; +import net.minecraft.client.gui.Click; public abstract class WConfirmedButton extends WButton { @@ -18,8 +19,8 @@ public WConfirmedButton(String text, String confirmText, GuiTexture texture) { } @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - boolean pressed = super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + boolean pressed = super.onMouseClicked(click, used); if (!pressed) { pressedOnce = false; invalidate(); @@ -28,8 +29,8 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (pressed && pressedOnce) super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (pressed && pressedOnce) super.onMouseReleased(click); pressedOnce = pressed; invalidate(); return pressed = false; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java index 7bebb271ac..5ed110d4f1 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WConfirmedMinus.java @@ -5,12 +5,14 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; +import net.minecraft.client.gui.Click; + public class WConfirmedMinus extends WMinus { protected boolean pressedOnce = false; @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - boolean pressed = super.onMouseClicked(mouseX, mouseY, button, used); + public boolean onMouseClicked(Click click, boolean used) { + boolean pressed = super.onMouseClicked(click, used); if (!pressed) { pressedOnce = false; } @@ -18,8 +20,8 @@ public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { - if (pressed && pressedOnce) super.onMouseReleased(mouseX, mouseY, button); + public boolean onMouseReleased(Click click) { + if (pressed && pressedOnce) super.onMouseReleased(click); pressedOnce = pressed; return pressed = false; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java index 5e26f0c359..6ee1b82949 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java @@ -6,6 +6,7 @@ package meteordevelopment.meteorclient.gui.widgets.pressable; import meteordevelopment.meteorclient.gui.widgets.WWidget; +import net.minecraft.client.gui.Click; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; @@ -16,15 +17,15 @@ public abstract class WPressable extends WWidget { protected boolean pressed; @Override - public boolean onMouseClicked(double mouseX, double mouseY, int button, boolean used) { - if (mouseOver && (button == GLFW_MOUSE_BUTTON_LEFT || button == GLFW_MOUSE_BUTTON_RIGHT) && !used) pressed = true; + public boolean onMouseClicked(Click click, boolean used) { + if (mouseOver && (click.button() == GLFW_MOUSE_BUTTON_LEFT || click.button() == GLFW_MOUSE_BUTTON_RIGHT) && !used) pressed = true; return pressed; } @Override - public boolean onMouseReleased(double mouseX, double mouseY, int button) { + public boolean onMouseReleased(Click click) { if (pressed) { - onPressed(button); + onPressed(click.button()); if (action != null) action.run(); pressed = false; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/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 86b68a509a..06cebf6b87 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPlayerEntityMixin.java @@ -75,7 +75,7 @@ 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; 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..1c4319eaac 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CobwebBlockMixin.java @@ -5,14 +5,12 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.movement.NoSlow; -import net.minecraft.block.BlockState; import net.minecraft.block.CobwebBlock; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -22,8 +20,13 @@ @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(); + @Dynamic("Explicit 1.21.9 Support") + @Inject(method = { + "onEntityCollision", // 1.21.10 + "onEntityCollision(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityCollisionHandler;)V", // 1.21.9 yarn + "method_9548(Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_10774;)V" // 1.21.9 intermediary + }, at = @At("HEAD"), cancellable = true) + private void onEntityCollision(CallbackInfo ci, @Local(argsOnly = true) Entity entity) { + if (entity == mc.player && Modules.get().get(NoSlow.class).cobweb()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/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/EntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java index 85933cd36a..ebd0867365 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityMixin.java @@ -23,8 +23,6 @@ import meteordevelopment.meteorclient.systems.modules.world.HighwayBuilder; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; -import meteordevelopment.meteorclient.utils.render.color.Color; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; import net.minecraft.block.Block; import net.minecraft.block.Blocks; import net.minecraft.client.render.Camera; @@ -141,14 +139,6 @@ else if ((Object) this instanceof LivingEntity) { } } - @Inject(method = "getTeamColorValue", at = @At("HEAD"), cancellable = true) - private void onGetTeamColorValue(CallbackInfoReturnable info) { - if (PostProcessShaders.rendering) { - Color color = Modules.get().get(ESP.class).getColor((Entity) (Object) this); - if (color != null) info.setReturnValue(color.getPacked()); - } - } - @ModifyExpressionValue(method = "getVelocityMultiplier", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;getBlock()Lnet/minecraft/block/Block;")) private Block modifyVelocityMultiplierBlock(Block original) { if ((Object) this != mc.player) return original; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java deleted file mode 100644 index c903e8d1bd..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderDispatcherMixin.java +++ /dev/null @@ -1,103 +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 com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; -import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes; -import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; -import net.minecraft.client.render.Camera; -import net.minecraft.client.render.VertexConsumer; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.entity.EntityRenderDispatcher; -import net.minecraft.client.render.entity.EntityRenderer; -import net.minecraft.client.render.entity.state.EntityHitbox; -import net.minecraft.client.render.entity.state.EntityHitboxAndView; -import net.minecraft.client.render.entity.state.EntityRenderState; -import net.minecraft.client.render.entity.state.LivingEntityRenderState; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.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 { - @Shadow - public Camera camera; - - @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/EntityRenderer;)V", at = @At("HEAD"), cancellable = true) - private void render(E entity, double x, double y, double z, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, EntityRenderer renderer, CallbackInfo info) { - if (entity instanceof FakePlayerEntity player && player.hideWhenInsideCamera) { - int cX = MathHelper.floor(this.camera.getPos().x); - int cY = MathHelper.floor(this.camera.getPos().y); - int cZ = MathHelper.floor(this.camera.getPos().z); - - if (cX == entity.getBlockX() && cZ == entity.getBlockZ() && (cY == entity.getBlockY() || cY == entity.getBlockY() + 1)) info.cancel(); - } - } - - // Hitboxes - - @Unique - private static Entity renderHitboxEntity; - - @Inject(method = "renderHitboxes(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityRenderState;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("HEAD")) - private void renderHitboxes$setEntity(MatrixStack matrices, EntityRenderState state, EntityHitboxAndView hitbox, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - renderHitboxEntity = ((IEntityRenderState) state).meteor$getEntity(); - } - - @Inject(method = "renderHitboxes(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityRenderState;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumerProvider;)V", at = @At("TAIL")) - private void renderHitboxes$unsetEntity(MatrixStack matrices, EntityRenderState state, EntityHitboxAndView hitbox, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - renderHitboxEntity = null; - } - - @Inject(method = "renderHitbox", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/MatrixStack;push()V", shift = At.Shift.AFTER)) - private static void renderHitbox$scale(MatrixStack matrices, VertexConsumer vertexConsumer, EntityHitbox hitbox, CallbackInfo info) { - if (renderHitboxEntity == null) return; - - double v = Modules.get().get(Hitboxes.class).getEntityValue(renderHitboxEntity); - if (v == 0) return; - - v += 1; - matrices.scale((float) v, (float) v, (float) v); - } - - // IEntityRenderState - - @ModifyExpressionValue(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) { - ((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/EntityRenderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java new file mode 100644 index 0000000000..e7f2a0b1f1 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRenderManagerMixin.java @@ -0,0 +1,53 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixin; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; +import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; +import net.minecraft.client.render.Camera; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.entity.EntityRenderManager; +import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.state.CameraRenderState; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.util.math.MathHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(EntityRenderManager.class) +public abstract class EntityRenderManagerMixin { + @Shadow + public Camera camera; + + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void render(S renderState, CameraRenderState cameraRenderState, double d, double e, double f, MatrixStack matrixStack, OrderedRenderCommandQueue orderedRenderCommandQueue, CallbackInfo info) { + var entity = ((IEntityRenderState) renderState).meteor$getEntity(); + + if (entity instanceof FakePlayerEntity player && player.hideWhenInsideCamera) { + int cX = MathHelper.floor(this.camera.getPos().x); + int cY = MathHelper.floor(this.camera.getPos().y); + int cZ = MathHelper.floor(this.camera.getPos().z); + + if (cX == entity.getBlockX() && cZ == entity.getBlockZ() && (cY == entity.getBlockY() || cY == entity.getBlockY() + 1)) info.cancel(); + } + } + + // IEntityRenderState + + @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; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 2df6e07fb4..4e433a2128 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -5,33 +5,42 @@ package meteordevelopment.meteorclient.mixin; +import com.google.common.collect.ImmutableList; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.combat.Hitboxes; +import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Fullbright; import meteordevelopment.meteorclient.systems.modules.render.Nametags; import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.entity.EntityUtils; -import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; +import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.render.Frustum; import net.minecraft.client.render.entity.EntityRenderer; +import net.minecraft.client.render.entity.state.EntityHitbox; +import net.minecraft.client.render.entity.state.EntityHitboxAndView; import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.entity.state.LivingEntityRenderState; import net.minecraft.entity.Entity; 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) { - if (PostProcessShaders.rendering) cir.setReturnValue(null); if (Modules.get().get(NoRender.class).noNametags()) cir.setReturnValue(null); if (!(entity instanceof PlayerEntity player)) return; if (Modules.get().get(Nametags.class).playerNametags() && !(EntityUtils.getGameMode(player) == null && Modules.get().get(Nametags.class).excludeBots())) @@ -58,4 +67,54 @@ 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 (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; + } + + // Hitboxes + + @ModifyReturnValue(method = "createHitbox", at = @At("TAIL")) + private EntityHitboxAndView meteor$createHitbox(EntityHitboxAndView original, T entity, float tickProgress, boolean green) { + var v = Modules.get().get(Hitboxes.class).getEntityValue(entity); + if (v == 0) return original; + + var builder = new ImmutableList.Builder(); + + for (var hitbox : original.hitboxes()) { + builder.add(new EntityHitbox( + hitbox.x0() - v, hitbox.y0() - v, hitbox.z0() - v, + hitbox.x1() + v, hitbox.y1() + v, hitbox.z1() + v, + hitbox.offsetX(), hitbox.offsetY(), hitbox.offsetZ(), + hitbox.red(), hitbox.green(), hitbox.blue() + )); + } + + return new EntityHitboxAndView(original.viewX(), original.viewY(), original.viewZ(), builder.build()); + } } 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 e3d1b2a05f..0e6dee8ec4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -26,12 +26,15 @@ import meteordevelopment.meteorclient.systems.modules.world.HighwayBuilder; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; +import meteordevelopment.meteorclient.utils.render.CustomBannerGuiElementRenderer; import meteordevelopment.meteorclient.utils.render.NametagUtils; import meteordevelopment.meteorclient.utils.render.RenderUtils; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.render.GuiRenderer; +import net.minecraft.client.gui.render.SpecialGuiElementRenderer; import net.minecraft.client.gui.render.state.GuiRenderState; +import net.minecraft.client.render.BufferBuilderStorage; import net.minecraft.client.render.Camera; import net.minecraft.client.render.GameRenderer; import net.minecraft.client.render.RenderTickCounter; @@ -50,8 +53,12 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.ArrayList; +import java.util.List; + @Mixin(GameRenderer.class) public abstract class GameRendererMixin { @Shadow @@ -83,6 +90,10 @@ public abstract class GameRendererMixin { @Shadow protected abstract void tiltViewWhenHurt(MatrixStack matrices, float tickDelta); + @Shadow + @Final + private BufferBuilderStorage buffers; + @Shadow @Final private GuiRenderer guiRenderer; @@ -95,8 +106,16 @@ public abstract class GameRendererMixin { @Final private GuiRenderState guiState; + @ModifyArg(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/render/GuiRenderer;(Lnet/minecraft/client/gui/render/state/GuiRenderState;Lnet/minecraft/client/render/VertexConsumerProvider$Immediate;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;Lnet/minecraft/client/render/command/RenderDispatcher;Ljava/util/List;)V")) + private List> meteor$addSpecialRenderers(List> list) { + list = new ArrayList<>(list); + list.add(new CustomBannerGuiElementRenderer(buffers.getEntityVertexConsumers(), client.getAtlasManager())); + + return List.of(list.toArray(new SpecialGuiElementRenderer[0])); + } + @Inject(method = "renderWorld", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiler/Profiler;swap(Ljava/lang/String;)V", args = {"ldc=hand"})) - private void onRenderWorld(RenderTickCounter tickCounter, CallbackInfo ci, @Local(ordinal = 0) Matrix4f projection, @Local(ordinal = 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"); @@ -109,12 +128,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()); @@ -225,7 +244,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; @@ -239,7 +258,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 2d4aedabf1..1c4ed21e7c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HandledScreenMixin.java @@ -10,12 +10,14 @@ import meteordevelopment.meteorclient.systems.modules.misc.InventoryTweaks; import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.systems.modules.render.ItemHighlight; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.input.KeyInput; import net.minecraft.item.ItemStack; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; @@ -29,6 +31,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import static meteordevelopment.meteorclient.MeteorClient.mc; import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @Mixin(HandledScreen.class) @@ -84,19 +87,19 @@ private void onInit(CallbackInfo info) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) - private void onMouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY, CallbackInfoReturnable info) { - if (button != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; + private void onMouseDragged(Click click, double offsetX, double offsetY, CallbackInfoReturnable cir) { + if (click.button() != GLFW_MOUSE_BUTTON_LEFT || doubleClicking || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; - Slot slot = getSlotAt(mouseX, mouseY); - if (slot != null && slot.hasStack() && hasShiftDown()) onMouseClick(slot, slot.id, button, SlotActionType.QUICK_MOVE); + Slot slot = getSlotAt(click.x(), click.y()); + if (slot != null && slot.hasStack() && mc.isShiftPressed()) onMouseClick(slot, slot.id, click.button(), SlotActionType.QUICK_MOVE); } // Middle click open @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) - private void mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { + private void mouseClicked(Click click, boolean doubled, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(false, button, 0) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(click) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { if (tooltips.openContent(focusedSlot.getStack())) { cir.setReturnValue(true); } @@ -105,10 +108,10 @@ private void mouseClicked(double mouseX, double mouseY, int button, CallbackInfo // Keyboard input for middle click open @Inject(method = "keyPressed", at = @At("HEAD"), cancellable = true) - private void keyPressed(int keyCode, int scanCode, int modifiers, CallbackInfoReturnable cir) { + private void keyPressed(KeyInput input, CallbackInfoReturnable cir) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(true, keyCode, modifiers) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(input) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && getScreenHandler().getCursorStack().isEmpty()) { if (tooltips.openContent(focusedSlot.getStack())) { cir.setReturnValue(true); } diff --git a/src/main/java/meteordevelopment/meteorclient/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/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..ae69aa53ba 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 input, CallbackInfo ci) { + int modifiers = input.modifiers(); + if (input.key() != GLFW.GLFW_KEY_UNKNOWN) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released // https://github.com/glfw/glfw/issues/1630 if (action == GLFW.GLFW_PRESS) { - modifiers |= Input.getModifier(key); + modifiers |= Input.getModifier(input.key()); } else if (action == GLFW.GLFW_RELEASE) { - modifiers &= ~Input.getModifier(key); + modifiers &= ~Input.getModifier(input.key()); } if (client.currentScreen instanceof WidgetScreen && action == GLFW.GLFW_REPEAT) { - ((WidgetScreen) client.currentScreen).keyRepeated(key, modifiers); + ((WidgetScreen) client.currentScreen).keyRepeated(new KeyInput(input.key(), input.scancode(), 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(input.key(), action != GLFW.GLFW_RELEASE); + if (MeteorClient.EVENT_BUS.post(KeyEvent.get(new KeyInput(input.key(), input.scancode(), modifiers), KeyAction.get(action))).isCancelled()) ci.cancel(); } } } @Inject(method = "onChar", at = @At("HEAD"), cancellable = true) - private void onChar(long window, int i, int j, CallbackInfo info) { + private void onChar(long window, CharInput input, CallbackInfo ci) { if (Utils.canUpdate() && !client.isPaused() && (client.currentScreen == null || client.currentScreen instanceof WidgetScreen)) { - if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) i)).isCancelled()) info.cancel(); + if (MeteorClient.EVENT_BUS.post(CharTypedEvent.get((char) input.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..692a21f29a 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(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..2f5113b8f4 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 input, CallbackInfoReturnable cir) { if ((Object) (this) instanceof ChatScreen) return; GUIMove guiMove = Modules.get().get(GUIMove.class); List arrows = List.of(GLFW_KEY_RIGHT, GLFW_KEY_LEFT, GLFW_KEY_DOWN, GLFW_KEY_UP); - if ((guiMove.disableArrows() && arrows.contains(keyCode)) || (guiMove.disableSpace() && keyCode == GLFW_KEY_SPACE)) { + if ((guiMove.disableArrows() && arrows.contains(input.key())) || (guiMove.disableSpace() && input.key() == GLFW_KEY_SPACE)) { cir.setReturnValue(true); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/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/ShadowPiecesCommandRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java new file mode 100644 index 0000000000..05fb3826e2 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ShadowPiecesCommandRendererMixin.java @@ -0,0 +1,24 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.mixin; + +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.command.BatchingRenderCommandQueue; +import net.minecraft.client.render.command.ShadowPiecesCommandRenderer; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ShadowPiecesCommandRenderer.class) +public abstract class ShadowPiecesCommandRendererMixin { + @Inject(method = "render", at = @At("HEAD"), cancellable = true) + private void meteor$onRender(BatchingRenderCommandQueue queue, VertexConsumerProvider.Immediate vertexConsumers, CallbackInfo info) { + if (queue.getShadowPiecesCommands().isEmpty()) { + info.cancel(); + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java index 2cd6645c5f..13afbd9413 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SweetBerryBushBlockMixin.java @@ -5,14 +5,12 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.movement.NoSlow; -import net.minecraft.block.BlockState; import net.minecraft.block.SweetBerryBushBlock; import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityCollisionHandler; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Dynamic; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -22,8 +20,13 @@ @Mixin(SweetBerryBushBlock.class) public abstract class SweetBerryBushBlockMixin { - @Inject(method = "onEntityCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;slowMovement(Lnet/minecraft/block/BlockState;Lnet/minecraft/util/math/Vec3d;)V"), cancellable = true) - 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(); + @Dynamic("Explicit 1.21.9 Support") + @Inject(method = { + "onEntityCollision", // 1.21.10 + "onEntityCollision(Lnet/minecraft/block/BlockState;Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/entity/Entity;Lnet/minecraft/entity/EntityCollisionHandler;)V", // 1.21.9 yarn + "method_9548(Lnet/minecraft/class_2680;Lnet/minecraft/class_1937;Lnet/minecraft/class_2338;Lnet/minecraft/class_1297;Lnet/minecraft/class_10774;)V" // 1.21.9 intermediary + }, at = @At("HEAD"), cancellable = true) + private void onEntityCollision(CallbackInfo ci, @Local(argsOnly = true) Entity entity) { + if (entity == mc.player && Modules.get().get(NoSlow.class).berryBush()) ci.cancel(); } } 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..eabc7b3268 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 click, boolean doubled, CallbackInfoReturnable cir) { + if (Config.get().titleScreenCredits.get() && click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (TitleScreenCredits.onClicked(click.x(), click.y())) cir.setReturnValue(true); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java index 534f80c297..9b4b036233 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldChunkMixin.java @@ -24,6 +24,6 @@ public abstract class WorldChunkMixin { @Inject(method = "setBlockState", at = @At("TAIL")) private void onSetBlockState(BlockPos pos, BlockState state, int flags, CallbackInfoReturnable info) { - if (world.isClient) MeteorClient.EVENT_BUS.post(BlockUpdateEvent.get(pos, info.getReturnValue(), state)); + if (world.isClient()) MeteorClient.EVENT_BUS.post(BlockUpdateEvent.get(pos, info.getReturnValue(), state)); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java index 6555f898d4..95f456f29f 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/WorldRendererMixin.java @@ -6,33 +6,37 @@ 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.IEntityRenderState; import meteordevelopment.meteorclient.mixininterface.IWorldRenderer; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BlockSelection; import meteordevelopment.meteorclient.systems.modules.render.ESP; import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import meteordevelopment.meteorclient.utils.OutlineRenderCommandQueue; +import meteordevelopment.meteorclient.utils.render.NoopImmediateVertexConsumerProvider; +import meteordevelopment.meteorclient.utils.render.NoopOutlineVertexConsumerProvider; +import meteordevelopment.meteorclient.utils.render.WrapperImmediateVertexConsumerProvider; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.postprocess.EntityShader; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; -import net.minecraft.block.BlockState; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.render.*; +import net.minecraft.client.render.command.OrderedRenderCommandQueue; +import net.minecraft.client.render.command.RenderDispatcher; +import net.minecraft.client.render.entity.EntityRenderManager; +import net.minecraft.client.render.state.OutlineRenderState; +import net.minecraft.client.render.state.WeatherRenderState; +import net.minecraft.client.render.state.WorldBorderRenderState; +import net.minecraft.client.render.state.WorldRenderState; import net.minecraft.client.util.Handle; import net.minecraft.client.util.ObjectAllocator; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; -import net.minecraft.util.math.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; @@ -45,37 +49,36 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -@Mixin(WorldRenderer.class) -public abstract class WorldRendererMixin implements IWorldRenderer { - @Unique private ESP esp; +import java.util.function.Function; - @Shadow - protected abstract void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers); +import static meteordevelopment.meteorclient.MeteorClient.mc; +@Mixin(WorldRenderer.class) +public abstract class WorldRendererMixin implements IWorldRenderer { @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 +96,7 @@ private void onRenderHead(ObjectAllocator allocator, Camera camera, Matrix4f positionMatrix, Matrix4f projectionMatrix, + Matrix4f matrix4f2, GpuBufferSlice fog, Vector4f fogColor, boolean shouldRenderSky, @@ -100,24 +104,67 @@ private void onRenderHead(ObjectAllocator allocator, PostProcessShaders.beginRender(); } - @Inject(method = "renderEntity", at = @At("HEAD")) - private void renderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo info) { - draw(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, PostProcessShaders.CHAMS, Color.WHITE); - draw(entity, cameraX, cameraY, cameraZ, tickDelta, vertexConsumers, matrices, PostProcessShaders.ENTITY_OUTLINE, Modules.get().get(ESP.class).getColor(entity)); + @Unique + private final OutlineRenderCommandQueue outlineRenderCommandQueue = new OutlineRenderCommandQueue(); + + @Unique + private VertexConsumerProvider provider; + + @Unique + private RenderDispatcher renderDispatcher; + + @Inject(method = "pushEntityRenders", at = @At("TAIL")) + private void onPushEntityRenders(MatrixStack matrices, WorldRenderState worldState, OrderedRenderCommandQueue queue, CallbackInfo info) { + if (renderDispatcher == null) { + renderDispatcher = new RenderDispatcher( + outlineRenderCommandQueue, + mc.getBlockRenderManager(), + new WrapperImmediateVertexConsumerProvider(() -> provider), + mc.getAtlasManager(), + NoopOutlineVertexConsumerProvider.INSTANCE, + NoopImmediateVertexConsumerProvider.INSTANCE, + mc.textRenderer + ); + } + + draw(worldState, matrices, PostProcessShaders.CHAMS, entity -> Color.WHITE); + draw(worldState, matrices, PostProcessShaders.ENTITY_OUTLINE, entity -> Modules.get().get(ESP.class).getColor(entity)); } @Unique - private void draw(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, VertexConsumerProvider vertexConsumers, MatrixStack matrices, EntityShader shader, Color color) { - if (shader.shouldDraw(entity) && !PostProcessShaders.isCustom(vertexConsumers) && color != null) { - meteor$pushEntityOutlineFramebuffer(shader.framebuffer); - PostProcessShaders.rendering = true; + private void draw(WorldRenderState worldState, MatrixStack matrices, EntityShader shader, Function colorGetter) { + var camera = worldState.cameraRenderState.pos; + var empty = true; + + for (var state : worldState.entityRenderStates) { + if (!shader.shouldDraw(((IEntityRenderState) state).meteor$getEntity())) continue; + + var color = colorGetter.apply(((IEntityRenderState) state).meteor$getEntity()); + if (color == null) continue; + outlineRenderCommandQueue.setColor(color); + + var renderer = entityRenderManager.getRenderer(state); + var offset = renderer.getPositionOffset(state); - shader.vertexConsumerProvider.setColor(color.r, color.g, color.b, color.a); - renderEntity(entity, cameraX, cameraY, cameraZ, tickDelta, matrices, shader.vertexConsumerProvider); + matrices.push(); + matrices.translate(state.x - camera.x + offset.x, state.y - camera.y + offset.y, state.z - camera.z + offset.z); + renderer.render(state, matrices, outlineRenderCommandQueue, worldState.cameraRenderState); + matrices.pop(); - PostProcessShaders.rendering = false; - meteor$popEntityOutlineFramebuffer(); + empty = false; } + + if (empty) + return; + + meteor$pushEntityOutlineFramebuffer(shader.framebuffer); + provider = shader.vertexConsumerProvider; + + renderDispatcher.render(); + outlineRenderCommandQueue.onNextFrame(); + + provider = null; + meteor$popEntityOutlineFramebuffer(); } @Inject(method = "method_62214", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/OutlineVertexConsumerProvider;draw()V")) @@ -125,31 +172,11 @@ 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 @@ -159,6 +186,9 @@ private ESP getESP() { @Final private DefaultFramebufferSet framebufferSet; + @Shadow + @Final + private EntityRenderManager entityRenderManager; @Unique private Stack framebufferStack; 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 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/Hud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java index 95ccdec719..ca3b1714ee 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/Hud.java @@ -228,7 +228,7 @@ private void onRender(Render2DEvent event) { if (Utils.isLoading()) return; if (!active || shouldHideHud()) return; - if ((mc.options.hudHidden || mc.inGameHud.getDebugHud().shouldShowDebugHud()) && !HudEditorScreen.isOpen()) return; + if ((mc.options.hudHidden || mc.debugHudEntryList.isF3Enabled()) && !HudEditorScreen.isOpen()) return; HudRenderer.INSTANCE.begin(event.drawContext); 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/screens/HudEditorScreen.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java index ed6a4e9a74..d43f09fab3 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 click, boolean doubled) { double s = mc.getWindow().getScaleFactor(); + double mouseX = click.x(); + double mouseY = click.y(); + mouseX *= s; mouseY *= s; - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.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 click) { double s = mc.getWindow().getScaleFactor(); + double mouseX = click.x(); + double mouseY = click.y(); + mouseX *= s; mouseY *= s; - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; + if (click.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 (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int)mouseY); } else { - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) hovered.toggle(); } - else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + else if (click.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) mc.setScreen(new HudElementScreen(theme, hovered)); @@ -141,7 +149,7 @@ else if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { } } - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.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 input) { if (!pressed) { - if (keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_KP_ENTER) { + if (input.key() == GLFW.GLFW_KEY_ENTER || input.key() == GLFW.GLFW_KEY_KP_ENTER) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.toggle(); } - else if (keyCode == GLFW.GLFW_KEY_DELETE) { + else if (input.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 (input.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(input); } 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..6a137305de 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.key(), event.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.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 76182c1516..1a08e8b326 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; @@ -213,12 +213,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.key(), event.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.button(), 0)) event.cancel(); } private boolean onBinding(boolean isKey, int value, int modifiers) { @@ -250,13 +250,13 @@ else if (value == GLFW.GLFW_KEY_ESCAPE) { @EventHandler(priority = EventPriority.HIGH) private void onKey(KeyEvent event) { if (event.action == KeyAction.Repeat) return; - onAction(true, event.key, event.modifiers, event.action == KeyAction.Press); + onAction(true, event.key(), event.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.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 9f75f849a1..ba8236dfca 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/ArrowDodge.java @@ -157,7 +157,7 @@ private void move(double velX, double velY, double velZ) { switch (moveType.get()) { case Velocity -> mc.player.setVelocity(velX, velY, velZ); case Packet -> { - Vec3d newPos = mc.player.getPos().add(velX, velY, velZ); + Vec3d newPos = mc.player.getEntityPos().add(velX, velY, velZ); mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.x, newPos.y, newPos.z, false, mc.player.horizontalCollision)); mc.player.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(newPos.x, newPos.y - 0.01, newPos.z, true, mc.player.horizontalCollision)); } @@ -165,7 +165,7 @@ private void move(double velX, double velY, double velZ) { } private boolean isValid(Vec3d velocity, boolean checkGround) { - Vec3d playerPos = mc.player.getPos().add(velocity); + Vec3d playerPos = mc.player.getEntityPos().add(velocity); Vec3d headPos = playerPos.add(0, 1, 0); for (Vector3d pos : points) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java index 6c9361cd32..0199240000 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeb.java @@ -161,7 +161,7 @@ private void onTick(TickEvent.Pre event) { FindItemResult webs = InvUtils.findInHotbar(Items.COBWEB); if (!webs.found()) return; - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); // Prediction mode via target's movement delta if (predictMovement.get()) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/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 5a071de88b..b3e4461342 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java @@ -698,7 +698,7 @@ private void onPreTick(TickEvent.Pre event) { } // Set player eye pos - ((IVec3d) playerEyePos).meteor$set(mc.player.getPos().x, mc.player.getPos().y + mc.player.getEyeHeight(mc.player.getPose()), mc.player.getPos().z); + ((IVec3d) playerEyePos).meteor$set(mc.player.getEntityPos().x, mc.player.getEntityPos().y + mc.player.getEyeHeight(mc.player.getPose()), mc.player.getEntityPos().z); // Find targets, break and place findTargets(); @@ -794,15 +794,15 @@ private float getBreakDamage(Entity entity, boolean checkCrystalAge) { if (checkCrystalAge && entity.age < ticksExisted.get()) return 0; // Check range - if (isOutOfRange(entity.getPos(), entity.getBlockPos(), false)) return 0; + if (isOutOfRange(entity.getEntityPos(), entity.getBlockPos(), false)) return 0; // Check damage to self and anti suicide blockPos.set(entity.getBlockPos()).move(0, -1, 0); - float selfDamage = DamageUtils.crystalDamage(mc.player, entity.getPos(), predictMovement.get(), blockPos); + float selfDamage = DamageUtils.crystalDamage(mc.player, entity.getEntityPos(), predictMovement.get(), blockPos); if (selfDamage > maxDamage.get() || (antiSuicide.get() && selfDamage >= EntityUtils.getTotalHealth(mc.player))) return 0; // Check damage to targets and face place - float damage = getDamageToTargets(entity.getPos(), blockPos, true, false); + float damage = getDamageToTargets(entity.getEntityPos(), blockPos, true, false); boolean shouldFacePlace = shouldFacePlace(); double minimumDamage = shouldFacePlace ? Math.min(minDamage.get(), 1.5d) : minDamage.get(); @@ -838,7 +838,7 @@ private void doBreak(Entity crystal) { double pitch = Rotations.getPitch(crystal, Target.Feet); if (doYawSteps(yaw, pitch)) { - setRotation(true, crystal.getPos(), 0, 0); + setRotation(true, crystal.getEntityPos(), 0, 0); Rotations.rotate(yaw, pitch, 50, () -> attackCrystal(crystal)); breakTimer = breakDelay.get(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java index 907b8e2347..25ea0b41cf 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/HoleFiller.java @@ -385,7 +385,7 @@ private boolean isOutOfRange(BlockPos blockPos) { } private boolean isCloseToHolePos(PlayerEntity target, BlockPos blockPos) { - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); // Prediction mode via target's movement delta if (predictMovement.get()) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java index 82a9de0644..e641a96f24 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java @@ -381,7 +381,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..2e4609ea49 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.button() == GLFW_MOUSE_BUTTON_RIGHT; } private boolean usableItem() { 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 3afdf2ff99..6592396d5a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java @@ -390,7 +390,7 @@ private boolean place(BlockPos placePos, FindItemResult block) { 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 7721709e74..8a13ebb7f2 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; @@ -288,16 +288,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..aa839a3795 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,22 +156,22 @@ 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 input) { + return mc.options.forwardKey.matchesKey(input) + || mc.options.backKey.matchesKey(input) + || mc.options.leftKey.matchesKey(input) + || mc.options.rightKey.matchesKey(input) + || mc.options.sneakKey.matchesKey(input) + || mc.options.jumpKey.matchesKey(input); } - private boolean isMovementButton(int button) { - return mc.options.forwardKey.matchesMouse(button) - || mc.options.backKey.matchesMouse(button) - || mc.options.leftKey.matchesMouse(button) - || mc.options.rightKey.matchesMouse(button) - || mc.options.sneakKey.matchesMouse(button) - || mc.options.jumpKey.matchesMouse(button); + private boolean isMovementButton(Click click) { + return mc.options.forwardKey.matchesMouse(click) + || mc.options.backKey.matchesMouse(click) + || mc.options.leftKey.matchesMouse(click) + || mc.options.rightKey.matchesMouse(click) + || mc.options.sneakKey.matchesMouse(click) + || mc.options.jumpKey.matchesMouse(click); } private void createGoal() { diff --git a/src/main/java/meteordevelopment/meteorclient/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/ClickTP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java index e6884fb40c..469cae55d5 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/ClickTP.java @@ -74,7 +74,7 @@ private void onTick(TickEvent.Post event) { double height = shape.isEmpty() ? 1 : shape.getMax(Direction.Axis.Y); Vec3d newPos = new Vec3d(pos.getX() + 0.5 + side.getOffsetX(), pos.getY() + height, pos.getZ() + 0.5 + side.getOffsetZ()); - int packetsRequired = (int) Math.ceil(mc.player.getPos().distanceTo(newPos) / 10) - 1; // subtract 1 to account for the final packet with movement + int packetsRequired = (int) Math.ceil(mc.player.getEntityPos().distanceTo(newPos) / 10) - 1; // subtract 1 to account for the final packet with movement if (packetsRequired > 19) packetsRequired = 0; for (int packetNumber = 0; packetNumber < (packetsRequired); packetNumber++) { 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..4ee40cb9f9 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.key(), event.action); } @EventHandler - private void onButton(MouseButtonEvent event) { - onInput(event.button, event.action, true); + private void onButton(MouseClickEvent event) { + onInput(event.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 b32dcdef20..bb4c1cefd3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/NoFall.java @@ -173,7 +173,7 @@ else if (mode.get() == Mode.Place) { if (anchor.get()) PlayerUtils.centerPlayer(); // Check if there is a block within 5 blocks - BlockHitResult result = mc.world.raycast(new RaycastContext(mc.player.getPos(), mc.player.getPos().subtract(0, 5, 0), RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, mc.player)); + BlockHitResult result = mc.world.raycast(new RaycastContext(mc.player.getEntityPos(), mc.player.getEntityPos().subtract(0, 5, 0), RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, mc.player)); // Place if (result != null && result.getType() == HitResult.Type.BLOCK) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java index d4a097bd33..d908103c99 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/SafeWalk.java @@ -96,7 +96,7 @@ private void onClipAtLedge(ClipAtLedgeEvent event) { } else { - BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(mc.player.getPos(), new Vec3d(mc.player.getX(), mc.world.getBottomY(), mc.player.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, mc.player)); + BlockHitResult raycastResult = mc.world.raycast(new RaycastContext(mc.player.getEntityPos(), new Vec3d(mc.player.getX(), mc.world.getBottomY(), mc.player.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.WATER, mc.player)); if (raycastResult.getType() != HitResult.Type.MISS) { if ((int) (mc.player.getY() - raycastResult.getBlockPos().up().getY()) < fallDistance.get()) return; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java index 1427b9e01c..ad02674d0f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java @@ -190,11 +190,11 @@ public Scaffold() { private void onTick(TickEvent.Pre event) { if (onlyOnClick.get() && !mc.options.useKey.isPressed()) return; - Vec3d vec = mc.player.getPos().add(mc.player.getVelocity()).add(0, -0.75, 0); + Vec3d vec = mc.player.getEntityPos().add(mc.player.getVelocity()).add(0, -0.75, 0); if (airPlace.get()) { bp.set(vec.getX(), vec.getY(), vec.getZ()); } else { - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); if (aheadDistance.get() != 0 && !towering() && !mc.world.getBlockState(mc.player.getBlockPos().down()).getCollisionShape(mc.world, mc.player.getBlockPos()).isEmpty()) { Vec3d dir = Vec3d.fromPolar(0, mc.player.getYaw()).multiply(aheadDistance.get(), 0, aheadDistance.get()); if (mc.options.forwardKey.isPressed()) pos = pos.add(dir.x, 0, dir.z); @@ -213,7 +213,7 @@ private void onTick(TickEvent.Pre event) { BlockPos targetBlock = bp.toImmutable(); if (!airPlace.get() && (BlockUtils.getPlaceSide(bp) == null)) { - Vec3d pos = mc.player.getPos(); + Vec3d pos = mc.player.getEntityPos(); pos = pos.add(0, -0.98f, 0); pos.add(mc.player.getVelocity()); @@ -241,7 +241,7 @@ private void onTick(TickEvent.Pre event) { for (int x = (int) (bp.getX() - radius.get()); x <= bp.getX() + radius.get(); x++) { for (int z = (int) (bp.getZ() - radius.get()); z <= bp.getZ() + radius.get(); z++) { BlockPos blockPos = BlockPos.ofFloored(x, bp.getY(), z); - if (mc.player.getPos().distanceTo(Vec3d.ofCenter(blockPos)) <= radius.get() || (x == bp.getX() && z == bp.getZ())) { + if (mc.player.getEntityPos().distanceTo(Vec3d.ofCenter(blockPos)) <= radius.get() || (x == bp.getX() && z == bp.getZ())) { blocks.add(blockPos); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java index 7ddb44f8bb..6686830c48 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Step.java @@ -96,7 +96,7 @@ private double getExplosionDamage() { OptionalDouble crystalDamage = Streams.stream(mc.world.getEntities()) .filter(entity -> entity instanceof EndCrystalEntity) .filter(Entity::isAlive) - .mapToDouble(entity -> DamageUtils.crystalDamage(mc.player, entity.getPos())) + .mapToDouble(entity -> DamageUtils.crystalDamage(mc.player, entity.getEntityPos())) .max(); return crystalDamage.orElse(0.0); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Velocity.java index b930f6927a..2628cd6acb 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 + mc.player.getVelocity().x, velY + mc.player.getVelocity().y, velZ + mc.player.getVelocity().z) + ); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java index 9727a3e552..e63d84aa22 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFly.java @@ -431,8 +431,8 @@ private void onPlayerMove(PlayerMoveEvent event) { } if (noCrash.get() && mc.player.isGliding() && flightMode.get() != ElytraFlightModes.Bounce) { - Vec3d lookAheadPos = mc.player.getPos().add(mc.player.getVelocity().normalize().multiply(crashLookAhead.get())); - RaycastContext raycastContext = new RaycastContext(mc.player.getPos(), new Vec3d(lookAheadPos.getX(), mc.player.getY(), lookAheadPos.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); + Vec3d lookAheadPos = mc.player.getEntityPos().add(mc.player.getVelocity().normalize().multiply(crashLookAhead.get())); + RaycastContext raycastContext = new RaycastContext(mc.player.getEntityPos(), new Vec3d(lookAheadPos.getX(), mc.player.getY(), lookAheadPos.getZ()), RaycastContext.ShapeType.COLLIDER, RaycastContext.FluidHandling.NONE, mc.player); BlockHitResult hitResult = mc.world.raycast(raycastContext); if (hitResult != null && hitResult.getType() == HitResult.Type.BLOCK) { ((IVec3d) event.movement).meteor$set(0, currentMode.velY, 0); @@ -459,7 +459,7 @@ private void onPlayerMove(PlayerMoveEvent event) { mc.player.setPitch(MathHelper.clamp(mc.player.getPitch(0), -50.f, 20.f)); - if (mc.player.getPos().y <= mc.player.getBlockPos().down().getY() + 1.34f) { + if (mc.player.getEntityPos().y <= mc.player.getBlockPos().down().getY() + 1.34f) { ((IVec3d)event.movement).meteor$set(event.movement.x, 0, event.movement.z); mc.player.setSneaking(false); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java index a5335b8d6c..67dbafdb66 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AutoRespawn.java @@ -23,7 +23,7 @@ public AutoRespawn() { private void onOpenScreenEvent(OpenScreenEvent event) { if (!(event.screen instanceof DeathScreen)) return; - Modules.get().get(WaypointsModule.class).addDeath(mc.player.getPos()); + Modules.get().get(WaypointsModule.class).addDeath(mc.player.getEntityPos()); mc.player.requestRespawn(); event.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java index a77923d0f4..fe0b0f497e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/BreakDelay.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.systems.modules.player; import meteordevelopment.meteorclient.events.entity.player.BlockBreakingCooldownEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.settings.BoolSetting; import meteordevelopment.meteorclient.settings.IntSetting; import meteordevelopment.meteorclient.settings.Setting; @@ -52,7 +52,7 @@ private void onBlockBreakingCooldown(BlockBreakingCooldownEvent event) { } @EventHandler - private void onClick(MouseButtonEvent event) { + private void onClick(MouseClickEvent event) { if (event.action == KeyAction.Press && noInstaBreak.get()) { breakBlockCooldown = true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java index 7b2905156f..1b01859621 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.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/NoRotate.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java index f6d6340c6d..bf4bdf24a4 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/NoRotate.java @@ -9,7 +9,7 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; -import net.minecraft.entity.player.PlayerPosition; +import net.minecraft.entity.EntityPosition; import net.minecraft.network.packet.s2c.play.PlayerPositionLookS2CPacket; public class NoRotate extends Module { @@ -20,8 +20,8 @@ public NoRotate() { @EventHandler private void onReceivePacket(PacketEvent.Receive event) { if (event.packet instanceof PlayerPositionLookS2CPacket packet) { - PlayerPosition oldPosition = packet.change(); - PlayerPosition newPosition = new PlayerPosition( + EntityPosition oldPosition = packet.change(); + EntityPosition newPosition = new EntityPosition( oldPosition.position(), oldPosition.deltaMovement(), mc.player.getYaw(), diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/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/BetterTooltips.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java index 6f7345236a..11b39e6c16 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java @@ -23,8 +23,11 @@ import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.tooltip.*; import meteordevelopment.orbit.EventHandler; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.screen.ingame.BookScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen; +import net.minecraft.client.input.AbstractInput; +import net.minecraft.client.input.KeyInput; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.*; import net.minecraft.component.type.SuspiciousStewEffectsComponent.StewEffect; @@ -481,8 +484,11 @@ public boolean openContents() { return (isActive() && openContents.get()) && (!pauseInCreative.get() || !mc.player.isInCreativeMode()); } - public boolean shouldOpenContents(boolean isKey, int keycode, int modifiers) { - return openContents() && openContentsKey.get().matches(isKey, keycode, modifiers); + public boolean shouldOpenContents(AbstractInput input) { + if (input instanceof Click click) return openContents() && openContentsKey.get().matches(click.buttonInfo()); + if (input instanceof KeyInput keyInput) return openContents() && openContentsKey.get().matches(keyInput); + + return false; } public boolean openContent(ItemStack itemStack) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java index 7556793c49..284eef7afe 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ESP.java @@ -347,7 +347,7 @@ public boolean shouldSkip(Entity entity) { if (drawAsTarget(entity)) return false; 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..a64c96a80a 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.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.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 b20ae19461..a2893ded8c 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/ItemPhysics.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java index 0eef408ffd..2bfbbc0e29 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -56,7 +56,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { MatrixStack matrices = event.matrixStack; - random.setSeed(event.renderState.seed); + random.setSeed(event.itemEntity.getId() * 89748956L); for (int i = 0; i < ((ItemRenderStateAccessor) event.renderState.itemRenderState).meteor$getLayerCount(); i++) { ItemRenderState.LayerRenderState layer = ((ItemRenderStateAccessor) event.renderState.itemRenderState).meteor$getLayers()[i]; @@ -73,11 +73,22 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { } if (randomRotation.get()) { - RotationAxis axis = RotationAxis.POSITIVE_Y; - if (info.flat) axis = RotationAxis.POSITIVE_Z; + var axis = RotationAxis.POSITIVE_Y; + var x = 0.5f; + var y = 0.0f; + var z = 0.5f; + + if (info.flat) { + axis = RotationAxis.POSITIVE_Z; + y = 0.5f; + z = 0.0f; + } float degrees = (random.nextFloat() * 2 - 1) * 90; + + matrices.translate(x, y, z); matrices.multiply(axis.rotationDegrees(degrees)); + matrices.translate(-x, -y, -z); } renderLayer(event, info); @@ -105,7 +116,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(); @@ -151,14 +162,12 @@ private ModelInfo getInfo(List quads) { IBakedQuad quad = (IBakedQuad) (Object) _quad; for (int i = 0; i < 4; i++) { - switch (_quad.face()) { - case DOWN -> minY = Math.min(minY, quad.meteor$getY(i)); - case UP -> maxY = Math.max(maxY, quad.meteor$getY(i)); - case NORTH -> minZ = Math.min(minZ, quad.meteor$getZ(i)); - case SOUTH -> maxZ = Math.max(maxZ, quad.meteor$getZ(i)); - case WEST -> minX = Math.min(minX, quad.meteor$getX(i)); - case EAST -> maxX = Math.max(maxX, quad.meteor$getX(i)); - } + minY = Math.min(minY, quad.meteor$getY(i)); + maxY = Math.max(maxY, quad.meteor$getY(i)); + minZ = Math.min(minZ, quad.meteor$getZ(i)); + maxZ = Math.max(maxZ, quad.meteor$getZ(i)); + minX = Math.min(minX, quad.meteor$getX(i)); + maxX = Math.max(maxX, quad.meteor$getX(i)); } } @@ -176,7 +185,7 @@ private ModelInfo getInfo(List quads) { boolean flat = (x > PIXEL_SIZE && y > PIXEL_SIZE && z <= PIXEL_SIZE); - return new ModelInfo(flat, 0.5f - minY, minZ - minY); + return new ModelInfo(flat, 0.5f - minY, -maxZ); } record ModelInfo(boolean flat, float offsetY, float offsetZ) {} 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 7a33d5a859..cdfaa7adda 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..145a1ee45a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/NoRender.java @@ -244,13 +244,6 @@ public class NoRender extends Module { .build() ); - private final Setting noSkylightUpdates = sgWorld.add(new BoolSetting.Builder() - .name("skylight-updates") - .description("Disables rendering of skylight updates.") - .defaultValue(false) - .build() - ); - private final Setting noBeaconBeams = sgWorld.add(new BoolSetting.Builder() .name("beacon-beams") .description("Disables rendering of beacon beams.") @@ -525,10 +518,6 @@ public boolean noBlockBreakOverlay() { return isActive() && noBlockBreakOverlay.get(); } - public boolean noSkylightUpdates() { - return isActive() && noSkylightUpdates.get(); - } - public boolean noBeaconBeams() { return isActive() && noBeaconBeams.get(); } @@ -576,7 +565,7 @@ public boolean noTextureRotations() { @EventHandler private void onRenderBlockEntity(RenderBlockEntityEvent event) { - if (blockEntities.get().contains(event.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 968d23f94e..4b741fa3a5 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 32f7b6159c..edac39cb37 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Tracers.java @@ -371,7 +371,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/WaypointsModule.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java index de8e91d87f..5df199eb84 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/WaypointsModule.java @@ -169,7 +169,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 f61331b712..351a230172 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Xray.java @@ -88,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..65d6dc066d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java @@ -111,7 +111,7 @@ public void onDeactivate() { @EventHandler public void onKeyPressed(KeyEvent event) { - if (event.key != GLFW.GLFW_KEY_F1) return; + if (event.key() != GLFW.GLFW_KEY_F1) return; hudManualToggled = true; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java index 34f48d4b1e..03be24476b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java @@ -9,7 +9,7 @@ import baritone.api.IBaritone; import baritone.api.utils.BetterBlockPos; import meteordevelopment.meteorclient.events.meteor.KeyEvent; -import meteordevelopment.meteorclient.events.meteor.MouseButtonEvent; +import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; import meteordevelopment.meteorclient.renderer.ShapeMode; import meteordevelopment.meteorclient.settings.*; @@ -93,7 +93,7 @@ public void onDeactivate() { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action != KeyAction.Press || !selectionBind.get().isPressed() || mc.currentScreen != null) { return; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/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 fb1b42267d..9a82372443 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java @@ -488,7 +488,7 @@ public void onActivate() { setState(State.Center); lastBreakingPos.set(0, 0, 0); - start = mc.player.getPos(); + start = mc.player.getEntityPos(); blocksBroken = blocksPlaced = 0; displayInfo = true; suspended = false; @@ -764,7 +764,7 @@ private enum State { Center { @Override protected void start(HighwayBuilder b) { - if (b.mc.player.getPos().isInRange(Vec3d.ofBottomCenter(b.mc.player.getBlockPos()), 0.1)) { + if (b.mc.player.getEntityPos().isInRange(Vec3d.ofBottomCenter(b.mc.player.getBlockPos()), 0.1)) { stop(b); } } @@ -894,7 +894,7 @@ protected void start(HighwayBuilder b) { @Override protected void tick(HighwayBuilder b) { - Vec3d vec = b.mc.player.getPos().add(b.mc.player.getVelocity()).add(0, -0.75, 0); + Vec3d vec = b.mc.player.getEntityPos().add(b.mc.player.getVelocity()).add(0, -0.75, 0); pos.set(b.mc.player.getBlockX(), vec.y, b.mc.player.getBlockZ()); if (pos.getY() >= b.mc.player.getBlockPos().getY()) { @@ -1835,7 +1835,7 @@ private float aim(HighwayBuilder b, Entity target) { float velocity = BowItem.getPullProgress(b.mc.player.getItemUseTime()); // Positions - Vec3d pos = target.getPos(); + Vec3d pos = target.getEntityPos(); double relativeX = pos.x - b.mc.player.getX(); double relativeY = pos.y + 0.5 - b.mc.player.getEyeY(); // aiming a little bit above the bottom of the crystal, hopefully prevents shooting the floor or failing the raytrace check diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java index 8b074df53b..a644676956 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() ); @@ -328,7 +328,7 @@ private void onRender(Render3DEvent event) { } @EventHandler - private void onMouseButton(MouseButtonEvent event) { + private void onMouseClick(MouseClickEvent event) { if (event.action == KeyAction.Press) addTargetedBlockToList(); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java new file mode 100644 index 0000000000..8376c08e80 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java @@ -0,0 +1,121 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils; + +import meteordevelopment.meteorclient.utils.render.color.Color; +import net.minecraft.block.BlockState; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.model.Model; +import net.minecraft.client.model.ModelPart; +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.block.MovingBlockRenderState; +import net.minecraft.client.render.command.BatchingRenderCommandQueue; +import net.minecraft.client.render.command.ModelCommandRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.entity.state.EntityHitboxAndView; +import net.minecraft.client.render.entity.state.EntityRenderState; +import net.minecraft.client.render.item.ItemRenderState; +import net.minecraft.client.render.model.BakedQuad; +import net.minecraft.client.render.model.BlockStateModel; +import net.minecraft.client.render.state.CameraRenderState; +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemDisplayContext; +import net.minecraft.text.OrderedText; +import net.minecraft.text.Text; +import net.minecraft.util.math.Vec3d; +import org.jetbrains.annotations.Nullable; +import org.joml.Quaternionf; + +import java.util.List; + +public class OutlineRenderCommandQueue extends OrderedRenderCommandQueueImpl { + private int color; + private int[] tints; + + public void setColor(Color color) { + this.color = color.getPacked(); + } + + @Override + public BatchingRenderCommandQueue getBatchingQueue(int i) { + return batchingQueues.computeIfAbsent(i, order -> new OutlineBatchingRenderCommandQueue(this)); + } + + private class OutlineBatchingRenderCommandQueue extends BatchingRenderCommandQueue { + public OutlineBatchingRenderCommandQueue(OrderedRenderCommandQueueImpl orderedQueueImpl) { + super(orderedQueueImpl); + } + + @Override + public void submitDebugHitbox(MatrixStack matrices, EntityRenderState renderState, EntityHitboxAndView debugHitbox) { + } + + @Override + public void submitShadowPieces(MatrixStack matrices, float shadowRadius, List shadowPieces) { + } + + @Override + public void submitLabel(MatrixStack matrices, @Nullable Vec3d nameLabelPos, int y, Text label, boolean notSneaking, int light, double squaredDistanceToCamera, CameraRenderState cameraState) { + } + + @Override + public void submitText(MatrixStack matrices, float x, float y, OrderedText text, boolean dropShadow, TextRenderer.TextLayerType layerType, int light, int color, int backgroundColor, int outlineColor) { + } + + @Override + public void submitFire(MatrixStack matrices, EntityRenderState renderState, Quaternionf rotation) { + } + + @Override + public void submitLeash(MatrixStack matrices, EntityRenderState.LeashData leashData) { + } + + @Override + public void submitModel(Model model, S state, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, int tintedColor, @Nullable Sprite sprite, int outlineColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay) { + super.submitModel(model, state, matrices, renderLayer, light, overlay, color, sprite, 0, crumblingOverlay); + } + + @Override + public void submitModelPart(ModelPart part, MatrixStack matrices, RenderLayer renderLayer, int light, int overlay, @Nullable Sprite sprite, boolean sheeted, boolean hasGlint, int tintedColor, @Nullable ModelCommandRenderer.CrumblingOverlayCommand crumblingOverlay, int i) { + super.submitModelPart(part, matrices, renderLayer, light, overlay, sprite, sheeted, hasGlint, color, crumblingOverlay, i); + } + + @Override + public void submitBlock(MatrixStack matrices, BlockState state, int light, int overlay, int outlineColor) { + } + + @Override + public void submitMovingBlock(MatrixStack matrices, MovingBlockRenderState state) { + } + + @Override + public void submitBlockStateModel(MatrixStack matrices, RenderLayer renderLayer, BlockStateModel model, float r, float g, float b, int light, int overlay, int outlineColor) { + r = Color.toRGBAR(color) / 255f; + g = Color.toRGBAG(color) / 255f; + b = Color.toRGBAB(color) / 255f; + + super.submitBlockStateModel(matrices, renderLayer, model, r, g, b, light, overlay, outlineColor); + } + + @Override + public void submitItem(MatrixStack matrices, ItemDisplayContext displayContext, int light, int overlay, int outlineColors, int[] tintLayers, List quads, RenderLayer renderLayer, ItemRenderState.Glint glintType) { + if (tints == null || tints[0] != color) { + tints = new int[] { color, color, color, color }; + } + + super.submitItem(matrices, displayContext, light, overlay, outlineColors, tints, quads, renderLayer, glintType); + } + + @Override + public void submitCustom(MatrixStack matrices, RenderLayer renderLayer, Custom customRenderer) { + } + + @Override + public void submitCustom(LayeredCustom customRenderer) { + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java index a316bd8b2a..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); @@ -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/Pool.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java index 581c8678bf..ce86ed73c3 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Pool.java @@ -14,8 +14,8 @@ public final class Pool { private final Queue items = new ArrayDeque<>(); private final Supplier producer; - public Pool(Producer producer) { - this.producer = producer::create; + public Pool(Supplier producer) { + this.producer = producer; } public synchronized T get() { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java deleted file mode 100644 index 64e107f7ad..0000000000 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Producer.java +++ /dev/null @@ -1,10 +0,0 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.utils.misc; - -public interface Producer { - T create(); -} 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 62fba2305c..c38fc97d50 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/CustomBannerGuiElementRenderState.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java new file mode 100644 index 0000000000..8507f70584 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderState.java @@ -0,0 +1,40 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.gui.ScreenRect; +import net.minecraft.client.gui.render.state.special.SpecialGuiElementRenderState; +import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; +import net.minecraft.component.type.BannerPatternsComponent; +import net.minecraft.util.DyeColor; +import org.jetbrains.annotations.Nullable; + +public record CustomBannerGuiElementRenderState( + BannerFlagBlockModel flag, + DyeColor baseColor, + BannerPatternsComponent resultBannerPatterns, + int x1, + int y1, + int x2, + int y2, + @Nullable ScreenRect scissorArea, + @Nullable ScreenRect bounds, + float scale +) implements SpecialGuiElementRenderState { + public CustomBannerGuiElementRenderState( + BannerFlagBlockModel bannerFlagBlockModel, + DyeColor color, + BannerPatternsComponent bannerPatterns, + int x1, + int y1, + int x2, + int y2, + @Nullable ScreenRect scissorArea, + float scale + ) { + this(bannerFlagBlockModel, color, bannerPatterns, x1, y1, x2, y2, scissorArea, SpecialGuiElementRenderState.createBounds(x1, y1, x2, y2, scissorArea), scale); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java new file mode 100644 index 0000000000..3cd89cede4 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java @@ -0,0 +1,62 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.render.SpecialGuiElementRenderer; +import net.minecraft.client.gui.render.state.special.BannerResultGuiElementRenderState; +import net.minecraft.client.render.DiffuseLighting; +import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; +import net.minecraft.client.render.command.OrderedRenderCommandQueueImpl; +import net.minecraft.client.render.command.RenderDispatcher; +import net.minecraft.client.render.model.ModelBaker; +import net.minecraft.client.texture.SpriteHolder; +import net.minecraft.client.util.math.MatrixStack; + +public class CustomBannerGuiElementRenderer extends SpecialGuiElementRenderer { + private final SpriteHolder sprite; + + public CustomBannerGuiElementRenderer(VertexConsumerProvider.Immediate immediate, SpriteHolder sprite) { + super(immediate); + this.sprite = sprite; + } + + @Override + public Class getElementClass() { + return CustomBannerGuiElementRenderState.class; + } + + protected void render(CustomBannerGuiElementRenderState state, MatrixStack matrixStack) { + MinecraftClient.getInstance().gameRenderer.getDiffuseLighting().setShaderLights(DiffuseLighting.Type.ITEMS_FLAT); + matrixStack.translate(0.0F, 0.25F, 0.0F); + RenderDispatcher renderDispatcher = MinecraftClient.getInstance().gameRenderer.getEntityRenderDispatcher(); + OrderedRenderCommandQueueImpl orderedRenderCommandQueueImpl = renderDispatcher.getQueue(); + BannerBlockEntityRenderer.renderCanvas( + this.sprite, + matrixStack, + orderedRenderCommandQueueImpl, + 15728880, + OverlayTexture.DEFAULT_UV, + state.flag(), + 0.0F, + ModelBaker.BANNER_BASE, + true, + state.baseColor(), + state.resultBannerPatterns(), + false, + null, + 0 + ); + renderDispatcher.render(); + } + + @Override + protected String getName() { + return "custom banner"; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java new file mode 100644 index 0000000000..d6f16f9a41 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomOutlineVertexConsumerProvider.java @@ -0,0 +1,68 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.util.BufferAllocator; + +public class CustomOutlineVertexConsumerProvider implements VertexConsumerProvider { + private final VertexConsumerProvider.Immediate immediate = VertexConsumerProvider.immediate(new BufferAllocator(1536)); + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + if (layer.isOutline()) { + return new CustomVertexConsumer(this.immediate.getBuffer(layer)); + } + + var optional = layer.getAffectedOutline(); + if (optional.isPresent()) { + return new CustomVertexConsumer(this.immediate.getBuffer(optional.get())); + } + + return NoopVertexConsumer.INSTANCE; + } + + public void draw() { + immediate.draw(); + } + + private record CustomVertexConsumer(VertexConsumer consumer) implements VertexConsumer { + @Override + public VertexConsumer vertex(float x, float y, float z) { + consumer.vertex(x, y, z); + return this; + } + + @Override + public VertexConsumer color(int red, int green, int blue, int alpha) { + consumer.color(red, green, blue, alpha); + return this; + } + + @Override + public VertexConsumer texture(float u, float v) { + consumer.texture(u, v); + return this; + } + + @Override + public VertexConsumer overlay(int u, int v) { + return this; + } + + @Override + public VertexConsumer light(int u, int v) { + return this; + } + + @Override + public VertexConsumer normal(float x, float y, float z) { + return this; + } + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/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 ece9dc6f53..943bcac6ce 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -10,8 +10,10 @@ import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.gl.RenderPipelines; +import net.minecraft.client.gui.Click; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.ingame.ShulkerBoxScreen; +import net.minecraft.client.input.KeyInput; import net.minecraft.inventory.SimpleInventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.ShulkerBoxScreenHandler; @@ -31,10 +33,10 @@ public PeekScreen(ItemStack storageBlock, ItemStack[] contents) { } @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { + public boolean mouseClicked(Click click, boolean doubled) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(false, button, 0) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(click) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { ItemStack itemStack = focusedSlot.getStack(); return tooltips.openContent(itemStack); } @@ -43,22 +45,22 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { } @Override - public boolean mouseReleased(double mouseX, double mouseY, int button) { + public boolean mouseReleased(Click click) { return false; } @Override - public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + public boolean keyPressed(KeyInput input) { BetterTooltips tooltips = Modules.get().get(BetterTooltips.class); - if (tooltips.shouldOpenContents(true, keyCode, modifiers) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { + if (tooltips.shouldOpenContents(input) && focusedSlot != null && !focusedSlot.getStack().isEmpty() && mc.player.currentScreenHandler.getCursorStack().isEmpty()) { ItemStack itemStack = focusedSlot.getStack(); if (tooltips.openContent(itemStack)) { return true; } } - if (keyCode == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(keyCode, scanCode)) { + if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.inventoryKey.matchesKey(input)) { close(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index d5a555190d..b8e33df7bc 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 VertexConsumerProvider provider; + + private static final RenderDispatcher renderDispatcher = new RenderDispatcher( + renderCommandQueue, + mc.getBlockRenderManager(), + new WrapperImmediateVertexConsumerProvider(() -> provider), + mc.getAtlasManager(), + NoopOutlineVertexConsumerProvider.INSTANCE, + NoopImmediateVertexConsumerProvider.INSTANCE, + mc.textRenderer + ); + 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); 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/WrapperImmediateVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.java new file mode 100644 index 0000000000..20d73eb8d4 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WrapperImmediateVertexConsumerProvider.java @@ -0,0 +1,34 @@ +/* + * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). + * Copyright (c) Meteor Development. + */ + +package meteordevelopment.meteorclient.utils.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; + +import java.util.function.Supplier; + +public class WrapperImmediateVertexConsumerProvider extends VertexConsumerProvider.Immediate { + private final Supplier supplier; + + public WrapperImmediateVertexConsumerProvider(Supplier supplier) { + super(null, null); + this.supplier = supplier; + } + + @Override + public VertexConsumer getBuffer(RenderLayer layer) { + return supplier.get().getBuffer(layer); + } + + @Override + public void draw() { + } + + @Override + public void draw(RenderLayer layer) { + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java index 8c122ce242..5a599c088e 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -6,10 +6,10 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.renderer.FullScreenRenderer; import meteordevelopment.meteorclient.renderer.MeshRenderer; +import meteordevelopment.meteorclient.utils.render.CustomOutlineVertexConsumerProvider; import net.minecraft.client.gl.DynamicUniformStorage; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.gl.SimpleFramebuffer; -import net.minecraft.client.render.OutlineVertexConsumerProvider; import net.minecraft.entity.Entity; import java.nio.ByteBuffer; @@ -18,13 +18,14 @@ import static org.lwjgl.glfw.GLFW.glfwGetTime; public abstract class PostProcessShader { - public OutlineVertexConsumerProvider vertexConsumerProvider; + public CustomOutlineVertexConsumerProvider vertexConsumerProvider; public Framebuffer framebuffer; protected RenderPipeline pipeline; public void init(RenderPipeline pipeline) { - vertexConsumerProvider = new OutlineVertexConsumerProvider(mc.getBufferBuilders().getEntityVertexConsumers()); - framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true); + if (vertexConsumerProvider == null) vertexConsumerProvider = new CustomOutlineVertexConsumerProvider(); + if (framebuffer == null) framebuffer = new SimpleFramebuffer(MeteorClient.NAME + " PostProcessShader", mc.getWindow().getFramebufferWidth(), mc.getWindow().getFramebufferHeight(), true); + this.pipeline = pipeline; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java index 5834151e2c..ab013c6a67 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShaders.java @@ -1,7 +1,6 @@ package meteordevelopment.meteorclient.utils.render.postprocess; import meteordevelopment.meteorclient.utils.PreInit; -import net.minecraft.client.render.VertexConsumerProvider; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -10,8 +9,6 @@ public class PostProcessShaders { public static EntityShader ENTITY_OUTLINE; public static PostProcessShader STORAGE_OUTLINE; - public static boolean rendering; - private PostProcessShaders() {} @PreInit @@ -39,8 +36,4 @@ public static void onResized(int width, int height) { ENTITY_OUTLINE.onResized(width, height); STORAGE_OUTLINE.onResized(width, height); } - - public static boolean isCustom(VertexConsumerProvider vcp) { - return vcp == CHAMS.vertexConsumerProvider || vcp == ENTITY_OUTLINE.vertexConsumerProvider; - } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java index 525262eecb..37598dd843 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BannerTooltipComponent.java @@ -5,17 +5,13 @@ package meteordevelopment.meteorclient.utils.tooltip; +import meteordevelopment.meteorclient.utils.render.CustomBannerGuiElementRenderState; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.model.ModelPart; -import net.minecraft.client.render.DiffuseLighting; -import net.minecraft.client.render.OverlayTexture; -import net.minecraft.client.render.VertexConsumerProvider; -import net.minecraft.client.render.block.entity.BannerBlockEntityRenderer; +import net.minecraft.client.render.block.entity.model.BannerFlagBlockModel; import net.minecraft.client.render.entity.model.EntityModelLayers; -import net.minecraft.client.render.model.ModelBaker; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.BannerPatternsComponent; import net.minecraft.item.BannerItem; @@ -27,19 +23,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 @@ -49,50 +47,24 @@ public TooltipComponent getComponent() { @Override public int getHeight(TextRenderer textRenderer) { - return 32 * 5; + return 40 * 2; } @Override public int getWidth(TextRenderer textRenderer) { - return 16 * 5; + return 20 * 2; } @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { - mc.gameRenderer.getDiffuseLighting().setShaderLights(DiffuseLighting.Type.ITEMS_FLAT); - - bannerField.pitch = 0f; - bannerField.originY = -32f; - - // the width and height provided to this method seem to be the dimensions of the entire tooltip, - // not just this component - int totalWidth = width; - width = getWidth(null); - height = getHeight(null); - - MatrixStack matrices = new MatrixStack(); - matrices.push(); - matrices.translate(x + width / 2f + (totalWidth - width) / 2f, y + height * 0.775f, 0); - - float s = Math.min(width, height); - matrices.scale(s * 0.75f, s * 0.75f, 1); - - VertexConsumerProvider.Immediate immediate = mc.getBufferBuilders().getEntityVertexConsumers(); - - BannerBlockEntityRenderer.renderCanvas( - matrices, - immediate, - 15728880, - OverlayTexture.DEFAULT_UV, - bannerField, - ModelBaker.BANNER_BASE, - true, - color, - patterns - ); - - immediate.draw(); - - matrices.pop(); + var centerX = width / 2 - getWidth(null) / 2; + + context.state.addSpecialElement(new CustomBannerGuiElementRenderState( + bannerFlag, color, patterns, + centerX + x, y, + centerX + x + getWidth(null), y + getHeight(null), + context.scissorStack.peekLast(), + 16 * 2 + )); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java index 0b91b8280d..0457e05019 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/EntityTooltipComponent.java @@ -41,7 +41,11 @@ public int getWidth(TextRenderer textRenderer) { @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { var state = (LivingEntityRenderState) mc.getEntityRenderDispatcher().getRenderer(entity).getAndUpdateRenderState(entity, 1); + state.hitbox = null; + state.light = 15728880; + state.shadowPieces.clear(); + state.outlineColor = 0; state.bodyYaw = (float) (spin % 360); state.relativeHeadYaw = 0; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java index a4b5ecb61b..c2cf259240 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/MapTooltipComponent.java @@ -12,8 +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; import net.minecraft.item.map.MapState; @@ -49,7 +47,7 @@ public TooltipComponent getComponent() { @Override public void drawItems(TextRenderer textRenderer, int x, int y, int width, int height, DrawContext context) { - double scale = Modules.get().get(BetterTooltips.class).mapsScale.get(); + var scale = Modules.get().get(BetterTooltips.class).mapsScale.get().floatValue(); // Background int size = (int) ((128 + 16) * scale); @@ -59,16 +57,14 @@ public void drawItems(TextRenderer textRenderer, int x, int y, int width, int he MapState mapState = FilledMapItem.getMapState(new MapIdComponent(mapId), mc.world); if (mapState == null) return; - MatrixStack matrices2 = new MatrixStack(); - VertexConsumerProvider.Immediate consumer = mc.getBufferBuilders().getEntityVertexConsumers(); + context.getMatrices().pushMatrix(); + context.getMatrices().translate(x, y); + context.getMatrices().scale(scale, scale); + context.getMatrices().translate(8, 8); - matrices2.push(); - matrices2.translate(x, y, 0); - matrices2.scale((float) scale, (float) scale, 0); - matrices2.translate(8, 8, 0); mc.getMapRenderer().update(new MapIdComponent(mapId), mapState, mapRenderState); - mc.getMapRenderer().draw(mapRenderState, matrices2, consumer, false, 0xF000F0); - consumer.draw(); - matrices2.pop(); + context.drawMap(mapRenderState); + + context.getMatrices().popMatrix(); } } 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..922f997aa6 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}", "1.21.9"], "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 f282aec743..73ee05a94e 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 @@ -20,6 +22,8 @@ accessible method com/mojang/blaze3d/pipeline/RenderPipeline$Builder withSnip accessible field net/minecraft/client/render/RenderPhase ITEM_ENTITY_TARGET Lnet/minecraft/client/render/RenderPhase$Target; +accessible field net/minecraft/client/render/command/OrderedRenderCommandQueueImpl batchingQueues Lit/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap; + # Auto Fish accessible class net/minecraft/entity/projectile/FishingBobberEntity$State accessible field net/minecraft/entity/projectile/FishingBobberEntity state Lnet/minecraft/entity/projectile/FishingBobberEntity$State; diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index 2b3bff6f87..039572d42c 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", @@ -50,7 +51,6 @@ "ChunkAccessor", "ChunkBorderDebugRendererMixin", "ChunkOcclusionDataBuilderMixin", - "ChunkSkyLightProviderMixin", "ClientChunkManagerAccessor", "ClientChunkMapAccessor", "ClientConnectionAccessor", @@ -71,7 +71,6 @@ "CreativeInventoryScreenAccessor", "CreativeSlotMixin", "CrossbowItemAccessor", - "DefaultSkinHelperMixin", "DirectionAccessor", "DisconnectedScreenMixin", "DownloaderMixin", @@ -83,8 +82,8 @@ "EntityAccessor", "EntityBucketItemAccessor", "EntityMixin", - "EntityRenderDispatcherMixin", "EntityRendererMixin", + "EntityRenderManagerMixin", "EntityRenderStateMixin", "EntityTrackingSectionAccessor", "EntityVelocityUpdateS2CPacketAccessor", @@ -165,6 +164,7 @@ "ServerPlayerEntityMixin", "ServerResourcePackLoaderMixin", "ShaderLoaderMixin", + "ShadowPiecesCommandRendererMixin", "ShulkerBoxScreenHandlerAccessor", "SimpleEntityLookupAccessor", "SimpleOptionMixin",