diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1aa5ad6acf8..21ff870bf1a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,13 +1,13 @@ [versions] # Fabric (https://fabricmc.net/develop) jdk = "25" -minecraft = "26.2" -fabric-loader = "0.19.3" -fabric-api = "0.154.2+26.2" +minecraft = "26.3" +fabric-loader = "0.19.5" +fabric-api = "0.162.0+26.3" # Plugins # Loom (https://github.com/FabricMC/fabric-loom) -loom = "1.17-SNAPSHOT" +loom = "1.18-SNAPSHOT" # Error Prone Plugin (https://github.com/tbroyer/gradle-errorprone-plugin) errorprone-plugin = "5.1.1" @@ -15,13 +15,13 @@ errorprone-plugin = "5.1.1" # Baritone (https://github.com/MeteorDevelopment/baritone) baritone = "26.1-SNAPSHOT" # Sodium (https://github.com/CaffeineMC/sodium-fabric) -sodium = "mc26.2-0.9.1-fabric" +sodium = "mc26.3-0.9.2-fabric" # Lithium (https://github.com/CaffeineMC/lithium-fabric) -lithium = "mc26.2-0.25.2-fabric" +lithium = "mc26.3-0.26.2-fabric" # Iris (https://github.com/IrisShaders/Iris) -iris = "1.11.2+26.2-fabric" +iris = "1.11.7+26.3-fabric" # ModMenu (https://github.com/TerraformersMC/ModMenu) -modmenu = "20.0.1" +modmenu = "21.0.0" # Orbit (https://github.com/MeteorDevelopment/orbit) orbit = "0.2.4" # Starscript (https://github.com/MeteorDevelopment/starscript) @@ -33,7 +33,7 @@ reflections = "0.10.2" # Netty (https://github.com/netty/netty) netty = "4.2.15.Final" # ViaFabricPlus (https://github.com/ViaVersion/ViaFabricPlus) -viafabricplus = "4.6.1" +viafabricplus = "5.1.1" # WaybackAuthLib (https://github.com/florianreuth/WaybackAuthLib) waybackauthlib = "1.1.0" # MinecraftAuth (https://github.com/RaphiMC/MinecraftAuth) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a9db11550c6..059a1ed7e85 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,9 +1,6 @@ +#Sat Oct 10 15:53:10 CEST 2026 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip -networkTimeout=10000 -retries=0 -retryBackOffMs=500 -validateDistributionUrl=true +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/meteordevelopment/meteorclient/commands/Command.java b/src/main/java/meteordevelopment/meteorclient/commands/Command.java index b1ebaf8bcdd..468e6a60827 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/Command.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/Command.java @@ -23,7 +23,7 @@ import java.util.List; public abstract class Command { - protected static CommandBuildContext REGISTRY_ACCESS = Commands.createValidationContext(VanillaRegistries.createLookup()); + protected static CommandBuildContext REGISTRY_ACCESS = Commands.createValidationContext(VanillaRegistries.createWorldLookup()); protected static final int SINGLE_SUCCESS = com.mojang.brigadier.Command.SINGLE_SUCCESS; protected static final Minecraft mc = MeteorClient.mc; diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/DropCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/DropCommand.java index 4a4f6aa1798..91d65d74eff 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/DropCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/DropCommand.java @@ -32,7 +32,7 @@ public DropCommand() { @Override public void build(LiteralArgumentBuilder builder) { // Main Hand - builder.then(literal("hand").executes(_ -> drop(player -> player.drop(true)))); + builder.then(literal("hand").executes(_ -> drop(player -> mc.gameMode.dropItem(player, true)))); // Offhand builder.then(literal("offhand").executes(_ -> drop(_ -> InvUtils.drop().slotOffhand()))); @@ -70,9 +70,7 @@ public void build(LiteralArgumentBuilder builder) { // Specific item builder.then(argument("item", ItemArgument.item(REGISTRY_ACCESS)) - .executes(context -> drop(player -> { - dropItem(player, context, Integer.MAX_VALUE); - })) + .executes(context -> drop(player -> dropItem(player, context, Integer.MAX_VALUE))) .then(argument("amount", IntegerArgumentType.integer(1)) .executes(context -> drop(player -> { int amount = IntegerArgumentType.getInteger(context, "amount"); @@ -83,7 +81,7 @@ public void build(LiteralArgumentBuilder builder) { private void dropItem(LocalPlayer player, CommandContext context, int amount) throws CommandSyntaxException { ItemStack stack = ItemArgument.getItem(context, "item").createItemStack(1); - if (stack == null || stack.getItem() == Items.AIR) throw NO_SUCH_ITEM.create(); + if (stack.getItem() == Items.AIR) throw NO_SUCH_ITEM.create(); for (int i = 0; i < player.getInventory().getContainerSize() && amount > 0; i++) { ItemStack invStack = player.getInventory().getItem(i); diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/NotebotCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/NotebotCommand.java index 6f3bb0350b3..cc13cedf45f 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/NotebotCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/NotebotCommand.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.commands.commands; +import com.mojang.blaze3d.Blaze3D; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; import com.mojang.brigadier.exceptions.DynamicCommandExceptionType; @@ -24,11 +25,11 @@ import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.game.ClientboundSoundPacket; import net.minecraft.sounds.SoundEvent; -import net.minecraft.util.Util; import net.minecraft.world.level.block.state.properties.NoteBlockInstrument; import java.io.FileWriter; import java.io.IOException; +import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -48,7 +49,7 @@ public NotebotCommand() { @Override public void build(LiteralArgumentBuilder builder) { builder.then(literal("help").executes(_ -> { - Util.getPlatform().openUri("https://github.com/MeteorDevelopment/meteor-client/wiki/Notebot-Guide"); + Blaze3D.openUri(URI.create("https://github.com/MeteorDevelopment/meteor-client/wiki/Notebot-Guide")); return SINGLE_SUCCESS; })); diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/SaveMapCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SaveMapCommand.java index 96c5699a5d5..db87ba20b9f 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SaveMapCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SaveMapCommand.java @@ -21,32 +21,28 @@ import net.minecraft.world.item.MapItem; import net.minecraft.world.level.saveddata.maps.MapItemSavedData; import org.jspecify.annotations.Nullable; -import org.lwjgl.BufferUtils; -import org.lwjgl.PointerBuffer; +import org.lwjgl.sdl.SDLDialog; +import org.lwjgl.sdl.SDL_DialogFileFilter; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; -import org.lwjgl.util.tinyfd.TinyFileDialogs; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; public class SaveMapCommand extends Command { private static final SimpleCommandExceptionType MAP_NOT_FOUND = new SimpleCommandExceptionType(Component.literal("You must be holding a filled map.")); private static final SimpleCommandExceptionType OOPS = new SimpleCommandExceptionType(Component.literal("Something went wrong.")); - private final PointerBuffer filters; + private final SDL_DialogFileFilter.Buffer filters; public SaveMapCommand() { super("save-map", "Saves a map to an image.", "sm"); - filters = BufferUtils.createPointerBuffer(1); - - ByteBuffer pngFilter = MemoryUtil.memASCII("*.png"); - - filters.put(pngFilter); - filters.rewind(); + MemoryStack stack = MemoryStack.stackPush(); + filters = SDL_DialogFileFilter.malloc(1, stack); + filters.name(stack.UTF8("NBT Files")).pattern(stack.UTF8("nbt")); } @Override @@ -68,29 +64,40 @@ private void saveMap(int scale) throws CommandSyntaxException { MapItemSavedData state = getMapState(); if (map == null || state == null) throw MAP_NOT_FOUND.create(); - File path = getPath(); - if (path == null) throw OOPS.create(); + SDLDialog.SDL_ShowSaveFileDialog((_, file, _) -> { + if (file == 0) return; + + long filePointer = MemoryUtil.memGetAddress(file); + if (filePointer == 0) return; + + String str = MemoryUtil.memUTF8(filePointer); + System.out.println(str); - MapTextureManagerAccessor textureManager = (MapTextureManagerAccessor) mc.getMapTextureManager(); - MapTextureManager.MapInstance texture = textureManager.meteor$invokeGetOrCreateMapInstance(map.get(DataComponents.MAP_ID), state); - if (texture.texture.getPixels() == null) throw OOPS.create(); + if (str.isBlank()) return; + if (!str.endsWith(".png")) str += ".png"; + File path = new File(str); - try { - if (scale == 128) texture.texture.getPixels().writeToFile(path); - else { - int[] data = texture.texture.getPixels().makePixelArray(); - BufferedImage image = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB); - image.setRGB(0, 0, image.getWidth(), image.getHeight(), data, 0, 128); + MapTextureManagerAccessor textureManager = (MapTextureManagerAccessor) mc.getMapTextureManager(); + MapTextureManager.MapInstance texture = textureManager.meteor$invokeGetOrCreateMapInstance(map.get(DataComponents.MAP_ID), state); + if (texture.texture.getPixels() == null) return; - BufferedImage scaledImage = new BufferedImage(scale, scale, 2); - scaledImage.createGraphics().drawImage(image, 0, 0, scale, scale, null); + try { + if (scale == 128) texture.texture.getPixels().writeToFile(path); + else { + int[] data = texture.texture.getPixels().makePixelArray(); + BufferedImage image = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB); + image.setRGB(0, 0, image.getWidth(), image.getHeight(), data, 0, 128); - ImageIO.write(scaledImage, "png", path); + BufferedImage scaledImage = new BufferedImage(scale, scale, 2); + scaledImage.createGraphics().drawImage(image, 0, 0, scale, scale, null); + + ImageIO.write(scaledImage, "png", path); + } + } catch (IOException e) { + error("Error writing map texture"); + MeteorClient.LOG.error(e.toString()); } - } catch (IOException e) { - error("Error writing map texture"); - MeteorClient.LOG.error(e.toString()); - } + }, 0, 0, filters, ""); } private @Nullable MapItemSavedData getMapState() { @@ -100,14 +107,6 @@ private void saveMap(int scale) throws CommandSyntaxException { return MapItem.getSavedData(map.get(DataComponents.MAP_ID), mc.level); } - private @Nullable File getPath() { - String path = TinyFileDialogs.tinyfd_saveFileDialog("Save image", null, filters, null); - if (path == null) return null; - if (!path.endsWith(".png")) path += ".png"; - - return new File(path); - } - private @Nullable ItemStack getMap() { ItemStack itemStack = mc.player.getMainHandItem(); if (itemStack.getItem() == Items.FILLED_MAP) return itemStack; diff --git a/src/main/java/meteordevelopment/meteorclient/commands/commands/SayCommand.java b/src/main/java/meteordevelopment/meteorclient/commands/commands/SayCommand.java index f85bbd4afdc..7e36c630c81 100644 --- a/src/main/java/meteordevelopment/meteorclient/commands/commands/SayCommand.java +++ b/src/main/java/meteordevelopment/meteorclient/commands/commands/SayCommand.java @@ -20,6 +20,7 @@ import org.meteordev.starscript.Script; import java.time.Instant; +import java.util.Optional; public class SayCommand extends Command { public SayCommand() { @@ -41,7 +42,7 @@ public void build(LiteralArgumentBuilder builder) { ClientPacketListener handler = mc.getConnection(); LastSeenMessagesTracker.Update lastSeenMessages = ((ClientPacketListenerAccessor) handler).meteor$getLastSeenMessages().generateAndApplyUpdate(); MessageSignature messageSignatureData = ((ClientPacketListenerAccessor) handler).meteor$getSignedMessageEncoder().pack(new SignedMessageBody(message, instant, l, lastSeenMessages.lastSeen())); - handler.send(new ServerboundChatPacket(message, instant, l, messageSignatureData, lastSeenMessages.update())); + handler.send(new ServerboundChatPacket(message, instant, l, Optional.ofNullable(messageSignatureData), lastSeenMessages.update())); } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java b/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java index 987c3517cbd..ed861c011e9 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/DefaultSettingsWidgetFactory.java @@ -28,7 +28,8 @@ import meteordevelopment.meteorclient.utils.render.color.SettingColor; import net.minecraft.client.resources.language.I18n; import org.apache.commons.lang3.Strings; -import org.lwjgl.util.tinyfd.TinyFileDialogs; +import org.lwjgl.sdl.SDLDialog; +import org.lwjgl.system.MemoryUtil; import java.io.File; import java.util.ArrayList; @@ -497,22 +498,23 @@ private void fileW(WTable table, FileSetting setting) { WLabel fileName = list.add(theme.label((setting.get() != null && setting.get().exists()) ? setting.get().getName() : "No file selected.")).widget(); - selectFile.action = () -> { - String path = TinyFileDialogs.tinyfd_openFileDialog( - "Select File", - null, - setting.filters, - null, - false - ); + selectFile.action = () -> SDLDialog.SDL_ShowOpenFileDialog((_, file, _) -> { + if (file == 0) return; - if (path != null) { + long filePointer = MemoryUtil.memGetAddress(file); + if (filePointer == 0) return; + + String path = MemoryUtil.memUTF8(filePointer); + System.out.println(path); + + if (!path.isEmpty()) { setting.set(new File(path)); fileName.set(setting.get().getName()); } - }; - reset(table, setting, () -> fileName.set((setting.get() != null && setting.get().exists()) ? setting.get().getName() : "No file selected.")); + reset(table, setting, () -> fileName.set((setting.get() != null && setting.get().exists()) ? setting.get().getName() : "No file selected.")); + }, 0L, 0, setting.filters, "", false); + } // Other diff --git a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java index 52de2da83d7..0c7775488c9 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/WidgetScreen.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.gui; -import com.mojang.blaze3d.platform.MacosUtil; +import com.mojang.blaze3d.platform.cursor.CursorTypes; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.gui.renderer.GuiDebugRenderer; import meteordevelopment.meteorclient.gui.renderer.GuiRenderer; @@ -16,7 +16,6 @@ import meteordevelopment.meteorclient.gui.widgets.containers.WContainer; import meteordevelopment.meteorclient.gui.widgets.input.WTextBox; import meteordevelopment.meteorclient.utils.Utils; -import meteordevelopment.meteorclient.utils.misc.CursorStyle; import meteordevelopment.meteorclient.utils.misc.input.Input; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.Screen; @@ -25,7 +24,9 @@ import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.network.chat.Component; import net.minecraft.util.Mth; +import org.apache.commons.lang3.SystemUtils; import org.jspecify.annotations.NonNull; +import org.lwjgl.sdl.SDLMouse; import java.util.ArrayList; import java.util.List; @@ -33,10 +34,10 @@ import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; +import static com.mojang.blaze3d.platform.InputConstants.*; import static meteordevelopment.meteorclient.MeteorClient.mc; import static meteordevelopment.meteorclient.utils.Utils.getWindowHeight; import static meteordevelopment.meteorclient.utils.Utils.getWindowWidth; -import static com.mojang.blaze3d.platform.InputConstants.*; public abstract class WidgetScreen extends Screen { private static final GuiRenderer RENDERER = new GuiRenderer(); @@ -184,7 +185,7 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou public boolean keyReleased(@NonNull KeyEvent input) { if (locked) return false; - if ((input.modifiers() == MOD_CONTROL || input.modifiers() == MOD_SUPER) && input.key() == KEY_9) { + if ((Input.modifiersMatch(input.modifiers(), MOD_CONTROL) || Input.modifiersMatch(input.modifiers(), MOD_SUPER)) && input.key() == KEY_9) { debug = !debug; return true; } @@ -236,7 +237,7 @@ public boolean keyPressed(@NonNull KeyEvent input) { return true; } - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; + boolean control = SystemUtils.IS_OS_MAC ? Input.modifiersMatch(input.modifiers(), MOD_SUPER) : Input.modifiersMatch(input.modifiers(), MOD_CONTROL); return (control && input.key() == KEY_C && toClipboard()) || (control && input.key() == KEY_V && fromClipboard()); @@ -331,7 +332,7 @@ public void removed() { closed = true; onClosed(); - Input.setCursorStyle(CursorStyle.Default); + Input.setCursorStyle(CursorTypes.ARROW); loopWidgets(root, widget -> { if (widget instanceof WTextBox textBox && textBox.isFocused()) textBox.setFocused(false); @@ -354,7 +355,7 @@ public void removed() { // Restore mouse position to where it was when the screen was closed if (parent != null) { - grabOrReleaseMouse(mc.getWindow(), CURSOR_NORMAL, restoreX, restoreY); + SDLMouse.SDL_WarpMouseInWindow(mc.getWindow().handle(), (float) restoreX, (float) restoreY); } }; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/renderer/packer/TexturePacker.java b/src/main/java/meteordevelopment/meteorclient/gui/renderer/packer/TexturePacker.java index 7e3d4f196a3..0522ac03d35 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/renderer/packer/TexturePacker.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/renderer/packer/TexturePacker.java @@ -5,9 +5,9 @@ package meteordevelopment.meteorclient.gui.renderer.packer; -import com.mojang.blaze3d.GpuFormat; import com.mojang.blaze3d.platform.TextureUtil; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.textures.FilterMode; import meteordevelopment.meteorclient.renderer.Texture; import net.minecraft.resources.Identifier; import org.lwjgl.BufferUtils; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/CommitsScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/CommitsScreen.java index b045d95641a..c0c6243a6ca 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/CommitsScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/CommitsScreen.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.gui.screens; +import com.mojang.blaze3d.Blaze3D; import meteordevelopment.meteorclient.addons.GithubRepo; import meteordevelopment.meteorclient.addons.MeteorAddon; import meteordevelopment.meteorclient.gui.GuiTheme; @@ -13,8 +14,8 @@ import meteordevelopment.meteorclient.gui.widgets.containers.WTable; import meteordevelopment.meteorclient.utils.network.Http; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; -import net.minecraft.util.Util; +import java.net.URI; import java.net.http.HttpResponse; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; @@ -66,11 +67,11 @@ private void populateHeader(String headerMessage) { l.add(theme.label(headerMessage)).expandX(); String website = addon.getWebsite(); - if (website != null) l.add(theme.button("Website")).widget().action = () -> Util.getPlatform().openUri(website); + if (website != null) l.add(theme.button("Website")).widget().action = () -> Blaze3D.openUri(URI.create(website)); l.add(theme.button("GitHub")).widget().action = () -> { GithubRepo repo = addon.getRepo(); - Util.getPlatform().openUri(String.format("https://github.com/%s/tree/%s", repo.getOwnerName(), repo.branch())); + Blaze3D.openUri(URI.create(String.format("https://github.com/%s/tree/%s", repo.getOwnerName(), repo.branch()))); }; } @@ -91,7 +92,7 @@ private void populateError() { l.add(theme.label("Consider using an authentication token: ")).expandX(); l.add(theme.button("Authorization Guide")).widget().action = () -> { - Util.getPlatform().openUri("https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens"); + Blaze3D.openUri(URI.create("https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens")); }; } @@ -115,7 +116,7 @@ private void populateCommits() { String date = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME.parse(commit.commit.committer.date)); t.add(theme.label(date)).top().right().widget().color = theme.textSecondaryColor(); - t.add(theme.label(getMessage(commit))).widget().action = () -> Util.getPlatform().openUri(String.format("https://github.com/%s/commit/%s", addon.getRepo().getOwnerName(), commit.sha)); + t.add(theme.label(getMessage(commit))).widget().action = () -> Blaze3D.openUri(URI.create(String.format("https://github.com/%s/commit/%s", addon.getRepo().getOwnerName(), commit.sha))); t.row(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java index 46668baac54..b8e9a7b3f73 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.gui.screens; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; @@ -21,7 +22,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.BundleContents; import org.jspecify.annotations.NonNull; -import com.mojang.blaze3d.platform.InputConstants; import java.util.ArrayList; import java.util.Collections; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java index 157e46be040..1fdfc7bd6b3 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java @@ -5,7 +5,6 @@ package meteordevelopment.meteorclient.gui.screens; -import com.mojang.blaze3d.platform.MacosUtil; import com.mojang.datafixers.util.Pair; import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.tabs.TabScreen; @@ -21,18 +20,20 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.utils.misc.NbtUtils; +import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.render.DisplayItemUtils; import net.minecraft.client.input.KeyEvent; import net.minecraft.world.item.Items; +import org.apache.commons.lang3.SystemUtils; import org.jspecify.annotations.NonNull; import java.util.ArrayList; import java.util.List; import java.util.Set; +import static com.mojang.blaze3d.platform.InputConstants.*; import static meteordevelopment.meteorclient.utils.Utils.getWindowHeight; import static meteordevelopment.meteorclient.utils.Utils.getWindowWidth; -import static com.mojang.blaze3d.platform.InputConstants.*; public class ModulesScreen extends TabScreen { private WCategoryController controller; @@ -155,7 +156,7 @@ protected WWindow createSearch(WContainer c) { public boolean keyPressed(@NonNull KeyEvent value) { if (locked) return false; - boolean cntrl = MacosUtil.IS_MACOS ? value.modifiers() == MOD_SUPER : value.modifiers() == MOD_CONTROL; + boolean cntrl = SystemUtils.IS_OS_MAC ? Input.modifiersMatch(value.modifiers(), MOD_SUPER) : Input.modifiersMatch(value.modifiers(), MOD_CONTROL); if (cntrl && value.key() == KEY_F) { if (searchWindow != null) searchWindow.setExpanded(true); diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ProxiesScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ProxiesScreen.java index 0c8087a4f89..864ce1eab75 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/ProxiesScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/ProxiesScreen.java @@ -21,13 +21,12 @@ import meteordevelopment.meteorclient.systems.proxies.Proxy; import meteordevelopment.meteorclient.utils.misc.NbtUtils; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; -import org.lwjgl.BufferUtils; -import org.lwjgl.PointerBuffer; +import org.lwjgl.sdl.SDLDialog; +import org.lwjgl.sdl.SDL_DialogFileFilter; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; -import org.lwjgl.util.tinyfd.TinyFileDialogs; import java.io.File; -import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -60,21 +59,25 @@ public void initWidgets() { newBtn.action = () -> mc.gui.setScreen(new EditProxyScreen(theme, null, this::reload)); // Import - PointerBuffer filters = BufferUtils.createPointerBuffer(1); + MemoryStack stack = MemoryStack.stackPush(); + SDL_DialogFileFilter.Buffer filters = SDL_DialogFileFilter.malloc(1, stack); + filters.name(stack.UTF8("Txt Files")).pattern(stack.UTF8("txt")); - ByteBuffer txtFilter = MemoryUtil.memASCII("*.txt"); + WButton importBtn = l.add(theme.button("Import")).expandX().widget(); + importBtn.action = () -> SDLDialog.SDL_ShowOpenFileDialog((_, fileptr, _) -> { + if (fileptr == 0) return; - filters.put(txtFilter); - filters.rewind(); + long filePointer = MemoryUtil.memGetAddress(fileptr); + if (filePointer == 0) return; - WButton importBtn = l.add(theme.button("Import")).expandX().widget(); - importBtn.action = () -> { - String selectedFile = TinyFileDialogs.tinyfd_openFileDialog("Import Proxies", null, filters, null, false); - if (selectedFile != null) { + String selectedFile = MemoryUtil.memUTF8(filePointer); + System.out.println(selectedFile); + + if (!selectedFile.isEmpty()){ File file = new File(selectedFile); mc.gui.setScreen(new ProxiesImportScreen(theme, file)); } - }; + }, 0L, 0, filters, "", false); l.add(refreshButton).expandX(); refreshButton.action = () -> Proxies.get().checkProxies(true); diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/EntityTypeListSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/EntityTypeListSettingScreen.java index c7178a03e04..a59e7505c2a 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/EntityTypeListSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/EntityTypeListSettingScreen.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.gui.screens.settings; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.textures.FilterMode; import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.WindowScreen; import meteordevelopment.meteorclient.gui.utils.Cell; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java index 9a2a8d0fdc8..1a11df90153 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/screens/settings/base/DynamicRegistryListSettingScreen.java @@ -37,7 +37,7 @@ private static Iterable> createUniverse(Collection (HolderLookup.Provider) networkHandler.registryAccess()) - .orElseGet(VanillaRegistries::createLookup) + .orElseGet(VanillaRegistries::createWorldLookup) .lookup(registryKey) .ifPresent(registry -> registry.listElementIds().forEach(set::add)); diff --git a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java index c70ff9ae97d..10943e7be76 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/tabs/builtin/ProfilesTab.java @@ -29,16 +29,16 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtIo; import org.apache.commons.io.FilenameUtils; -import org.lwjgl.BufferUtils; -import org.lwjgl.PointerBuffer; +import org.lwjgl.sdl.SDLDialog; +import org.lwjgl.sdl.SDLError; +import org.lwjgl.sdl.SDL_DialogFileFilter; +import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; -import org.lwjgl.util.tinyfd.TinyFileDialogs; import java.io.DataOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.nio.ByteBuffer; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -47,15 +47,12 @@ import static meteordevelopment.meteorclient.MeteorClient.mc; public class ProfilesTab extends Tab { - private static final PointerBuffer filters; + private static final SDL_DialogFileFilter.Buffer filters; static { - filters = BufferUtils.createPointerBuffer(1); - - ByteBuffer pngFilter = MemoryUtil.memASCII("*.nbt"); - - filters.put(pngFilter); - filters.rewind(); + MemoryStack stack = MemoryStack.stackPush(); + filters = SDL_DialogFileFilter.malloc(1, stack); + filters.name(stack.UTF8("NBT Files")).pattern(stack.UTF8("nbt")); } public ProfilesTab() { @@ -94,11 +91,21 @@ public void initWidgets() { // Import WButton importBtn = l.add(theme.button("Import")).expandX().widget(); importBtn.tooltip = "Import profile"; - importBtn.action = () -> { + importBtn.action = () -> SDLDialog.SDL_ShowOpenFileDialog((_, file, _) -> { try { - Profile imported = importProfile(); - if (imported != null) - MeteorClient.LOG.info("Successfully imported profile '{}'.", imported.name.get()); + if (file == 0) throw new IOException("Dialog Error: " + SDLError.SDL_GetError()); + + long filePointer = MemoryUtil.memGetAddress(file); + if (filePointer == 0) return; + + String path = MemoryUtil.memUTF8(filePointer); + System.out.println(path); + File profileFile = new File(path); + + Profile profile = importProfile(profileFile); + + if (profile != null) + MeteorClient.LOG.info("Successfully imported profile '{}'.", profile.name.get()); reload(); } catch (Exception e) { MeteorClient.LOG.error("Error importing profile", e); @@ -109,7 +116,7 @@ public void initWidgets() { .dontShowAgainCheckboxVisible(false) .show(); } - }; + }, 0L, 0, filters, "", false); } private void initTable(WTable table) { @@ -142,11 +149,7 @@ private void initTable(WTable table) { } } - private Profile importProfile() throws IOException { - String file = TinyFileDialogs.tinyfd_openFileDialog("Select profile to import", null, filters, null, false); - if (file == null) return null; - File profileFile = new File(file); - + private Profile importProfile(File profileFile) throws IOException { CompoundTag nbt = NbtIo.read(profileFile.toPath()); if (nbt == null) return null; @@ -283,20 +286,28 @@ public void initWidgets() { WContainer settingsContainer = add(theme.verticalList()).expandX().minWidth(400).widget(); - settingsContainer.add(theme.horizontalSeparator()).expandX().widget(); + settingsContainer.add(theme.horizontalSeparator()).expandX(); WCheckbox hud = addBool(settingsContainer, profile.settings.get("hud", Boolean.class)); WCheckbox macros = addBool(settingsContainer, profile.settings.get("macros", Boolean.class)); WCheckbox modules = addBool(settingsContainer, profile.settings.get("modules", Boolean.class)); WCheckbox waypoints = addBool(settingsContainer, profile.settings.get("waypoints", Boolean.class)); - add(theme.horizontalSeparator()).expandX().widget(); + add(theme.horizontalSeparator()).expandX(); WButton export = add(theme.button("Export profile")).expandX().widget(); - export.action = () -> { - exportProfile(profile, hud.checked, macros.checked, modules.checked, waypoints.checked); + export.action = () -> SDLDialog.SDL_ShowSaveFileDialog((_, file, _) -> { + if (file == 0) return; + + long filePointer = MemoryUtil.memGetAddress(file); + if (filePointer == 0) return; + + String path = MemoryUtil.memUTF8(filePointer); + System.out.println(path); + + exportProfile(path, profile, hud.checked, macros.checked, modules.checked, waypoints.checked); onClose(); - }; + }, 0, 0, filters, ""); } private WCheckbox addBool(WContainer container, Setting setting) { @@ -309,8 +320,7 @@ private WCheckbox addBool(WContainer container, Setting setting) { return c; } - private void exportProfile(Profile profile, boolean hud, boolean macros, boolean modules, boolean waypoints) { - String path = TinyFileDialogs.tinyfd_saveFileDialog("Save profile", profile.name.get(), filters, null); + private void exportProfile(String path, Profile profile, boolean hud, boolean macros, boolean modules, boolean waypoints) { if (path == null) return; Path p = Path.of(path.endsWith(".nbt") ? path : path + ".nbt"); 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 e24349798b8..c71fb631cfb 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java @@ -5,7 +5,6 @@ package meteordevelopment.meteorclient.gui.themes.meteor; -import com.mojang.blaze3d.platform.MacosUtil; import meteordevelopment.meteorclient.gui.DefaultSettingsWidgetFactory; import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.WidgetScreen; @@ -31,6 +30,7 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.color.SettingColor; +import org.apache.commons.lang3.SystemUtils; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -380,7 +380,7 @@ public TextRenderer textRenderer() { public double scale(double value) { double scaled = value * scale.get(); - if (MacosUtil.IS_MACOS) { + if (SystemUtils.IS_OS_MAC) { scaled /= (double) mc.getWindow().getWidth() / mc.getWindow().getWidth(); } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/WMeteorModule.java b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/WMeteorModule.java index ffbf194c944..386154f0bb0 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/WMeteorModule.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/widgets/WMeteorModule.java @@ -13,9 +13,9 @@ import meteordevelopment.meteorclient.systems.modules.Module; import net.minecraft.util.Mth; -import static meteordevelopment.meteorclient.MeteorClient.mc; import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; +import static meteordevelopment.meteorclient.MeteorClient.mc; public class WMeteorModule extends WPressable implements MeteorWidget { private final Module module; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java index 06ce65ec285..e64a887b40b 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java @@ -13,9 +13,9 @@ import meteordevelopment.meteorclient.gui.widgets.pressable.WPressable; import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.gui.screens.Screen; +import org.lwjgl.sdl.SDLMouse; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static com.mojang.blaze3d.platform.InputConstants.*; public abstract class WTopBar extends WHorizontalList { protected abstract Color getButtonColor(boolean pressed, boolean hovered); @@ -57,7 +57,7 @@ protected void onPressed(int button) { double mouseY = mc.mouseHandler.ypos(); tab.openScreen(theme); - grabOrReleaseMouse(mc.getWindow(), CURSOR_NORMAL, mouseX, mouseY); + SDLMouse.SDL_WarpMouseInWindow(mc.getWindow().handle(), (float) mouseX, (float) mouseY); } } 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 b7b81a3c85a..2cbaa74d7ca 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WWindow.java @@ -15,9 +15,9 @@ import java.util.function.Consumer; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; import static meteordevelopment.meteorclient.utils.Utils.getWindowHeight; import static meteordevelopment.meteorclient.utils.Utils.getWindowWidth; -import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; public abstract class WWindow extends WVerticalList { public double padding = 8; diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WBlockPosEdit.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WBlockPosEdit.java index 2525d9ed283..59fc03aab00 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WBlockPosEdit.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WBlockPosEdit.java @@ -56,7 +56,7 @@ public void init() { WButton here = add(theme.confirmedButton("Set Here", "Confirm")).expandX().widget(); here.action = () -> { lastValue = value; - set(new BlockPos(mc.player.blockPosition())); + set(BlockPos.containing(mc.player.position())); newValueCheck(); clear(); 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 5b2fdbe9a4f..43182965848 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java @@ -5,7 +5,6 @@ package meteordevelopment.meteorclient.gui.widgets.input; -import com.mojang.blaze3d.platform.MacosUtil; import it.unimi.dsi.fastutil.doubles.DoubleArrayList; import it.unimi.dsi.fastutil.doubles.DoubleList; import meteordevelopment.meteorclient.gui.GuiKeyEvents; @@ -14,6 +13,7 @@ import meteordevelopment.meteorclient.gui.utils.CharFilter; import meteordevelopment.meteorclient.gui.widgets.WWidget; import meteordevelopment.meteorclient.gui.widgets.containers.WContainer; +import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.render.color.Color; import net.minecraft.client.input.CharacterEvent; import net.minecraft.client.input.KeyEvent; @@ -24,8 +24,8 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; -import static meteordevelopment.meteorclient.MeteorClient.mc; import static com.mojang.blaze3d.platform.InputConstants.*; +import static meteordevelopment.meteorclient.MeteorClient.mc; public abstract class WTextBox extends WWidget { private static final Renderer DEFAULT_RENDERER = (renderer, x, y, text, color) -> renderer.text(text, x, y, color, false); @@ -240,7 +240,7 @@ public boolean onMouseReleased(MouseButtonEvent click) { public boolean onKeyPressed(KeyEvent input) { if (!focused) return false; - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; + boolean control = SystemUtils.IS_OS_MAC ? Input.modifiersMatch(input.modifiers(), MOD_SUPER) : Input.modifiersMatch(input.modifiers(), MOD_CONTROL); if (control && input.key() == KEY_C) { if (cursor != selectionStart || cursor != selectionEnd) { @@ -258,7 +258,7 @@ public boolean onKeyPressed(KeyEvent input) { cursor = text.length(); selectionStart = 0; selectionEnd = cursor; - } else if (input.modifiers() == ((MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT) && input.key() == KEY_A) { + } else if (Input.modifiersMatch(input.modifiers(), (SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT) && input.key() == KEY_A) { resetSelection(); } else if (input.key() == KEY_RETURN || input.key() == KEY_NUMPADENTER) { setFocused(false); @@ -299,10 +299,10 @@ public boolean onKeyPressed(KeyEvent input) { public boolean onKeyRepeated(KeyEvent input) { if (!focused) return false; - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; - boolean shift = input.modifiers() == MOD_SHIFT; - boolean controlShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? MOD_ALT : MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT); - boolean altShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT) | MOD_SHIFT); + boolean control = SystemUtils.IS_OS_MAC ? Input.modifiersMatch(input.modifiers(), MOD_SUPER) : Input.modifiersMatch(input.modifiers(), MOD_CONTROL); + boolean shift = Input.modifiersMatch(input.modifiers(), MOD_SHIFT); + boolean controlShift = Input.modifiersMatch(input.modifiers(), (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT); + boolean altShift = Input.modifiersMatch(input.modifiers(), (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT) | MOD_SHIFT); if (control && input.key() == KEY_V) { clearSelection(); @@ -332,9 +332,9 @@ public boolean onKeyRepeated(KeyEvent input) { if (cursor > 0 && cursor == selectionStart && cursor == selectionEnd) { String preText = text; - int count = (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL)) + int count = (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) ? cursor - : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) + : (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) ? countToNextSpace(true) : 1; @@ -353,9 +353,9 @@ public boolean onKeyRepeated(KeyEvent input) { if (cursor < text.length()) { String preText = text; - int count = input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL) + int count = Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL) ? text.length() - cursor - : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) + : (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) ? countToNextSpace(false) : 1; @@ -370,12 +370,12 @@ public boolean onKeyRepeated(KeyEvent input) { } else if (input.key() == KEY_LEFT) { if (cursor > 0) { // sets the cursor to just after the next leftmost space - if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) { + if (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) { cursor -= countToNextSpace(true); resetSelection(); } // sets the cursor to the beginning of the text box - else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL)) { + else if (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) { cursor = 0; resetSelection(); } @@ -424,7 +424,7 @@ else if (shift) { } cursorChanged(); - } else if (selectionStart != selectionEnd && selectionStart == 0 && input.modifiers() == 0) { + } else if (selectionStart != selectionEnd && selectionStart == 0 && Input.modifiersMatch(input.modifiers(), 0)) { cursor = 0; resetSelection(); cursorChanged(); @@ -434,12 +434,12 @@ else if (shift) { } else if (input.key() == KEY_RIGHT) { if (cursor < text.length()) { // sets the cursor to just before the next rightmost space - if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) { + if (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) { cursor += countToNextSpace(false); resetSelection(); } // sets the cursor to the end of the text box - else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : MacosUtil.IS_MACOS ? MOD_SUPER : MOD_CONTROL)) { + else if (Input.modifiersMatch(input.modifiers(), SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) { cursor = text.length(); resetSelection(); } @@ -487,7 +487,7 @@ else if (shift) { } cursorChanged(); - } else if (selectionStart != selectionEnd && selectionEnd == text.length() && input.modifiers() == 0) { + } else if (selectionStart != selectionEnd && selectionEnd == text.length() && Input.modifiersMatch(input.modifiers(), 0)) { cursor = text.length(); resetSelection(); cursorChanged(); @@ -717,6 +717,9 @@ public void setFocused(boolean focused) { this.focused = focused; + // SDL only delivers text input while it is started for the window; vanilla does this from EditBox focus + mc.textInputManager().onTextInputFocusChange(this, focused); + resetSelection(); if (wasJustFocused) onCursorChanged(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java index 02370189ddc..28df5b4e4f8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java @@ -23,8 +23,8 @@ import net.minecraft.world.inventory.ContainerInput; import net.minecraft.world.inventory.Slot; import net.minecraft.world.item.ItemStack; -import org.jspecify.annotations.Nullable; import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; @@ -32,8 +32,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import static meteordevelopment.meteorclient.MeteorClient.mc; import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; +import static meteordevelopment.meteorclient.MeteorClient.mc; @Mixin(AbstractContainerScreen.class) public abstract class AbstractContainerScreenMixin extends Screen implements MenuAccess { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java index 54dbd67e015..29af12fc358 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java @@ -21,7 +21,8 @@ import net.minecraft.client.renderer.entity.state.AvatarRenderState; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.rendertype.RenderTypes; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.OverlayTexture; +import net.minecraft.client.renderer.texture.UvMapping; import net.minecraft.resources.Identifier; import net.minecraft.world.entity.Avatar; import org.spongepowered.asm.mixin.Mixin; @@ -77,10 +78,10 @@ public AvatarRendererMixin(EntityRendererProvider.Context ctx, PlayerModel model // Chams - Hand Color - @WrapWithCondition(method = "renderHand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModelPart(Lnet/minecraft/client/model/geom/ModelPart;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/rendertype/RenderType;IILnet/minecraft/client/renderer/texture/TextureAtlasSprite;)V")) - private boolean renderArm$color(SubmitNodeCollector instance, ModelPart modelPart, PoseStack matrixStack, RenderType renderLayer, int light, int uv, TextureAtlasSprite sprite) { + @WrapWithCondition(method = "renderHand", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModelPart(Lnet/minecraft/client/model/geom/ModelPart;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/rendertype/RenderType;IILnet/minecraft/client/renderer/texture/UvMapping;)V")) + private boolean renderArm$color(SubmitNodeCollector instance, ModelPart modelPart, PoseStack poseStack, RenderType renderType, int light, int uv, UvMapping uvMapping) { if (chams.isActive() && chams.hand.get()) { - instance.submitModelPart(modelPart, matrixStack, renderLayer, light, uv, null, chams.handColor.get().getPacked(), null); + instance.submitModelPart(modelPart, poseStack, renderType, light, OverlayTexture.NO_OVERLAY, uvMapping, chams.handColor.get().getPacked(), 0); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BannerRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BannerRendererMixin.java index bca35781f14..6694e8ff84c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BannerRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BannerRendererMixin.java @@ -62,19 +62,18 @@ private void injectRender2(BannerRenderState state, PoseStack poseStack, SubmitN } @Unique - private static void renderPillar(PoseStack matrices, SubmitNodeCollector submitNodeCollector, int light, BannerModel model, SpriteGetter sprites, ModelFeatureRenderer.CrumblingOverlay breakProgress) { + private static void renderPillar(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int light, BannerModel model, SpriteGetter sprites, ModelFeatureRenderer.CrumblingOverlay breakProgress) { SpriteId sprite = Sheets.BANNER_BASE; submitNodeCollector.submitModel( model, Unit.INSTANCE, - matrices, + poseStack, light, OverlayTexture.NO_OVERLAY, -1, sprite, sprites, - 0, - breakProgress + 0 ); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java index f006e57e81f..9cc4ba52fd7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java @@ -94,7 +94,7 @@ private GuiMessage onAddMessage_modifyGuiMessage(GuiMessage line) { } @Inject(at = @At("HEAD"), method = "addMessage", cancellable = true) - private void onAddMessage(Component message, MessageSignature signature, GuiMessageSource source, GuiMessageTag indicator, CallbackInfo ci, @Local(argsOnly = true, name = "contents") LocalRef contents, @Local(argsOnly = true, name = "tag") LocalRef tag) { + private void onAddMessage(Component message, MessageSignature signature, GuiMessageSource source, GuiMessageTag indicator, CallbackInfo ci, @Local(argsOnly = true) LocalRef contents, @Local(argsOnly = true) LocalRef tag) { ReceiveMessageEvent event = MeteorClient.EVENT_BUS.post(ReceiveMessageEvent.get(message, indicator, nextId)); if (event.isCancelled()) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java index 9f0135be996..00e28906083 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java @@ -64,8 +64,8 @@ private void onAddDestroyBlockEffect(BlockPos pos, BlockState blockState, Callba if (Modules.get().get(NoRender.class).noParticle(ParticleTypes.BLOCK)) ci.cancel(); } - @Inject(method = "addBreakingBlockEffect", at = @At("HEAD"), cancellable = true) - private void onAddBlockBreakingParticles(BlockPos pos, Direction direction, CallbackInfo ci) { + @Inject(method = "addBreakingParticles", at = @At("HEAD"), cancellable = true) + private void onAddBlockBreakingParticles(BlockPos pos, Direction direction, BlockState blockState, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noParticle(ParticleTypes.BLOCK)) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPacketListenerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPacketListenerMixin.java index 1e4f8f9bda2..94a88032a58 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ClientPacketListenerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ClientPacketListenerMixin.java @@ -92,7 +92,7 @@ private void onHandleSoundEvent(ClientboundSoundPacket packet, CallbackInfo ci) @Inject(method = "handleLevelChunkWithLight", at = @At("TAIL")) private void onHandleLevelChunkWithLight(ClientboundLevelChunkWithLightPacket packet, CallbackInfo ci) { - LevelChunk chunk = minecraft.level.getChunk(packet.getX(), packet.getZ()); + LevelChunk chunk = minecraft.level.getChunk(packet.x(), packet.z()); MeteorClient.EVENT_BUS.post(new ChunkDataEvent(chunk)); } @@ -106,9 +106,9 @@ private void onHandleContainerContent(ClientboundContainerSetContentPacket packe MeteorClient.EVENT_BUS.post(InventoryEvent.get(packet)); } - @Inject(method = "handleRemoveEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/game/ClientboundRemoveEntitiesPacket;getEntityIds()Lit/unimi/dsi/fastutil/ints/IntList;")) + @Inject(method = "handleRemoveEntities", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/protocol/game/ClientboundRemoveEntitiesPacket;entityIds()Lit/unimi/dsi/fastutil/ints/IntList;")) private void onHandleRemoveEntities(ClientboundRemoveEntitiesPacket packet, CallbackInfo ci) { - for (int id : packet.getEntityIds()) { + for (int id : packet.entityIds()) { MeteorClient.EVENT_BUS.post(EntityDestroyEvent.get(minecraft.level.getEntity(id))); } } @@ -159,7 +159,7 @@ private void onHandleMovePlayerReturn(ClientboundPlayerPositionPacket packet, Ca } @Inject(method = "sendChat", at = @At("HEAD"), cancellable = true) - private void onSendChatMessage(String message, CallbackInfo ci, @Local(argsOnly = true, name = "content") LocalRef messageRef) { + private void onSendChatMessage(String message, CallbackInfo ci, @Local(argsOnly = true) LocalRef messageRef) { if (!message.startsWith(Config.get().prefix.get()) && !(BaritoneUtils.IS_AVAILABLE && message.startsWith(BaritoneUtils.getPrefix()))) { SendMessageEvent event = MeteorClient.EVENT_BUS.post(SendMessageEvent.get(message)); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/CloudRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/CloudRendererMixin.java index d9f2b724f86..6a470f3d111 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/CloudRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/CloudRendererMixin.java @@ -5,11 +5,11 @@ package meteordevelopment.meteorclient.mixin; +import com.mojang.renderpearl.api.commands.RenderPass; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.world.Ambience; import net.minecraft.client.CloudStatus; import net.minecraft.client.renderer.CloudRenderer; -import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -17,8 +17,8 @@ @Mixin(CloudRenderer.class) public abstract class CloudRendererMixin { - @Inject(method = "render", at = @At("HEAD"), cancellable = true) - private void onRenderClouds(int color, CloudStatus cloudStatus, float bottomY, int range, Vec3 cameraPosition, long gameTime, float partialTicks, CallbackInfo ci) { + @Inject(method = "render(Lnet/minecraft/client/CloudStatus;Lcom/mojang/renderpearl/api/commands/RenderPass;)V", at = @At("HEAD"), cancellable = true) + private void onRenderClouds(CloudStatus cloudStatus, RenderPass renderPass, CallbackInfo ci) { Ambience ambience = Modules.get().get(Ambience.class); if (ambience.isActive() && ambience.endSky.get()) ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantTableRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantTableRendererMixin.java index 9f321888790..d5e2710b3a8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EnchantTableRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EnchantTableRendererMixin.java @@ -12,7 +12,6 @@ import net.minecraft.client.model.Model; import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.blockentity.EnchantTableRenderer; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.client.resources.model.sprite.SpriteGetter; import net.minecraft.client.resources.model.sprite.SpriteId; import org.spongepowered.asm.mixin.Mixin; @@ -20,8 +19,8 @@ @Mixin(EnchantTableRenderer.class) public abstract class EnchantTableRendererMixin { - @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/blockentity/state/EnchantTableRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;IIILnet/minecraft/client/resources/model/sprite/SpriteId;Lnet/minecraft/client/resources/model/sprite/SpriteGetter;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V")) - private boolean onRenderBookModelRenderProxy(SubmitNodeCollector instance, Model model, Object state, PoseStack poseStack, int lightCoords, int overlayCoords, int tintedColor, SpriteId spriteId, SpriteGetter spriteGetter, int outlineColor, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay) { + @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/blockentity/state/EnchantTableRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;IIILnet/minecraft/client/resources/model/sprite/SpriteId;Lnet/minecraft/client/resources/model/sprite/SpriteGetter;I)V")) + private boolean onRenderBookModelRenderProxy(SubmitNodeCollector instance, Model model, Object state, PoseStack poseStack, int lightCoords, int overlayCoords, int tintedColor, SpriteId spriteId, SpriteGetter spriteGetter, int outlineColor) { return !Modules.get().get(NoRender.class).noEnchTableBook(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalRendererMixin.java index 36e586b9da0..f846e4183e0 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EndCrystalRendererMixin.java @@ -13,7 +13,6 @@ import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.EndCrystalRenderer; import net.minecraft.client.renderer.entity.state.EndCrystalRenderState; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.client.renderer.rendertype.RenderTypes; import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.resources.Identifier; @@ -55,8 +54,8 @@ private void onInit(CallbackInfo ci) { // Chams - Color - @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/entity/state/EndCrystalRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/resources/Identifier;IIILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V")) - private boolean render$color(SubmitNodeCollector instance, Model model, S state, PoseStack poseStack, Identifier identifier, int lightCoords, int overlayCoords, int outlineColor, ModelFeatureRenderer.CrumblingOverlay crumblingOverlay) { + @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/entity/state/EndCrystalRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/resources/Identifier;III)V")) + private boolean render$color(SubmitNodeCollector instance, Model model, S state, PoseStack poseStack, Identifier identifier, int lightCoords, int overlayCoords, int outlineColor) { if (chams.isActive() && chams.crystals.get()) { var renderType = RenderTypes.entityTranslucent((chams.isActive() && chams.crystals.get() && !chams.crystalsTexture.get()) ? Chams.BLANK : END_CRYSTAL_LOCATION); @@ -69,8 +68,7 @@ private void onInit(CallbackInfo ci) { overlayCoords, chams.crystalsColor.get().getPacked(), null, - outlineColor, - null + outlineColor ); return false; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java index 66978871b63..b5cdee1d8ec 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/EntityRendererMixin.java @@ -57,7 +57,7 @@ private void onRenderLabel(T entity, CallbackInfoReturnable cir) { } @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) - private void shouldRender(T entity, Frustum culler, double camX, double camY, double camZ, CallbackInfoReturnable cir) { + private void shouldRender(T entity, Frustum culler, double camX, double camY, double camZ, float partialTicks, CallbackInfoReturnable cir) { if (noRender.noEntity(entity)) cir.setReturnValue(false); if (noRender.noFallingBlocks() && entity instanceof FallingBlockEntity) cir.setReturnValue(false); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsMixin.java new file mode 100644 index 00000000000..a877f8cc6b3 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsMixin.java @@ -0,0 +1,60 @@ +/* + * 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.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.HandView; +import net.minecraft.client.player.FirstPersonHandsAndItems; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.item.ItemStack; +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.ModifyArg; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + +@Mixin(FirstPersonHandsAndItems.class) +public abstract class FirstPersonHandsAndItemsMixin { + @Shadow + protected abstract boolean shouldInstantlyReplaceVisibleItem(ItemStack currentlyVisibleItem, ItemStack expectedItem, LocalPlayer player); + + @Shadow + private ItemStack mainHandItem; + + @Shadow + private float mainHandHeight; + + @Shadow + private ItemStack offHandItem; + + @Shadow + private float offHandHeight; + + @ModifyReturnValue(method = "shouldInstantlyReplaceVisibleItem", at = @At("RETURN")) + private boolean modifySkipSwapAnimation(boolean original) { + return original || Modules.get().get(HandView.class).skipSwapping(); + } + + @ModifyArg(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 2), index = 0) + private float modifyEquipProgressMainhand(float value, @Local(argsOnly = true) LocalPlayer player) { + HandView handView = Modules.get().get(HandView.class); + if (handView.swordSlash() && mc.player.getMainHandItem().is(ItemTags.SWORDS)) return value; + + float f = mc.player.getItemSwapScale(1f); + float modified = handView.oldAnimations() ? 1 : f * f * f; + + return (shouldInstantlyReplaceVisibleItem(mainHandItem, player.getMainHandItem(), player) ? modified : 0) - mainHandHeight; + } + + @ModifyArg(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 3), index = 0) + private float modifyEquipProgressOffhand(float value, @Local(argsOnly = true) LocalPlayer player) { + return (shouldInstantlyReplaceVisibleItem(offHandItem, player.getOffhandItem(), player) ? 1 : 0) - offHandHeight; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsRendererMixin.java new file mode 100644 index 00000000000..bea27d87a10 --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsRendererMixin.java @@ -0,0 +1,64 @@ +/* + * 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 com.mojang.blaze3d.vertex.PoseStack; +import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.events.render.ArmRenderEvent; +import meteordevelopment.meteorclient.events.render.HeldItemRendererEvent; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.HandView; +import net.minecraft.client.renderer.FirstPersonHandsAndItemsRenderer; +import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.state.level.FirstPersonHandsAndItemsRenderState; +import net.minecraft.client.renderer.state.level.PlayerRenderState; +import net.minecraft.tags.ItemTags; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.HumanoidArm; +import net.minecraft.world.item.ItemStack; +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(FirstPersonHandsAndItemsRenderer.class) +public abstract class FirstPersonHandsAndItemsRendererMixin { + @ModifyExpressionValue(method = "submitHandsWithItems", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/entity/state/AvatarRenderState;swingAnimation:F")) + private float modifySwing(float attackValue, final float partialTicks, final PoseStack poseStack, final SubmitNodeCollector submitNodeCollector, final PlayerRenderState playerState, final FirstPersonHandsAndItemsRenderState state) { + HandView module = Modules.get().get(HandView.class); + InteractionHand hand = state.attackHand; + + if (module.isActive()) { + if (module.swordSlash() && hand == InteractionHand.MAIN_HAND && state.mainHandItem.is(ItemTags.SWORDS)) { + return 0f; + } + if (hand == InteractionHand.OFF_HAND && !state.offHandItem.isEmpty()) { + return attackValue + module.offSwing.get().floatValue(); + } + if (hand == InteractionHand.MAIN_HAND && !state.mainHandItem.isEmpty()) { + return attackValue + module.mainSwing.get().floatValue(); + } + } + + return attackValue; + } + + @Inject(method = "submitArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/item/ItemStackRenderState;submit(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;III)V", shift = At.Shift.BEFORE)) + private void onRenderItem(PlayerRenderState playerState, FirstPersonHandsAndItemsRenderState state, float partialTicks, float xRot, InteractionHand hand, float attack, ItemStack itemStack, float inverseArmHeight, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, CallbackInfo ci) { + MeteorClient.EVENT_BUS.post(HeldItemRendererEvent.get(hand, poseStack)); + } + + @Inject(method = "submitArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/FirstPersonHandsAndItemsRenderer;renderPlayerArm(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;IFFLnet/minecraft/world/entity/HumanoidArm;Lnet/minecraft/client/renderer/state/level/PlayerRenderState;)V")) + private void onRenderArm(PlayerRenderState playerState, FirstPersonHandsAndItemsRenderState state, float partialTicks, float xRot, InteractionHand hand, float attack, ItemStack itemStack, float inverseArmHeight, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, CallbackInfo ci) { + MeteorClient.EVENT_BUS.post(ArmRenderEvent.get(hand, poseStack)); + } + + @Inject(method = "applyEatTransform", at = @At(value = "INVOKE", target = "Ljava/lang/Math;pow(DD)D", shift = At.Shift.BEFORE), cancellable = true) + private void cancelTransformations(PoseStack poseStack, float partialTicks, HumanoidArm arm, float useItemRemainingTicks, int useDuration, CallbackInfo ci) { + if (Modules.get().get(HandView.class).disableFoodAnimation()) ci.cancel(); + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GpuDeviceMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/FrontendGpuDeviceMixin.java similarity index 76% rename from src/main/java/meteordevelopment/meteorclient/mixin/GpuDeviceMixin.java rename to src/main/java/meteordevelopment/meteorclient/mixin/FrontendGpuDeviceMixin.java index efa887201b7..99f1523517a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GpuDeviceMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/FrontendGpuDeviceMixin.java @@ -5,16 +5,16 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.blaze3d.systems.GpuDevice; -import com.mojang.blaze3d.systems.GpuDeviceBackend; -import com.mojang.blaze3d.systems.RenderPassBackend; +import com.mojang.renderpearl.backend.api.GpuDeviceBackend; +import com.mojang.renderpearl.backend.api.RenderPassBackend; +import com.mojang.renderpearl.frontend.FrontendGpuDevice; import meteordevelopment.meteorclient.mixininterface.IGpuDevice; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; -@Mixin(GpuDevice.class) -public abstract class GpuDeviceMixin implements IGpuDevice { +@Mixin(FrontendGpuDevice.class) +public abstract class FrontendGpuDeviceMixin implements IGpuDevice { @Shadow @Final private GpuDeviceBackend backend; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java index 1d8ade21d54..5c5cddd3100 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GameRendererMixin.java @@ -9,6 +9,7 @@ import com.llamalad7.mixinextras.sugar.Local; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.renderpearl.api.textures.GpuTextureView; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.MixinPlugin; import meteordevelopment.meteorclient.events.render.Render3DEvent; @@ -24,16 +25,14 @@ import meteordevelopment.meteorclient.utils.render.NametagUtils; import meteordevelopment.meteorclient.utils.render.RenderUtils; import net.minecraft.client.Camera; -import net.minecraft.client.DeltaTracker; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.render.pip.PictureInPictureRenderer; import net.minecraft.client.renderer.GameRenderer; import net.minecraft.client.renderer.RenderBuffers; import net.minecraft.client.renderer.state.GameRenderState; import net.minecraft.client.renderer.state.level.CameraRenderState; +import net.minecraft.client.renderer.state.level.PlayerRenderState; import net.minecraft.util.profiling.Profiler; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import org.joml.Matrix4f; import org.joml.Matrix4fc; import org.spongepowered.asm.mixin.Final; @@ -89,8 +88,8 @@ public abstract class GameRendererMixin { return result; } - @Inject(method = "renderLevel", at = @At(value = "INVOKE_STRING", target = "Lnet/minecraft/util/profiling/ProfilerFiller;popPush(Ljava/lang/String;)V", args = "ldc=hand")) - private void onRenderLevel(DeltaTracker deltaTracker, CallbackInfo ci, @Local(name = "projectionMatrix") Matrix4f projectionMatrix, @Local(name = "modelViewMatrix") Matrix4fc modelViewMatrix, @Local(name = "worldPartialTicks") float worldPartialTicks, @Local(name = "bobStack") PoseStack bobStack) { + @Inject(method = "renderLevel", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GameRenderer;render3dHud(Lnet/minecraft/client/renderer/state/level/CameraRenderState;Lnet/minecraft/client/renderer/state/level/PlayerRenderState;Lnet/minecraft/client/renderer/state/OptionsRenderState;Z)V")) + private void onRenderLevel(CallbackInfo ci, @Local(name = "projectionMatrix") Matrix4f projectionMatrix, @Local(name = "cameraState") CameraRenderState cameraState, @Local(name = "worldPartialTicks") float worldPartialTicks, @Local(name = "bobStack") PoseStack bobStack) { if (!Utils.canUpdate()) return; Profiler.get().push(MeteorClient.MOD_ID + "_render"); @@ -104,7 +103,7 @@ private void onRenderLevel(DeltaTracker deltaTracker, CallbackInfo ci, @Local(na Render3DEvent event = Render3DEvent.get(bobStack, renderer, depthRenderer, worldPartialTicks, mainCamera.position().x, mainCamera.position().y, mainCamera.position().z); // Update model view matrix - + Matrix4fc modelViewMatrix = cameraState.viewRotationMatrix; RenderSystem.getModelViewStack().pushMatrix().mul(modelViewMatrix); matrices.pushPose(); @@ -143,20 +142,13 @@ private void onRenderLevelTail(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(RenderAfterWorldEvent.get()); } - @Inject(method = "displayItemActivation", at = @At("HEAD"), cancellable = true) - private void onDisplayItemActivation(ItemStack itemStack, CallbackInfo ci) { - if (itemStack.getItem() == Items.TOTEM_OF_UNDYING && Modules.get().get(NoRender.class).noTotemAnimation()) { - ci.cancel(); - } - } - @ModifyExpressionValue(method = "renderLevel", at = @At(value = "INVOKE", target = "Ljava/lang/Math;max(FF)F", ordinal = 0)) private float applyCameraTransformationsMathHelperLerpProxy(float original) { return Modules.get().get(NoRender.class).noNausea() ? 0 : original; } @Inject(method = "renderItemInHand", at = @At("HEAD"), cancellable = true) - private void renderItemInHand(CameraRenderState cameraState, float deltaPartialTick, Matrix4fc modelViewMatrix, CallbackInfo ci) { + private void renderItemInHand(CameraRenderState cameraState, PlayerRenderState playerState, GpuTextureView depthTextureView, CallbackInfo ci) { if (!Modules.get().get(Freecam.class).renderHands() || !Modules.get().get(Zoom.class).renderHands()) { ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GlCommandEncoderMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GlCommandEncoderMixin.java index 1a1f8b934f8..3b7d1f62fc6 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GlCommandEncoderMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GlCommandEncoderMixin.java @@ -5,22 +5,17 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.blaze3d.opengl.GlCommandEncoder; -import com.mojang.blaze3d.opengl.GlDevice; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.systems.RenderPassBackend; +import com.mojang.renderpearl.backend.api.RenderPassBackend; +import com.mojang.renderpearl.backend.opengl.GlCommandEncoder; +import com.mojang.renderpearl.backend.opengl.GlDevice; import meteordevelopment.meteorclient.mixininterface.IGpuDevice; -import meteordevelopment.meteorclient.mixininterface.IRenderPipeline; 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; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import static org.lwjgl.opengl.GL11C.*; - @Mixin(GlCommandEncoder.class) public abstract class GlCommandEncoderMixin { @Shadow @@ -28,18 +23,19 @@ public abstract class GlCommandEncoderMixin { private GlDevice device; @SuppressWarnings("deprecation") - @Inject(method = "createRenderPass(Lcom/mojang/blaze3d/systems/RenderPassDescriptor;)Lcom/mojang/blaze3d/systems/RenderPassBackend;", at = @At("RETURN")) + @Inject(method = "createRenderPass", at = @At("RETURN")) private void createRenderPass$iGpuDevice(CallbackInfoReturnable cir) { ((IGpuDevice) device).meteor$onCreateRenderPass(cir.getReturnValue()); } - @Inject(method = "applyPipelineState", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_polygonMode(II)V")) - private void setPipelineAndApplyState$lineSmooth(RenderPipeline pipeline, CallbackInfo ci) { - if (((IRenderPipeline) pipeline).meteor$getLineSmooth()) { - glEnable(GL_LINE_SMOOTH); - glLineWidth(1); - } else { - glDisable(GL_LINE_SMOOTH); - } - } + // todo ? +// @Inject(method = "applyPipelineState", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/opengl/GlStateManager;_polygonMode(II)V")) +// private void setPipelineAndApplyState$lineSmooth(RenderPipeline pipeline, CallbackInfo ci) { +// if (((IRenderPipeline) pipeline).meteor$getLineSmooth()) { +// glEnable(GL_LINE_SMOOTH); +// glLineWidth(1); +// } else { +// glDisable(GL_LINE_SMOOTH); +// } +// } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GlDeviceMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GlDeviceMixin.java index e9e7b9b11dd..af5ebd5d851 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GlDeviceMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GlDeviceMixin.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.blaze3d.opengl.GlDevice; -import com.mojang.blaze3d.systems.RenderPassBackend; +import com.mojang.renderpearl.backend.api.RenderPassBackend; +import com.mojang.renderpearl.backend.opengl.GlDevice; import meteordevelopment.meteorclient.mixininterface.IGpuDevice; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java index d478a2754f0..6611fdbe50d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java @@ -8,13 +8,9 @@ import com.llamalad7.mixinextras.injector.ModifyReceiver; import com.llamalad7.mixinextras.sugar.Local; import meteordevelopment.meteorclient.utils.tooltip.MeteorTooltipData; -import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.Identifier; import net.minecraft.world.inventory.tooltip.TooltipComponent; -import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -26,13 +22,27 @@ @Mixin(value = GuiGraphicsExtractor.class) public abstract class GuiGraphicsExtractorMixin { - @Inject(method = "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/resources/Identifier;)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V", shift = At.Shift.BEFORE)) - private void onDrawTooltip(Font font, List texts, Optional optionalImage, int xo, int yo, @Nullable Identifier style, CallbackInfo ci, @Local(name = "components") List components) { - if (optionalImage.isPresent() && optionalImage.get() instanceof MeteorTooltipData meteorTooltipData) + // Both overloads that take an Optional: the List one is the item path + // (setTooltipForNextFrame(Font, ItemStack, II)), the List one everything else. + @Inject( + method = { + "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/resources/Identifier;Z)V", + "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;IIZLnet/minecraft/resources/Identifier;)V" + }, + at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V", shift = At.Shift.BEFORE) + ) + private void onDrawTooltip(CallbackInfo ci, @Local(ordinal = 0) Optional data, @Local(name = "components") List components) { + if (data.isPresent() && data.get() instanceof MeteorTooltipData meteorTooltipData) components.add(meteorTooltipData.getComponent()); } - @ModifyReceiver(method = "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/resources/Identifier;)V", at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V")) + @ModifyReceiver( + method = { + "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;IILnet/minecraft/resources/Identifier;Z)V", + "setTooltipForNextFrame(Lnet/minecraft/client/gui/Font;Ljava/util/List;Ljava/util/Optional;Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;IIZLnet/minecraft/resources/Identifier;)V" + }, + at = @At(value = "INVOKE", target = "Ljava/util/Optional;ifPresent(Ljava/util/function/Consumer;)V") + ) private Optional onDrawTooltip_modifyIfPresentReceiver(Optional data, Consumer action) { if (data.isPresent() && data.get() instanceof MeteorTooltipData) return Optional.empty(); return data; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemInHandRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemInHandRendererMixin.java deleted file mode 100644 index 34f7d52ea68..00000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemInHandRendererMixin.java +++ /dev/null @@ -1,107 +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 com.llamalad7.mixinextras.injector.ModifyReturnValue; -import com.mojang.blaze3d.vertex.PoseStack; -import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.events.render.ArmRenderEvent; -import meteordevelopment.meteorclient.events.render.HeldItemRendererEvent; -import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.systems.modules.render.HandView; -import net.minecraft.client.player.AbstractClientPlayer; -import net.minecraft.client.renderer.ItemInHandRenderer; -import net.minecraft.client.renderer.SubmitNodeCollector; -import net.minecraft.tags.ItemTags; -import net.minecraft.world.InteractionHand; -import net.minecraft.world.entity.HumanoidArm; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; -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.ModifyArg; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.Objects; - -import static meteordevelopment.meteorclient.MeteorClient.mc; - -@Mixin(ItemInHandRenderer.class) -public abstract class ItemInHandRendererMixin { - @Shadow - private float mainHandHeight; - - @Shadow - private float offHandHeight; - - @Shadow - private ItemStack mainHandItem; - - @Shadow - private ItemStack offHandItem; - - @Shadow - protected abstract boolean shouldInstantlyReplaceVisibleItem(ItemStack currentlyVisibleItem, ItemStack expectedItem); - - @ModifyExpressionValue(method = "submitHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/player/LocalPlayer;I)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/LocalPlayer;getAttackAnim(F)F")) - private float modifySwing(float attackValue) { - HandView module = Modules.get().get(HandView.class); - InteractionHand hand = Objects.requireNonNullElse(mc.player.swingingArm, InteractionHand.MAIN_HAND); - - if (module.isActive()) { - if (module.swordSlash() && hand == InteractionHand.MAIN_HAND && mainHandItem.is(ItemTags.SWORDS)) { - return 0f; - } - if (hand == InteractionHand.OFF_HAND && !offHandItem.isEmpty()) { - return attackValue + module.offSwing.get().floatValue(); - } - if (hand == InteractionHand.MAIN_HAND && !mainHandItem.isEmpty()) { - return attackValue + module.mainSwing.get().floatValue(); - } - } - - return attackValue; - } - - @ModifyReturnValue(method = "shouldInstantlyReplaceVisibleItem", at = @At("RETURN")) - private boolean modifySkipSwapAnimation(boolean original) { - return original || Modules.get().get(HandView.class).skipSwapping(); - } - - @ModifyArg(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 2), index = 0) - private float modifyEquipProgressMainhand(float value) { - HandView handView = Modules.get().get(HandView.class); - if (handView.swordSlash() && mc.player.getMainHandItem().is(ItemTags.SWORDS)) return value; - - float f = mc.player.getItemSwapScale(1f); - float modified = handView.oldAnimations() ? 1 : f * f * f; - - return (shouldInstantlyReplaceVisibleItem(mainHandItem, mc.player.getMainHandItem()) ? modified : 0) - mainHandHeight; - } - - @ModifyArg(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;clamp(FFF)F", ordinal = 3), index = 0) - private float modifyEquipProgressOffhand(float value) { - return (shouldInstantlyReplaceVisibleItem(offHandItem, mc.player.getOffhandItem()) ? 1 : 0) - offHandHeight; - } - - @Inject(method = "submitArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderItem(Lnet/minecraft/world/entity/LivingEntity;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/item/ItemDisplayContext;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;I)V", shift = At.Shift.BEFORE)) - private void onRenderItem(AbstractClientPlayer player, float frameInterp, float xRot, InteractionHand hand, float attack, ItemStack itemStack, float inverseArmHeight, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, CallbackInfo ci) { - MeteorClient.EVENT_BUS.post(HeldItemRendererEvent.get(hand, poseStack)); - } - - @Inject(method = "submitArmWithItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderPlayerArm(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;IFFLnet/minecraft/world/entity/HumanoidArm;)V")) - private void onRenderArm(AbstractClientPlayer player, float frameInterp, float xRot, InteractionHand hand, float attack, ItemStack itemStack, float inverseArmHeight, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, CallbackInfo ci) { - MeteorClient.EVENT_BUS.post(ArmRenderEvent.get(hand, poseStack)); - } - - @Inject(method = "applyEatTransform", at = @At(value = "INVOKE", target = "Ljava/lang/Math;pow(DD)D", shift = At.Shift.BEFORE), cancellable = true) - private void cancelTransformations(PoseStack poseStack, float frameInterp, HumanoidArm arm, ItemStack itemStack, Player player, CallbackInfo ci) { - if (Modules.get().get(HandView.class).disableFoodAnimation()) ci.cancel(); - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ItemRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ItemRendererMixin.java index 543eaccef5f..908e701b1d7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ItemRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ItemRendererMixin.java @@ -15,7 +15,7 @@ @Mixin(ItemFeatureRenderer.class) public abstract class ItemRendererMixin { - @ModifyExpressionValue(method = "prepareFoilSubmit", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/feature/ItemFeatureRenderer$Submit;foilType()Lnet/minecraft/client/renderer/item/ItemStackRenderState$FoilType;")) + @ModifyExpressionValue(method = "prepareMainSubmit", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/feature/ItemFeatureRenderer$Submit;foilType()Lnet/minecraft/client/renderer/item/ItemStackRenderState$FoilType;")) private ItemStackRenderState.FoilType modifyEnchant(ItemStackRenderState.FoilType foilType) { if (Modules.get().get(NoRender.class).noEnchantGlint()) { return ItemStackRenderState.FoilType.NONE; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardHandlerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardHandlerMixin.java index 44631837e95..2bd5180779a 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardHandlerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/KeyboardHandlerMixin.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.mixin; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.meteor.CharTypedEvent; import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; @@ -17,7 +18,6 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.input.CharacterEvent; import net.minecraft.client.input.KeyEvent; -import com.mojang.blaze3d.platform.InputConstants; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -44,12 +44,12 @@ public void onKey(long handle, int action, KeyEvent event, CallbackInfo ci) { } if (minecraft.gui.screen() instanceof WidgetScreen widgetScreen && action == InputConstants.REPEAT) { - widgetScreen.keyRepeated(new KeyEvent(event.key(), event.scancode(), modifiers)); + widgetScreen.keyRepeated(new KeyEvent(event.key(), event.keycode(), modifiers)); } if (GuiKeyEvents.canUseKeys) { Input.setKeyState(event.key(), action != InputConstants.RELEASE); - if (MeteorClient.EVENT_BUS.post(KeyInputEvent.get(new KeyEvent(event.key(), event.scancode(), modifiers), KeyAction.get(action))).isCancelled()) + if (MeteorClient.EVENT_BUS.post(KeyInputEvent.get(new KeyEvent(event.key(), event.keycode(), modifiers), KeyAction.get(action))).isCancelled()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LevelExtractorMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LevelExtractorMixin.java index 380d5a7729f..1305c32de09 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LevelExtractorMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LevelExtractorMixin.java @@ -86,7 +86,7 @@ private void onSetLevel(ClientLevel level, CallbackInfo ci) { method = "isEntityVisible", at = @At( value = "INVOKE", - target = "Lnet/minecraft/client/renderer/LevelRenderer;isSectionCompiledAndVisible(Lnet/minecraft/core/BlockPos;)Z" + target = "Lnet/minecraft/client/renderer/LevelRenderer;isSectionCompiledAndVisible(Lnet/minecraft/core/BlockPos;J)Z" ) ) private boolean isEntityVisible$forceRender(boolean original) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java index ee2c6eb2389..2748587f6b5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java @@ -6,11 +6,13 @@ package meteordevelopment.meteorclient.mixin; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.resource.GraphicsResourceAllocator; import com.mojang.blaze3d.resource.ResourceHandle; +import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.commands.RenderPass; import it.unimi.dsi.fastutil.Stack; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; @@ -23,7 +25,6 @@ import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.render.postprocess.EntityShader; import meteordevelopment.meteorclient.utils.render.postprocess.PostProcessShaders; -import net.minecraft.client.DeltaTracker; import net.minecraft.client.renderer.LevelRenderer; import net.minecraft.client.renderer.LevelTargetBundle; import net.minecraft.client.renderer.RenderBuffers; @@ -33,18 +34,15 @@ import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.client.renderer.state.level.LevelRenderState; import net.minecraft.world.entity.Entity; -import org.joml.Matrix4fc; import org.joml.Vector4f; import org.objectweb.asm.Opcodes; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Mutable; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import java.util.Optional; +import java.util.OptionalDouble; import java.util.function.Function; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -78,7 +76,7 @@ private boolean modifyMobEffectBlocksSky(boolean original) { // Entity Shaders @Inject(method = "render", at = @At("HEAD")) - private void onRenderLevelHead(GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker, boolean renderOutline, CameraRenderState cameraState, Matrix4fc modelViewMatrix, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, CallbackInfo ci) { + private void onRenderLevelHead(GraphicsResourceAllocator resourceAllocator, boolean renderOutline, CameraRenderState cameraState, GpuBufferSlice terrainFog, Vector4f fogColor, boolean shouldRenderSky, boolean consistentDepthRequired, CallbackInfo ci) { PostProcessShaders.beginRender(); } @@ -129,8 +127,14 @@ private void draw(LevelRenderState worldState, PoseStack matrices, EntityShader meteor$pushEntityOutlineFramebuffer(shader.framebuffer); try { - try (var frame = renderDispatcher.prepareFrame(outlineRenderCommandQueue)) { - frame.executeOutline(); + // Mirrors LevelRenderer#executeOutline, but on our own pass: the vanilla method is gated on + // currentFrameRendersEntityOutline and other mods inject into it expecting the main pass + // targets to be live, which they are not during submitEntities. + try (var frame = renderDispatcher.prepareFrame(outlineRenderCommandQueue); + RenderPass pass = RenderSystem.getDevice().createCommandEncoder().createRenderPass( + () -> "Meteor entity shader", shader.framebuffer.getColorTextureView(), Optional.of(new Vector4f(0, 0, 0, 0)), null, OptionalDouble.empty())) { + RenderSystem.bindDefaultUniforms(pass); + frame.executeOutline(pass); } } finally { outlineRenderCommandQueue.submitsPerOrder.clear(); @@ -138,7 +142,7 @@ private void draw(LevelRenderState worldState, PoseStack matrices, EntityShader } } - @Inject(method = "lambda$addMainPass$0", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;executeOutline()V", shift = At.Shift.AFTER)) + @Inject(method = "lambda$addMainPass$0", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/LevelRenderer;executeOutline(Lnet/minecraft/client/renderer/feature/FeatureRenderDispatcher$PreparedFrame;)V", shift = At.Shift.AFTER)) private void addMainPass$submitEntityVertices(CallbackInfo ci) { PostProcessShaders.submitEntityVertices(); } @@ -165,6 +169,7 @@ private void onResize(int width, int height, CallbackInfo ci) { @Shadow @Final private RenderBuffers renderBuffers; + @Unique private Stack framebufferStack; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LightmapMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LightmapMixin.java index 5b379980967..8f934ac5417 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LightmapMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LightmapMixin.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.mixin; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.GpuTexture; +import com.mojang.renderpearl.api.textures.GpuTexture; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.Fullbright; import meteordevelopment.meteorclient.systems.modules.render.Xray; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LightningBoltRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LightningBoltRendererMixin.java index 7a1467ad56c..168927b3092 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LightningBoltRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LightningBoltRendererMixin.java @@ -22,16 +22,16 @@ public abstract class LightningBoltRendererMixin { * @author Walaryne */ @Inject(method = "quad", at = @At(value = "HEAD"), cancellable = true) - private static void onSetLightningVertex(Matrix4fc pose, VertexConsumer buffer, float xo0, float zo0, int h, float xo1, float zo1, float boltRed, float boltGreen, float boltBlue, float rr1, float rr2, boolean px1, boolean pz1, boolean px2, boolean pz2, CallbackInfo ci) { + private static void onSetLightningVertex(Matrix4fc pose, VertexConsumer buffer, float segmentStartX, float segmentStartZ, float segmentEndX, float segmentEndZ, int currentSegment, float topRadius, float bottomRadius, boolean rightXPositive, boolean rightZPositive, boolean leftXPositive, boolean leftZPositive, CallbackInfo ci) { Ambience ambience = Modules.get().get(Ambience.class); if (ambience.isActive() && ambience.changeLightningColor.get()) { Color color = ambience.lightningColor.get(); - buffer.addVertex(pose, xo0 + (px1 ? rr2 : -rr2), (float) (h * 16), zo0 + (pz1 ? rr2 : -rr2)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); - buffer.addVertex(pose, xo1 + (px1 ? rr1 : -rr1), (float) ((h + 1) * 16), zo1 + (pz1 ? rr1 : -rr1)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); - buffer.addVertex(pose, xo1 + (px2 ? rr1 : -rr1), (float) ((h + 1) * 16), zo1 + (pz2 ? rr1 : -rr1)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); - buffer.addVertex(pose, xo0 + (px2 ? rr2 : -rr2), (float) (h * 16), zo0 + (pz2 ? rr2 : -rr2)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); + buffer.addVertex(pose, segmentStartX + (rightXPositive ? bottomRadius : -bottomRadius), currentSegment * 16, segmentStartZ + (rightZPositive ? bottomRadius : -bottomRadius)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); + buffer.addVertex(pose, segmentEndX + (rightXPositive ? topRadius : -topRadius), (currentSegment + 1) * 16, segmentEndZ + (rightZPositive ? topRadius : -topRadius)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); + buffer.addVertex(pose, segmentEndX + (leftXPositive ? topRadius : -topRadius), (currentSegment + 1) * 16, segmentEndZ + (leftZPositive ? topRadius : -topRadius)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); + buffer.addVertex(pose, segmentStartX + (leftXPositive ? bottomRadius : -bottomRadius), currentSegment * 16, segmentStartZ + (leftZPositive ? bottomRadius : -bottomRadius)).setColor(color.r / 255f, color.g / 255f, color.b / 255f, 0.3F); ci.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityMixin.java index 43b2d20b1a1..d36e5e411e0 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityMixin.java @@ -8,6 +8,7 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import com.llamalad7.mixinextras.injector.ModifyReturnValue; import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.events.entity.DropItemsEvent; import meteordevelopment.meteorclient.events.entity.player.CanWalkOnFluidEvent; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.movement.HighJump; @@ -20,11 +21,13 @@ import meteordevelopment.meteorclient.systems.modules.render.NoRender; import net.minecraft.core.Holder; import net.minecraft.core.component.DataComponents; +import net.minecraft.util.Prediction; import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.material.FluidState; @@ -56,7 +59,7 @@ private void spawnItemParticles(ItemStack itemStack, int count, CallbackInfo ci) if (noRender.noEatParticles() && itemStack.getComponents().has(DataComponents.FOOD)) ci.cancel(); } - @ModifyVariable(method = "swing(Lnet/minecraft/world/InteractionHand;)V", at = @At("HEAD"), argsOnly = true, name = "hand") + @ModifyVariable(method = "swing", at = @At("HEAD"), argsOnly = true, name = "hand") private InteractionHand setHand(InteractionHand hand) { if ((Object) this != mc.player) return hand; @@ -69,13 +72,6 @@ private InteractionHand setHand(InteractionHand hand) { return hand; } - @ModifyExpressionValue(method = "getCurrentSwingDuration", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/component/SwingAnimation;duration()I")) - private int getHandSwingDuration(int original) { - if ((Object) this != mc.player) return original; - - return Modules.get().get(HandView.class).isActive() && mc.options.getCameraType().isFirstPerson() ? Modules.get().get(HandView.class).swingSpeed.get() : original; - } - @ModifyReturnValue(method = "isFallFlying", at = @At("RETURN")) private boolean isGlidingHook(boolean original) { if ((Object) this != mc.player) return original; @@ -138,4 +134,11 @@ private boolean modifyIsSprinting(boolean original) { // only add the extra velocity if you're actually moving, otherwise you'll jump in place and move forward return original && (Math.abs(mc.player.zza) > 1.0E-5F || Math.abs(mc.player.xxa) > 1.0E-5F); } + + @Inject(method = "drop", at = @At("HEAD"), cancellable = true) + private void onDropItem(ItemStack itemStack, boolean thrownFromHand, Prediction prediction, CallbackInfoReturnable cir) { + if (level().isClientSide() && !itemStack.isEmpty()) { + if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(itemStack)).isCancelled()) cir.setReturnValue(null); + } + } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java index 60a6236b70c..426f1997e92 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntityRendererMixin.java @@ -20,11 +20,10 @@ import net.minecraft.client.renderer.SubmitNodeCollector; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.rendertype.RenderTypes; import net.minecraft.client.renderer.state.level.CameraRenderState; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.UvMapping; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; @@ -66,13 +65,13 @@ private PlayerTeam hasLabelClientPlayerEntityGetScoreboardTeamProxy(PlayerTeam t // Chams - player color - @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/rendertype/RenderType;IIILnet/minecraft/client/renderer/texture/TextureAtlasSprite;ILnet/minecraft/client/renderer/feature/ModelFeatureRenderer$CrumblingOverlay;)V")) - private boolean render$render(SubmitNodeCollector instance, Model model, TState state, PoseStack matrixStack, RenderType renderLayer, int light, int overlay, int mixColor, TextureAtlasSprite sprite, int outlineColor, ModelFeatureRenderer.CrumblingOverlay crumblingOverlayCommand) { + @WrapWithCondition(method = "submit(Lnet/minecraft/client/renderer/entity/state/LivingEntityRenderState;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/SubmitNodeCollector;Lnet/minecraft/client/renderer/state/level/CameraRenderState;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/SubmitNodeCollector;submitModel(Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/rendertype/RenderType;IIILnet/minecraft/client/renderer/texture/UvMapping;I)V")) + private boolean render$render(SubmitNodeCollector instance, Model model, TState state, PoseStack poseStack, RenderType renderType, int lightCoords, int overlayCoords, int tintedColor, UvMapping uvMapping, int outlineColor) { if (!chams.isActive() || !chams.players.get() || !(((IEntityRenderState) state).meteor$getEntity() instanceof Player player)) return true; if (chams.ignoreSelf.get() && player == mc.player) return true; - instance.submitModel(model, state, matrixStack, renderLayer, light, overlay, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), sprite, outlineColor, null); + instance.submitModel(model, state, poseStack, renderType, lightCoords, overlayCoords, PlayerUtils.getPlayerColor(player, chams.playersColor.get()).getPacked(), uvMapping, outlineColor); return false; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntitySwingStateMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntitySwingStateMixin.java new file mode 100644 index 00000000000..755d24f0aad --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LivingEntitySwingStateMixin.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.mixin; + +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import meteordevelopment.meteorclient.systems.modules.Modules; +import meteordevelopment.meteorclient.systems.modules.render.HandView; +import net.minecraft.world.entity.LivingEntity; +import org.objectweb.asm.Opcodes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import static meteordevelopment.meteorclient.MeteorClient.mc; + +@Mixin(LivingEntity.SwingState.class) +public class LivingEntitySwingStateMixin { + @ModifyExpressionValue(method = "getAnimation", at = @At(value = "FIELD", target = "Lnet/minecraft/world/entity/LivingEntity$SwingState;animation:F", opcode = Opcodes.GETFIELD)) + private float getHandSwingDuration(float original) { + if ((Object) this != mc.player) return original; + + return Modules.get().get(HandView.class).isActive() && mc.options.getCameraType().isFirstPerson() ? Modules.get().get(HandView.class).swingSpeed.get().floatValue() : original; + } +} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java index 3ab6e67eeaf..cebbd842957 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java @@ -11,7 +11,6 @@ import com.llamalad7.mixinextras.sugar.Local; import com.mojang.authlib.GameProfile; import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.events.entity.DropItemsEvent; import meteordevelopment.meteorclient.events.entity.player.PlayerTickMovementEvent; import meteordevelopment.meteorclient.events.entity.player.SendMovementPacketsEvent; import meteordevelopment.meteorclient.systems.modules.Modules; @@ -19,6 +18,7 @@ import meteordevelopment.meteorclient.systems.modules.player.LiquidInteract; import meteordevelopment.meteorclient.systems.modules.player.NoMiningTrace; import meteordevelopment.meteorclient.systems.modules.player.Portals; +import meteordevelopment.meteorclient.systems.modules.render.NoRender; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.multiplayer.ClientLevel; @@ -28,6 +28,8 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.PlayerRideableJumping; import net.minecraft.world.entity.player.Input; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import org.objectweb.asm.Opcodes; @@ -47,12 +49,6 @@ public LocalPlayerMixin(ClientLevel world, GameProfile profile) { super(world, profile); } - @Inject(method = "drop", at = @At("HEAD"), cancellable = true) - private void onDrop(boolean all, CallbackInfoReturnable cir) { - if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(getMainHandItem())).isCancelled()) - cir.setReturnValue(false); - } - @ModifyExpressionValue(method = "handlePortalTransitionEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;screen()Lnet/minecraft/client/gui/screens/Screen;", ordinal = 0)) private Screen modifyPortalTransitionEffect(Screen original) { if (Modules.get().isActive(Portals.class)) return null; @@ -86,7 +82,7 @@ private void onMoveTowardsClosestSpace(double x, double z, CallbackInfo ci) { } } - @ModifyExpressionValue(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/ClientInput;keyPresses:Lnet/minecraft/world/entity/player/Input;", opcode = Opcodes.GETFIELD)) + @ModifyExpressionValue(method = "sendChanges", at = @At(value = "FIELD", target = "Lnet/minecraft/client/player/ClientInput;keyPresses:Lnet/minecraft/world/entity/player/Input;", opcode = Opcodes.GETFIELD)) private Input isSneaking(Input original) { if (Modules.get().get(Sneak.class).doPacket() || Modules.get().get(NoSlow.class).airStrict()) { return new Input( @@ -132,13 +128,20 @@ private static HitResult onUpdateTargetedEntity(HitResult original, @Local(name } @ModifyExpressionValue(method = "pick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;pick(DFZ)Lnet/minecraft/world/phys/HitResult;")) - private static HitResult modifyPick(HitResult original, @Local(argsOnly = true, name = "cameraEntity") Entity cameraEntity, @Local(argsOnly = true, name = "partialTicks") float partialTicks, @Local(name = "maxDistance") double maxDistance) { + private static HitResult modifyPick(HitResult original, final Entity cameraEntity, final double blockInteractionRange, final double entityInteractionRange, final float partialTicks, @Local(name = "maxDistance") double maxDistance) { if (!Modules.get().isActive(LiquidInteract.class)) return original; if (original.getType() != HitResult.Type.MISS) return original; return cameraEntity.pick(maxDistance, partialTicks, true); } + @Inject(method = "displayItemActivation", at = @At("HEAD"), cancellable = true) + private void onDisplayItemActivation(ItemStack itemStack, CallbackInfo ci) { + if (itemStack.getItem() == Items.TOTEM_OF_UNDYING && Modules.get().get(NoRender.class).noTotemAnimation()) { + ci.cancel(); + } + } + // Sprint @ModifyExpressionValue(method = "canStartSprinting", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/player/ClientInput;hasForwardImpulse()Z")) @@ -172,7 +175,7 @@ private void onSendPositionHead(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(SendMovementPacketsEvent.Pre.get()); } - @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 1)) + @Inject(method = "sendChanges", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 1)) private void onTickHasVehicleBeforeSendPackets(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(SendMovementPacketsEvent.Pre.get()); } @@ -182,7 +185,7 @@ private void onSendPositionTail(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(SendMovementPacketsEvent.Post.get()); } - @Inject(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 1, shift = At.Shift.AFTER)) + @Inject(method = "sendChanges", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/multiplayer/ClientPacketListener;send(Lnet/minecraft/network/protocol/Packet;)V", ordinal = 1, shift = At.Shift.AFTER)) private void onTickHasVehicleAfterSendPackets(CallbackInfo ci) { MeteorClient.EVENT_BUS.post(SendMovementPacketsEvent.Post.get()); } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftAccessor.java index 95a5a4b644e..09f062893f7 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftAccessor.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftAccessor.java @@ -6,12 +6,12 @@ package meteordevelopment.meteorclient.mixin; import com.mojang.authlib.minecraft.UserApiService; -import com.mojang.authlib.yggdrasil.ProfileResult; +import com.mojang.authlib.services.ProfileResult; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screens.social.PlayerSocialManager; import net.minecraft.client.ResourceLoadStateTracker; -import net.minecraft.client.multiplayer.ProfileKeyPairManager; import net.minecraft.client.User; +import net.minecraft.client.gui.screens.social.PlayerSocialManager; +import net.minecraft.client.multiplayer.ProfileKeyPairManager; import net.minecraft.client.multiplayer.chat.report.ReportingContext; import net.minecraft.client.resources.SkinManager; import net.minecraft.server.Services; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftMixin.java index bc52a0ca002..30ca66bafe6 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MinecraftMixin.java @@ -292,6 +292,8 @@ private void afterHandleInputEvents(CallbackInfo ci) { // Freecam @Inject(method = "pick", at = @At("HEAD"), cancellable = true) private void updateTargetedEntityInvoke(float partialTicks, CallbackInfo ci) { + if (Modules.get() == null) return; + Freecam freecam = Modules.get().get(Freecam.class); boolean highwayBuilder = Modules.get().isActive(HighwayBuilder.class); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ModelBlockRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ModelBlockRendererMixin.java index e0af487d2c2..01c3587fb1d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ModelBlockRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ModelBlockRendererMixin.java @@ -72,8 +72,10 @@ public abstract class ModelBlockRendererMixin { materialInfo.sprite(), ChunkSectionLayer.TRANSLUCENT, materialInfo.itemRenderType(), + materialInfo.itemGlintRenderType(), + materialInfo.itemGlintSpecialRenderType(), materialInfo.tintIndex(), - materialInfo.shade(), + materialInfo.shadeDirectionOverride(), materialInfo.lightEmission() ); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/MultiPlayerGameModeMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MultiPlayerGameModeMixin.java index 22c3566ce8e..c2014ac42d3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MultiPlayerGameModeMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MultiPlayerGameModeMixin.java @@ -56,6 +56,12 @@ public abstract class MultiPlayerGameModeMixin implements IMultiPlayerGameMode { @Shadow public abstract void startPrediction(ClientLevel level, PredictiveAction predictiveAction); + @Inject(method = "dropItem", at = @At("HEAD"), cancellable = true) + private void onDrop(LocalPlayer player, boolean all, CallbackInfo ci) { + if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(player.getMainHandItem())).isCancelled()) + ci.cancel(); + } + @Inject(method = "handleContainerInput", at = @At("HEAD"), cancellable = true) private void onHandleInventoryMouseClick(int containerId, int slotNum, int buttonNum, ContainerInput containerInput, Player player, CallbackInfo ci) { if (containerInput == ContainerInput.THROW && slotNum >= 0 && slotNum < player.containerMenu.slots.size()) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerMixin.java index bd239ef916d..8ac78b5cb0c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PlayerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PlayerMixin.java @@ -8,7 +8,6 @@ import com.llamalad7.mixinextras.injector.ModifyReturnValue; import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; import meteordevelopment.meteorclient.MeteorClient; -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.Flight; @@ -20,10 +19,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Abilities; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; @@ -53,13 +50,6 @@ protected void clipAtLedge(CallbackInfoReturnable cir) { if (event.isSet()) cir.setReturnValue(event.isClip()); } - @Inject(method = "drop", at = @At("HEAD"), cancellable = true) - private void onDropItem(ItemStack itemStack, boolean thrownFromHand, CallbackInfoReturnable cir) { - if (level().isClientSide() && !itemStack.isEmpty()) { - if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(itemStack)).isCancelled()) cir.setReturnValue(null); - } - } - @Inject(method = "isSpectator", at = @At("HEAD"), cancellable = true) private void onIsSpectator(CallbackInfoReturnable cir) { if (mc.getConnection() == null) cir.setReturnValue(false); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ProjectileUtilMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ProjectileUtilMixin.java index 41cf9b0c892..9f018acd1d4 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ProjectileUtilMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ProjectileUtilMixin.java @@ -18,7 +18,7 @@ @Mixin(ProjectileUtil.class) public abstract class ProjectileUtilMixin { @ModifyExpressionValue( - method = "getManyEntityHitResult(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;FLnet/minecraft/world/level/ClipContext$Block;Z)Ljava/util/Collection;", + method = "getManyEntityHitResult(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/Vec3;Lnet/minecraft/world/phys/AABB;Ljava/util/function/Predicate;FLnet/minecraft/world/level/ClipContext$Block;ZZ)Ljava/util/Collection;", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getBoundingBox()Lnet/minecraft/world/phys/AABB;") ) private static AABB modifyHitboxMargin(AABB original, @Local(name = "entity") Entity entity) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/RenderPipelineMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/RenderPipelineMixin.java index 577229067bd..cb5735401d9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/RenderPipelineMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/RenderPipelineMixin.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import meteordevelopment.meteorclient.mixininterface.IRenderPipeline; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenEffectRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenEffectRendererMixin.java index 13596ea5a3a..e5ad6c9f532 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenEffectRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenEffectRendererMixin.java @@ -8,10 +8,11 @@ import com.mojang.blaze3d.vertex.PoseStack; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.NoRender; -import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ScreenEffectRenderer; import net.minecraft.client.renderer.SubmitNodeCollector; +import net.minecraft.client.renderer.state.level.PlayerRenderState; import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.resources.Identifier; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -25,12 +26,12 @@ private static void onRenderFireOverlay(PoseStack poseStack, SubmitNodeCollector } @Inject(method = "submitWater", at = @At("HEAD"), cancellable = true) - private static void onRenderUnderwaterOverlay(Minecraft minecraft, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CallbackInfo ci) { + private static void onRenderUnderwaterOverlay(PlayerRenderState.WaterOverlay waterOverlay, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noLiquidOverlay()) ci.cancel(); } @Inject(method = "submitBlockSprite", at = @At("HEAD"), cancellable = true) - private static void render(TextureAtlasSprite sprite, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int color, CallbackInfo ci) { + private static void render(Identifier atlasLocation, float u0, float v0, float u1, float v1, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int color, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noInWallOverlay()) ci.cancel(); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java index bad493d0d5f..8af617f664e 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java @@ -5,6 +5,8 @@ package meteordevelopment.meteorclient.mixin; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.blaze3d.pipeline.PipelineCache; import meteordevelopment.meteorclient.renderer.MeteorRenderPipelines; import net.minecraft.client.renderer.ShaderManager; import org.spongepowered.asm.mixin.Mixin; @@ -14,8 +16,8 @@ @Mixin(ShaderManager.class) public abstract class ShaderManagerMixin { - @Inject(method = "apply(Lnet/minecraft/client/renderer/ShaderManager$Configs;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At("TAIL")) - private void meteor$reloadPipelines(CallbackInfo ci) { - MeteorRenderPipelines.precompile(); + @Inject(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ShaderManager$PostChainCache;close()V")) + private void meteor$reloadPipelines(CallbackInfo ci, @Local(ordinal = 0) PipelineCache pipelineCache) { + MeteorRenderPipelines.precompile(pipelineCache); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java index fea23d26c49..d59ad578379 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java @@ -7,12 +7,12 @@ import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import com.mojang.blaze3d.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.world.Ambience; import net.minecraft.client.Camera; import net.minecraft.client.multiplayer.ClientLevel; -import net.minecraft.client.renderer.DynamicUniforms; +import net.minecraft.client.renderer.DynamicGpuData; import net.minecraft.client.renderer.SkyRenderer; import net.minecraft.client.renderer.state.level.SkyRenderState; import net.minecraft.world.level.dimension.DimensionType; @@ -30,11 +30,11 @@ private void updateRenderState(ClientLevel level, float partialTicks, Camera cam if (!ambience.isActive()) return; if (ambience.endSky.get()) state.skybox = DimensionType.Skybox.END; - if (ambience.customSkyColor.get()) state.skyColor = ambience.skyColor().getPacked(); + if (ambience.customSkyColor.get()) state.skyColor = ambience.skyColor().getVec3f(); } - @WrapOperation(method = "renderEndSky", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/DynamicUniforms;writeTransform(Lorg/joml/Matrix4f;)Lcom/mojang/blaze3d/buffers/GpuBufferSlice;")) - private GpuBufferSlice modifyEndSkyColor(DynamicUniforms instance, Matrix4f modelView, Operation original) { + @WrapOperation(method = "renderEndSky", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/DynamicGpuData;writeTransform(Lorg/joml/Matrix4f;)Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;")) + private GpuBufferSlice modifyEndSkyColor(DynamicGpuData instance, Matrix4f modelView, Operation original) { Ambience ambience = Modules.get().get(Ambience.class); if (ambience.isActive() && ambience.endSky.get() && ambience.customSkyColor.get()) { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java index 6c7c08e809f..cd9c564b464 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/TitleScreenMixin.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.mixin; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.systems.config.Config; import meteordevelopment.meteorclient.utils.player.TitleScreenCredits; import net.minecraft.client.gui.GuiGraphicsExtractor; @@ -12,7 +13,6 @@ import net.minecraft.client.gui.screens.TitleScreen; import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.network.chat.Component; -import com.mojang.blaze3d.platform.InputConstants; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/VulkanDeviceMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/VulkanDeviceMixin.java index 8fb1ea0bc85..4453bdaa672 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/VulkanDeviceMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/VulkanDeviceMixin.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.mixin; -import com.mojang.blaze3d.systems.RenderPassBackend; -import com.mojang.blaze3d.vulkan.VulkanDevice; +import com.mojang.renderpearl.backend.api.RenderPassBackend; +import com.mojang.renderpearl.backend.vulkan.VulkanDevice; import meteordevelopment.meteorclient.mixininterface.IGpuDevice; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/sodium/MeshVertexConsumerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/sodium/MeshVertexConsumerMixin.java index e57513a46cc..f43ef6a0e5d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/sodium/MeshVertexConsumerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/sodium/MeshVertexConsumerMixin.java @@ -1,36 +1,37 @@ -/* - * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). - * Copyright (c) Meteor Development. - */ - -package meteordevelopment.meteorclient.mixin.sodium; - -import com.mojang.blaze3d.vertex.DefaultVertexFormat; -import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.blaze3d.vertex.VertexFormat; -import com.mojang.blaze3d.vertex.VertexFormatElement; -import meteordevelopment.meteorclient.utils.render.MeshBuilderVertexConsumerProvider; -import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter; -import org.lwjgl.system.MemoryStack; -import org.lwjgl.system.MemoryUtil; -import org.spongepowered.asm.mixin.Mixin; - -@Mixin(value = MeshBuilderVertexConsumerProvider.MeshBuilderVertexConsumer.class, remap = false) -public abstract class MeshVertexConsumerMixin implements VertexConsumer, VertexBufferWriter { - @Override - public void push(MemoryStack stack, long ptr, int count, VertexFormat format) { - VertexFormatElement positionElement = format.getElement(DefaultVertexFormat.POSITION_SEMANTIC_NAME); - if (positionElement == null) return; - int positionOffset = positionElement.offset(); - - for (int i = 0; i < count; i++) { - long positionPtr = ptr + (long) format.getVertexSize() * i + positionOffset; - - float x = MemoryUtil.memGetFloat(positionPtr); - float y = MemoryUtil.memGetFloat(positionPtr + 4); - float z = MemoryUtil.memGetFloat(positionPtr + 8); - - addVertex(x, y, z); - } - } -} +///* +// * This file is part of the Meteor Client distribution (https://github.com/MeteorDevelopment/meteor-client). +// * Copyright (c) Meteor Development. +// */ +// +//package meteordevelopment.meteorclient.mixin.sodium; +// fixme this class will probably work when sodium updates +// they are using VertexFormat from blaze3d while now it has been moved to renderpearl +//import com.mojang.blaze3d.vertex.DefaultVertexFormat; +//import com.mojang.blaze3d.vertex.VertexConsumer; +//import com.mojang.renderpearl.api.vertex.VertexFormat; +//import com.mojang.renderpearl.api.vertex.VertexFormatElement; +//import meteordevelopment.meteorclient.utils.render.MeshBuilderVertexConsumerProvider; +//import net.caffeinemc.mods.sodium.api.vertex.buffer.VertexBufferWriter; +//import org.lwjgl.system.MemoryStack; +//import org.lwjgl.system.MemoryUtil; +//import org.spongepowered.asm.mixin.Mixin; +// +//@Mixin(value = MeshBuilderVertexConsumerProvider.MeshBuilderVertexConsumer.class, remap = false) +//public abstract class MeshVertexConsumerMixin implements VertexConsumer, VertexBufferWriter { +// @Override +// public void push(MemoryStack stack, long ptr, int count, VertexFormat format) { +// VertexFormatElement positionElement = format.getElement(DefaultVertexFormat.POSITION_SEMANTIC_NAME); +// if (positionElement == null) return; +// int positionOffset = positionElement.offset(); +// +// for (int i = 0; i < count; i++) { +// long positionPtr = ptr + (long) format.getVertexSize() * i + positionOffset; +// +// float x = MemoryUtil.memGetFloat(positionPtr); +// float y = MemoryUtil.memGetFloat(positionPtr + 4); +// float z = MemoryUtil.memGetFloat(positionPtr + 8); +// +// addVertex(x, y, z); +// } +// } +//} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/viafabricplus/GeneralSettingsMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/viafabricplus/GeneralSettingsMixin.java deleted file mode 100644 index eaa997feab3..00000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/viafabricplus/GeneralSettingsMixin.java +++ /dev/null @@ -1,21 +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.viafabricplus; - -import com.llamalad7.mixinextras.injector.ModifyExpressionValue; -import com.viaversion.viafabricplus.settings.impl.GeneralSettings; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -@Mixin(GeneralSettings.class) -public abstract class GeneralSettingsMixin { - // specifies the '2' value on this line: - // public final ModeSetting multiplayerScreenButtonOrientation = new ModeSetting(this, Text.translatable("general_settings.viafabricplus.multiplayer_screen_button_orientation"), 2, ORIENTATION_OPTIONS); - @ModifyExpressionValue(method = "", at = @At(value = "CONSTANT", args = "intValue=2", ordinal = 1), remap = false) - private int modifyDefaultPosition(int original) { - return 4; - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/mixininterface/IGpuDevice.java b/src/main/java/meteordevelopment/meteorclient/mixininterface/IGpuDevice.java index cdb967a2756..32841474cdd 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixininterface/IGpuDevice.java +++ b/src/main/java/meteordevelopment/meteorclient/mixininterface/IGpuDevice.java @@ -5,7 +5,8 @@ package meteordevelopment.meteorclient.mixininterface; -import com.mojang.blaze3d.systems.RenderPassBackend; + +import com.mojang.renderpearl.backend.api.RenderPassBackend; public interface IGpuDevice { /** diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/ExtendedRenderPipelineBuilder.java b/src/main/java/meteordevelopment/meteorclient/renderer/ExtendedRenderPipelineBuilder.java index 86fa6d99624..493bb3ddba2 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/ExtendedRenderPipelineBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/ExtendedRenderPipelineBuilder.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import meteordevelopment.meteorclient.mixininterface.IRenderPipeline; import org.jspecify.annotations.NonNull; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/FixedUniformStorage.java b/src/main/java/meteordevelopment/meteorclient/renderer/FixedUniformStorage.java index 9c92355ca07..8b763dfa507 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/FixedUniformStorage.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/FixedUniformStorage.java @@ -5,11 +5,11 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.buffers.GpuBuffer; -import com.mojang.blaze3d.buffers.GpuBufferSlice; -import com.mojang.blaze3d.systems.GpuDevice; import com.mojang.blaze3d.systems.RenderSystem; -import net.minecraft.client.renderer.DynamicUniformStorage; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.device.GpuDevice; +import net.minecraft.client.renderer.DynamicGpuDataStorage; import net.minecraft.client.renderer.MappableRingBuffer; import net.minecraft.util.Mth; @@ -19,9 +19,9 @@ * UBO storage with a constant size. Exceeding this size causes an {@link IndexOutOfBoundsException} to be thrown. * * @author Crosby - * @see DynamicUniformStorage + * @see DynamicGpuDataStorage */ -public class FixedUniformStorage { +public class FixedUniformStorage { private final MappableRingBuffer buffer; private final int blockSize; private final int capacity; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/FullScreenRenderer.java b/src/main/java/meteordevelopment/meteorclient/renderer/FullScreenRenderer.java index d0f488b5f45..79a0a1291ee 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/FullScreenRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/FullScreenRenderer.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.PrimitiveTopology; -import com.mojang.blaze3d.buffers.GpuBuffer; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.pipeline.PrimitiveTopology; import meteordevelopment.meteorclient.utils.PreInit; public class FullScreenRenderer { diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshBuilder.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshBuilder.java index 8aa14bf874f..5a2d743794c 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshBuilder.java @@ -5,14 +5,14 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.IndexType; -import com.mojang.blaze3d.buffers.GpuBuffer; -import com.mojang.blaze3d.PrimitiveTopology; -import com.mojang.blaze3d.buffers.GpuBufferSlice; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.systems.CommandEncoder; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.commands.CommandEncoder; +import com.mojang.renderpearl.api.pipeline.IndexType; +import com.mojang.renderpearl.api.pipeline.PrimitiveTopology; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.vertex.VertexFormat; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.color.Color; import net.fabricmc.loader.api.FabricLoader; @@ -30,7 +30,6 @@ public class MeshBuilder { public double alpha = 1; - private final VertexFormat format; private final int primitiveVerticesSize; private final int primitiveIndicesCount; @@ -57,7 +56,6 @@ public MeshBuilder(RenderPipeline pipeline) { } public MeshBuilder(VertexFormat format, PrimitiveTopology drawMode) { - this.format = format; primitiveVerticesSize = format.getVertexSize(); primitiveIndicesCount = drawMode.primitiveLength; } diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java index cae0732a1f8..8707ad9fda2 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java @@ -5,16 +5,16 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.IndexType; -import com.mojang.blaze3d.buffers.GpuBufferSlice; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.pipeline.RenderTarget; -import com.mojang.blaze3d.systems.CommandEncoder; -import com.mojang.blaze3d.systems.RenderPass; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.GpuSampler; -import com.mojang.blaze3d.textures.GpuTextureView; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.commands.CommandEncoder; +import com.mojang.renderpearl.api.commands.RenderPass; +import com.mojang.renderpearl.api.pipeline.IndexType; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.textures.GpuSampler; +import com.mojang.renderpearl.api.textures.GpuTextureView; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.render.RenderUtils; @@ -145,10 +145,8 @@ public void end() { int indexCount = mesh != null ? mesh.getIndicesCount() : (int) (indexBuffer != null ? indexBuffer.length() / indexType.bytes : -1); - // todo hope this is alright @minegame take a look please (lossy conversion from long to int) if (indexCount > 0) { - if (Utils.rendering3D || matrix != null) { RenderSystem.getModelViewStack().pushMatrix(); } @@ -166,8 +164,10 @@ public void end() { : Optional.empty(); CommandEncoder encoder = RenderSystem.getDevice().createCommandEncoder(); + GpuBufferSlice vertexBuffer = mesh != null ? mesh.uploadVertexBuffer(encoder) : Objects.requireNonNull(this.vertexBuffer); GpuBufferSlice indexBuffer = mesh != null ? mesh.uploadIndexBuffer(encoder) : Objects.requireNonNull(this.indexBuffer); + int firstIndex = getFirstIndex(indexBuffer); GpuBufferSlice meshData = MeshUniforms.write(RenderUtils.projection, RenderSystem.getModelViewStack()); @@ -176,7 +176,7 @@ public void end() { encoder.createRenderPass(() -> "Meteor MeshRenderer", colorAttachment, clearColor, depthAttachment, OptionalDouble.empty()) : encoder.createRenderPass(() -> "Meteor MeshRenderer", colorAttachment, clearColor)) { - pass.setPipeline(pipeline); + pass.setPipeline(RenderSystem.getCompiledPipeline(pipeline)); pass.setUniform("MeshData", meshData); for (var entry : uniforms.entrySet()) { @@ -184,7 +184,7 @@ public void end() { } for (var entry : samplers.entrySet()) { - pass.bindTexture(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); + pass.setUniform(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); } pass.setVertexBuffer(0, vertexBuffer); diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java index 780583c6945..d105bc63541 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java @@ -5,10 +5,12 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.buffers.Std140Builder; import com.mojang.blaze3d.buffers.Std140SizeCalculator; -import net.minecraft.client.renderer.DynamicUniformStorage; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import net.minecraft.client.renderer.DynamicGpuDataStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; import org.joml.Matrix4f; import org.jspecify.annotations.NonNull; @@ -22,7 +24,7 @@ public class MeshUniforms { private static final Data DATA = new Data(); - private static final DynamicUniformStorage STORAGE = new DynamicUniformStorage<>("Meteor - Mesh UBO", SIZE, 16); + private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Mesh UBO", SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { STORAGE.endFrame(); @@ -32,10 +34,10 @@ public static GpuBufferSlice write(Matrix4f proj, Matrix4f modelView) { DATA.proj = proj; DATA.modelView = modelView; - return STORAGE.writeUniform(DATA); + return STORAGE.writeData(DATA); } - private static final class Data implements DynamicUniformStorage.DynamicUniform { + private static final class Data implements DynamicGpuDataStorage.DynamicGpuData { private Matrix4f proj; private Matrix4f modelView; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java index 639a8dd5c11..9fc2935d31c 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java @@ -5,26 +5,26 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.pipeline.BindGroupLayout; -import com.mojang.blaze3d.pipeline.BlendFunction; -import com.mojang.blaze3d.PrimitiveTopology; -import com.mojang.blaze3d.pipeline.ColorTargetState; -import com.mojang.blaze3d.pipeline.DepthStencilState; -import com.mojang.blaze3d.pipeline.RenderPipeline; -import com.mojang.blaze3d.platform.CompareOp; -import com.mojang.blaze3d.shaders.UniformType; -import com.mojang.blaze3d.systems.GpuDevice; +import com.mojang.blaze3d.pipeline.PipelineCache; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.renderpearl.api.device.GpuDevice; +import com.mojang.renderpearl.api.pipeline.*; import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ShaderManager; +import net.minecraft.resources.Identifier; import net.minecraft.server.packs.resources.ResourceManager; import org.apache.commons.io.IOUtils; +import org.jspecify.annotations.Nullable; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; public abstract class MeteorRenderPipelines { private static final List PIPELINES = new ArrayList<>(); @@ -44,8 +44,8 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/world_colored")) .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -56,8 +56,8 @@ public abstract class MeteorRenderPipelines { .withLineSmooth() .withLocation(MeteorClient.identifier("pipeline/world_colored_lines")) .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -67,8 +67,8 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED_DEPTH = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/world_colored_depth")) .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(DepthStencilState.DEFAULT.depthTest(), false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -79,8 +79,8 @@ public abstract class MeteorRenderPipelines { .withLineSmooth() .withLocation(MeteorClient.identifier("pipeline/world_colored_lines_depth")) .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(DepthStencilState.DEFAULT.depthTest(), false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -92,8 +92,9 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline UI_COLORED = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/ui_colored")) .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) + .withShaderDefine("UI") .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -103,8 +104,9 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline UI_COLORED_LINES = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/ui_colored_lines")) .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) - .withVertexShader(MeteorClient.identifier("shaders/pos_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_color.frag")) + .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) + .withShaderDefine("UI") .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -114,9 +116,11 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline UI_TEXTURED = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/ui_textured")) .withVertexBinding(0, MeteorVertexFormats.POS2_TEXTURE_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/pos_tex_color.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/pos_tex_color.frag")) - .withBindGroupLayout(BindGroupLayout.builder().withSampler("u_Texture").build()) + .withVertexShader(MeteorClient.identifier("shaders/pos_tex_color.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/pos_tex_color.fsh")) + .withBindGroupLayout(BindGroupLayout.builder() + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) + .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -126,9 +130,11 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline UI_TEXT = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/ui_text")) .withVertexBinding(0, MeteorVertexFormats.POS2_TEXTURE_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/text.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/text.frag")) - .withBindGroupLayout(BindGroupLayout.builder().withSampler("u_Texture").build()) + .withVertexShader(MeteorClient.identifier("shaders/text.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/text.fsh")) + .withBindGroupLayout(BindGroupLayout.builder() + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) + .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -140,10 +146,10 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline POST_OUTLINE = add(new ExtendedRenderPipelineBuilder() .withLocation(MeteorClient.identifier("pipeline/post/outline")) .withVertexBinding(0, MeteorVertexFormats.POS2).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/post-process/outline.frag")) + .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/post-process/outline.fsh")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) .withUniform("PostData", UniformType.UNIFORM_BUFFER) .withUniform("OutlineData", UniformType.UNIFORM_BUFFER) .build()) @@ -156,11 +162,11 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline POST_IMAGE = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/post/image")) .withVertexBinding(0, MeteorVertexFormats.POS2).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/post-process/image.frag")) + .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/post-process/image.fsh")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") - .withSampler("u_TextureI") + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) + .withUniform("u_TextureI", UniformType.COMBINED_IMAGE_SAMPLER) .withUniform("PostData", UniformType.UNIFORM_BUFFER) .withUniform("ImageData", UniformType.UNIFORM_BUFFER) .build()) @@ -175,10 +181,10 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline BLUR_DOWN = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/blur/down")) .withVertexBinding(0, MeteorVertexFormats.POS2).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/blur.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/blur_down.frag")) + .withVertexShader(MeteorClient.identifier("shaders/blur.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/blur_down.fsh")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) .withUniform("BlurData", UniformType.UNIFORM_BUFFER) .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -190,10 +196,10 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline BLUR_UP = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/blur/up")) .withVertexBinding(0, MeteorVertexFormats.POS2).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/blur.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/blur_up.frag")) + .withVertexShader(MeteorClient.identifier("shaders/blur.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/blur_up.fsh")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + .withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER) .withUniform("BlurData", UniformType.UNIFORM_BUFFER) .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -205,9 +211,9 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline BLUR_PASSTHROUGH = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/blur/up")) .withVertexBinding(0, MeteorVertexFormats.POS2).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) - .withVertexShader(MeteorClient.identifier("shaders/passthrough.vert")) - .withFragmentShader(MeteorClient.identifier("shaders/passthrough.frag")) - .withBindGroupLayout(BindGroupLayout.builder().withSampler("u_Texture").build()) + .withVertexShader(MeteorClient.identifier("shaders/passthrough.vsh")) + .withFragmentShader(MeteorClient.identifier("shaders/passthrough.fsh")) + .withBindGroupLayout(BindGroupLayout.builder().withUniform("u_Texture", UniformType.COMBINED_IMAGE_SAMPLER).build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -219,20 +225,38 @@ private static RenderPipeline add(RenderPipeline pipeline) { return pipeline; } - public static void precompile() { + public static void precompile(PipelineCache cache) { GpuDevice device = RenderSystem.getDevice(); ResourceManager resources = Minecraft.getInstance().getResourceManager(); - - for (RenderPipeline pipeline : PIPELINES) { - device.precompilePipeline(pipeline, (identifier, _) -> { - var resource = resources.getResource(identifier).get(); + final Map includes = ShaderManager.listAllIncludes(resources); + ShaderSource shaderSource = new ShaderSource() { + @Override + public @Nullable String getShader(Identifier id, ShaderType type) { + var resource = resources.getResource(id).get(); try (var in = resource.open()) { return IOUtils.toString(in, StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } - }); + } + + @Override + public @Nullable CachedIncludeSource getInclude(Identifier id) { + return includes.get(id); + } + + @Override + public void close() { + includes.values().forEach(ShaderSource.CachedIncludeSource::close); + } + }; + + for (RenderPipeline pipeline : PIPELINES) { + CompletableFuture pendingPipeline = device.compilePipeline(pipeline, shaderSource, MeteorExecutor.executor); + + CompiledRenderPipeline compiled = pendingPipeline.join().finishCompile(); + cache.insert(pipeline, compiled); } } diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java index b1865d2d73f..48f7f91503f 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java @@ -5,8 +5,9 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.GpuFormat; -import com.mojang.blaze3d.vertex.VertexFormat; + +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.vertex.VertexFormat; public abstract class MeteorVertexFormats { // Step rate = 0 means per-vertex (not instanced) diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/Renderer2D.java b/src/main/java/meteordevelopment/meteorclient/renderer/Renderer2D.java index ae11cd29e06..1889aa9ab22 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/Renderer2D.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/Renderer2D.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.textures.GpuSampler; -import com.mojang.blaze3d.textures.GpuTextureView; +import com.mojang.renderpearl.api.textures.GpuSampler; +import com.mojang.renderpearl.api.textures.GpuTextureView; import meteordevelopment.meteorclient.gui.renderer.packer.TextureRegion; import meteordevelopment.meteorclient.utils.PreInit; import meteordevelopment.meteorclient.utils.render.color.Color; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/Renderer3D.java b/src/main/java/meteordevelopment/meteorclient/renderer/Renderer3D.java index 2cf69e3ec9c..0ff77befc48 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/Renderer3D.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/Renderer3D.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.meteorclient.utils.world.Dir; import net.minecraft.client.Minecraft; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/Texture.java b/src/main/java/meteordevelopment/meteorclient/renderer/Texture.java index a8a0326e658..42a193e31d1 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/Texture.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/Texture.java @@ -5,12 +5,12 @@ package meteordevelopment.meteorclient.renderer; -import com.mojang.blaze3d.GpuFormat; import com.mojang.blaze3d.platform.NativeImage; import com.mojang.blaze3d.platform.TextureUtil; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.AddressMode; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.textures.AddressMode; +import com.mojang.renderpearl.api.textures.FilterMode; import net.minecraft.client.renderer.texture.AbstractTexture; import org.jspecify.annotations.NonNull; import org.lwjgl.BufferUtils; diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/text/Font.java b/src/main/java/meteordevelopment/meteorclient/renderer/text/Font.java index dc13364ee4e..7697eea072a 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/text/Font.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/text/Font.java @@ -5,8 +5,8 @@ package meteordevelopment.meteorclient.renderer.text; -import com.mojang.blaze3d.GpuFormat; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.textures.FilterMode; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import meteordevelopment.meteorclient.renderer.MeshBuilder; import meteordevelopment.meteorclient.renderer.Texture; diff --git a/src/main/java/meteordevelopment/meteorclient/settings/FileSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/FileSetting.java index 8ac9478ad6b..c750c9c400c 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/FileSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/FileSetting.java @@ -6,17 +6,16 @@ package meteordevelopment.meteorclient.settings; import net.minecraft.nbt.CompoundTag; -import org.lwjgl.BufferUtils; -import org.lwjgl.PointerBuffer; -import org.lwjgl.system.MemoryUtil; +import org.lwjgl.sdl.SDL_DialogFileFilter; +import org.lwjgl.system.MemoryStack; import java.io.File; import java.util.function.Consumer; public class FileSetting extends Setting { - public final PointerBuffer filters; + public final SDL_DialogFileFilter.Buffer filters; - public FileSetting(String name, String description, File defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, PointerBuffer filters) { + public FileSetting(String name, String description, File defaultValue, Consumer onChanged, Consumer> onModuleActivated, IVisible visible, SDL_DialogFileFilter.Buffer filters) { super(name, description, defaultValue, onChanged, onModuleActivated, visible); this.filters = filters; @@ -52,21 +51,23 @@ protected File load(CompoundTag tag) { } public static class Builder extends SettingBuilder { - private PointerBuffer filter; + private SDL_DialogFileFilter.Buffer filter; public Builder() { super(null); } - public FileSetting.Builder filter(PointerBuffer filter) { + public FileSetting.Builder filter(SDL_DialogFileFilter.Buffer filter) { this.filter = filter; return this; } public FileSetting.Builder filter(String... filters) { - this.filter = BufferUtils.createPointerBuffer(filters.length); - for (String filter : filters) this.filter.put(MemoryUtil.memASCII(filter)); - this.filter.flip(); + MemoryStack stack = MemoryStack.stackPush(); + filter = SDL_DialogFileFilter.malloc(filters.length, stack); + for (int i = 0; i < filters.length; i++) { + filter.get(i).name(stack.UTF8("Filter " + i)).pattern(stack.UTF8(filters[i])); + } return this; } diff --git a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java index 4488218100d..dfa3057a8bb 100644 --- a/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java +++ b/src/main/java/meteordevelopment/meteorclient/settings/KeybindSetting.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.settings; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; @@ -14,7 +15,6 @@ import meteordevelopment.orbit.EventHandler; import meteordevelopment.orbit.EventPriority; import net.minecraft.nbt.CompoundTag; -import com.mojang.blaze3d.platform.InputConstants; import java.util.function.Consumer; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java index c6ae60c569d..9cb3136412b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/Account.java @@ -6,9 +6,9 @@ package meteordevelopment.meteorclient.systems.accounts; import com.mojang.authlib.minecraft.UserApiService; -import com.mojang.authlib.yggdrasil.FriendsService; -import com.mojang.authlib.yggdrasil.ServicesKeyType; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.services.FriendsService; +import com.mojang.authlib.services.MinecraftServicesDiscoveryService; +import com.mojang.authlib.services.ServicesKeyType; import meteordevelopment.meteorclient.mixin.FileCacheAccessor; import meteordevelopment.meteorclient.mixin.MinecraftAccessor; import meteordevelopment.meteorclient.mixin.SkinManagerAccessor; @@ -47,7 +47,7 @@ protected Account(AccountType type, String name) { public abstract boolean fetchInfo(); public boolean login() { - YggdrasilAuthenticationService authenticationService = new YggdrasilAuthenticationService(mc.getProxy()); + MinecraftServicesDiscoveryService authenticationService = MinecraftServicesDiscoveryService.create(mc.getProxy()); applyLoginEnvironment(authenticationService); return true; @@ -70,7 +70,7 @@ public static void setSession(User session) { MinecraftAccessor mca = (MinecraftAccessor) mc; mca.meteor$setUser(session); - YggdrasilAuthenticationService yggdrasilAuthenticationService = new YggdrasilAuthenticationService(mc.getProxy()); + MinecraftServicesDiscoveryService yggdrasilAuthenticationService = MinecraftServicesDiscoveryService.create(mc.getProxy()); UserApiService apiService = yggdrasilAuthenticationService.createUserApiService(session.getAccessToken()); FriendsService friendsService = yggdrasilAuthenticationService.createFriendsService(session.getAccessToken()); @@ -82,7 +82,7 @@ public static void setSession(User session) { mca.meteor$setProfileFuture(CompletableFuture.supplyAsync(() -> mc.services().sessionService().fetchProfile(mc.getUser().getProfileId(), true), Util.ioPool())); } - public static void applyLoginEnvironment(YggdrasilAuthenticationService authService) { + public static void applyLoginEnvironment(MinecraftServicesDiscoveryService authService) { MinecraftAccessor mca = (MinecraftAccessor) mc; SignatureValidator.from(authService.getServicesKeySet(), ServicesKeyType.PROFILE_KEY); SkinManager.TextureCache skinCache = ((SkinManagerAccessor) mc.getSkinManager()).meteor$getSkinTextures(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/accounts/MicrosoftLogin.java b/src/main/java/meteordevelopment/meteorclient/systems/accounts/MicrosoftLogin.java index e32fe1e561b..3e5254e09eb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/MicrosoftLogin.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/MicrosoftLogin.java @@ -5,9 +5,9 @@ package meteordevelopment.meteorclient.systems.accounts; +import com.mojang.blaze3d.Blaze3D; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; -import net.minecraft.util.Util; import net.raphimc.minecraftauth.MinecraftAuth; import net.raphimc.minecraftauth.java.JavaAuthManager; import net.raphimc.minecraftauth.java.model.MinecraftProfile; @@ -19,6 +19,7 @@ import net.raphimc.minecraftauth.msa.service.impl.DeviceCodeMsaAuthService; import org.jspecify.annotations.Nullable; +import java.net.URI; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -54,7 +55,7 @@ public static String getRefreshToken(Consumer callback) { .login(DeviceCodeMsaAuthService::new, (Consumer) deviceCode -> { String urlString = deviceCode.getDirectVerificationUri(); urlFuture.complete(urlString); - Util.getPlatform().openUri(urlString); + Blaze3D.openUri(URI.create(urlString)); }); MsaToken msaToken = authManager.getMsaToken().getUpToDate(); 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 85a0986d95e..23d60e33a41 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/accounts/types/TheAlteningAccount.java @@ -6,7 +6,7 @@ package meteordevelopment.meteorclient.systems.accounts.types; import com.mojang.authlib.Environment; -import com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService; +import com.mojang.authlib.services.MinecraftServicesDiscoveryService; import com.mojang.util.UndashedUuid; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.systems.accounts.Account; @@ -23,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", "https://api.mojang.com", "The Altening"); - private static final YggdrasilAuthenticationService SERVICE = new YggdrasilAuthenticationService(mc.getProxy(), ENVIRONMENT); + private static final Environment ENVIRONMENT = new Environment("thealtening.com", "The Altening"); // todo figure this out + private static final MinecraftServicesDiscoveryService SERVICE = MinecraftServicesDiscoveryService.create(mc.getProxy(), true, ENVIRONMENT); private String token; private String accessToken; @@ -69,7 +69,7 @@ public boolean login() { } private AuthResponse authenticate() { - return Http.post(ENVIRONMENT.servicesHost() + "/authenticate") + return Http.post(ENVIRONMENT.discoveryUrl() + "/authenticate") // todo i will eat my sock if this actually works .bodyJson(new AuthRequest("MINECRAFT", token, "Meteor on Crack!", UUID.randomUUID().toString(), true)) .sendJson(AuthResponse.class); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CombatHud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CombatHud.java index 17672515be9..995a3b2bd1f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CombatHud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/CombatHud.java @@ -33,7 +33,6 @@ import net.minecraft.util.Mth; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BedItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.item.enchantment.Enchantment; @@ -327,7 +326,7 @@ public void render(HudRenderer renderer) { if (itemStack.is(ItemTags.SWORDS) || itemStack.getItem() == Items.END_CRYSTAL || itemStack.getItem() == Items.RESPAWN_ANCHOR - || itemStack.getItem() instanceof BedItem) threat = true; + || itemStack.is(ItemTags.BEDS)) threat = true; } if (threat) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/keyboard/KeyboardHud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/keyboard/KeyboardHud.java index 700fad465ab..e4ca5ad2b45 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/keyboard/KeyboardHud.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/keyboard/KeyboardHud.java @@ -26,6 +26,7 @@ import meteordevelopment.meteorclient.systems.hud.HudElementInfo; import meteordevelopment.meteorclient.systems.hud.HudRenderer; import meteordevelopment.meteorclient.utils.misc.Keybind; +import meteordevelopment.meteorclient.utils.misc.input.Input; import meteordevelopment.meteorclient.utils.misc.input.KeyAction; import meteordevelopment.meteorclient.utils.misc.input.KeyBinds; import meteordevelopment.meteorclient.utils.render.color.Color; @@ -38,13 +39,14 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.util.Mth; -import org.lwjgl.glfw.GLFW; +import org.lwjgl.sdl.SDLScancode; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Locale; +import static com.mojang.blaze3d.platform.InputConstants.*; import static meteordevelopment.meteorclient.MeteorClient.mc; public class KeyboardHud extends HudElement { @@ -260,7 +262,7 @@ private Color getKeyColor(Key key, SettingColor out) { @EventHandler(priority = EventPriority.HIGH) private void onKey(KeyInputEvent event) { for (Key key : keys) { - if (key.matches(event.input.key(), event.input.scancode(), true)) { + if (key.matches(event.input.key(), event.input.keycode(), true)) { key.update(event.action); } } @@ -277,15 +279,11 @@ private void onMouseClick(MouseClickEvent event) { public KeyboardHud() { super(INFO); - if (mc.options != null) - onPresetChanged(preset.get()); + onPresetChanged(preset.get()); MeteorClient.EVENT_BUS.subscribe(this); } private void onPresetChanged(Preset preset) { - if (mc.options == null) - return; - keys.clear(); double u = 35; // base key unit size double g = spacing.get() * 2; // gap between keys (spacing setting) @@ -332,117 +330,117 @@ private void buildAnsiLayout(LayoutContext l) { double row0 = l.uy(0), row1 = l.uy(1), row2 = l.uy(2), row3 = l.uy(3), row4 = l.uy(4), row5 = l.uy(5); // Row 0: ESC, F1-F12, Print/Scroll/Pause - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_ESCAPE), 0, row0)); + keys.add(l.key(Keybind.fromKey(KEY_ESCAPE), 0, row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F1 + i), l.ux(2d + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F1 + i), l.ux(2d + i), row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F5 + i), l.ux(6.5 + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F5 + i), l.ux(6.5 + i), row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F9 + i), l.ux(11d + i), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PRINTSCREEN), l.ux(15.5), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_SCROLLLOCK), l.ux(16.5), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAUSE), l.ux(17.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F9 + i), l.ux(11d + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_PRINTSCREEN), l.ux(15.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_SCROLLLOCK), l.ux(16.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_PAUSE), l.ux(17.5), row0)); // Row 1: ` 1-0 - = BS, Ins/Home/PgUp - int[] row1Keys = {InputConstants.KEY_GRAVE, InputConstants.KEY_1, InputConstants.KEY_2, InputConstants.KEY_3, InputConstants.KEY_4, InputConstants.KEY_5, InputConstants.KEY_6, InputConstants.KEY_7, InputConstants.KEY_8, InputConstants.KEY_9, InputConstants.KEY_0, InputConstants.KEY_MINUS, InputConstants.KEY_EQUALS}; + int[] row1Keys = {KEY_GRAVE, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINUS, KEY_EQUALS}; for (int i = 0; i < row1Keys.length; i++) keys.add(l.key(Keybind.fromKey(row1Keys[i]), l.ux(i), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_INSERT), l.ux(15.5), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_HOME), l.ux(16.5), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAGEUP), l.ux(17.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); + keys.add(l.key(Keybind.fromKey(KEY_INSERT), l.ux(15.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_HOME), l.ux(16.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_PAGEUP), l.ux(17.5), row1)); // Row 2: Tab QWERTY..., Del/End/PgDn - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_TAB), 0, row2, KeyDimensions.TAB)); - int[] row2Keys = {InputConstants.KEY_Q, InputConstants.KEY_W, InputConstants.KEY_E, InputConstants.KEY_R, InputConstants.KEY_T, InputConstants.KEY_Y, InputConstants.KEY_U, InputConstants.KEY_I, InputConstants.KEY_O, InputConstants.KEY_P, InputConstants.KEY_LBRACKET, InputConstants.KEY_RBRACKET}; + keys.add(l.key(Keybind.fromKey(KEY_TAB), 0, row2, KeyDimensions.TAB)); + int[] row2Keys = {KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRACKET, KEY_RBRACKET}; double tabEnd = l.px(KeyDimensions.TAB) + l.keyGap; for (int i = 0; i < row2Keys.length; i++) keys.add(l.key(Keybind.fromKey(row2Keys[i]), tabEnd + l.ux(i), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_BACKSLASH), tabEnd + l.ux(12), row2, KeyDimensions.TAB)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_DELETE), l.ux(15.5), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_END), l.ux(16.5), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAGEDOWN), l.ux(17.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_BACKSLASH), tabEnd + l.ux(12), row2, KeyDimensions.TAB)); + keys.add(l.key(Keybind.fromKey(KEY_DELETE), l.ux(15.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_END), l.ux(16.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_PAGEDOWN), l.ux(17.5), row2)); // Row 3: Caps ASDF..., Enter - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_CAPSLOCK), 0, row3, KeyDimensions.CAPS_LOCK)); - int[] row3Keys = {InputConstants.KEY_A, InputConstants.KEY_S, InputConstants.KEY_D, InputConstants.KEY_F, InputConstants.KEY_G, InputConstants.KEY_H, InputConstants.KEY_J, InputConstants.KEY_K, InputConstants.KEY_L, InputConstants.KEY_SEMICOLON, InputConstants.KEY_APOSTROPHE}; + keys.add(l.key(Keybind.fromKey(KEY_CAPSLOCK), 0, row3, KeyDimensions.CAPS_LOCK)); + int[] row3Keys = {KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, KEY_APOSTROPHE}; double capsEnd = l.px(KeyDimensions.CAPS_LOCK) + l.keyGap; for (int i = 0; i < row3Keys.length; i++) keys.add(l.key(Keybind.fromKey(row3Keys[i]), capsEnd + l.ux(i), row3)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RETURN), capsEnd + l.ux(11), row3, KeyDimensions.ENTER_ANSI)); + keys.add(l.key(Keybind.fromKey(KEY_RETURN), capsEnd + l.ux(11), row3, KeyDimensions.ENTER_ANSI)); // Row 4: LShift ZXCV..., RShift, Up - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LSHIFT), 0, row4, KeyDimensions.LEFT_SHIFT_ANSI)); - int[] row4Keys = {InputConstants.KEY_Z, InputConstants.KEY_X, InputConstants.KEY_C, InputConstants.KEY_V, InputConstants.KEY_B, InputConstants.KEY_N, InputConstants.KEY_M, InputConstants.KEY_COMMA, InputConstants.KEY_PERIOD, InputConstants.KEY_SLASH}; + keys.add(l.key(Keybind.fromKey(KEY_LSHIFT), 0, row4, KeyDimensions.LEFT_SHIFT_ANSI)); + int[] row4Keys = {KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_PERIOD, KEY_SLASH}; double lShiftEnd = l.px(KeyDimensions.LEFT_SHIFT_ANSI) + l.keyGap; for (int i = 0; i < row4Keys.length; i++) keys.add(l.key(Keybind.fromKey(row4Keys[i]), lShiftEnd + l.ux(i), row4)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RSHIFT), lShiftEnd + l.ux(10), row4, KeyDimensions.RIGHT_SHIFT)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_UP), l.ux(16.5), row4)); + keys.add(l.key(Keybind.fromKey(KEY_RSHIFT), lShiftEnd + l.ux(10), row4, KeyDimensions.RIGHT_SHIFT)); + keys.add(l.key(Keybind.fromKey(KEY_UP), l.ux(16.5), row4)); // Row 5: Ctrl/Win/Alt/Space/Alt/Win/Menu/Ctrl, Arrows double xPos = 0; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LCONTROL), xPos, row5, KeyDimensions.CTRL)); + keys.add(l.key(Keybind.fromKey(KEY_LCONTROL), xPos, row5, KeyDimensions.CTRL)); xPos += l.px(KeyDimensions.CTRL) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LSUPER), xPos, row5, KeyDimensions.GUI)); + keys.add(l.key(Keybind.fromKey(KEY_LGUI), xPos, row5, KeyDimensions.GUI)); xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LALT), xPos, row5, KeyDimensions.ALT)); + keys.add(l.key(Keybind.fromKey(KEY_LALT), xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_SPACE), xPos, row5, KeyDimensions.SPACEBAR)); + keys.add(l.key(Keybind.fromKey(KEY_SPACE), xPos, row5, KeyDimensions.SPACEBAR)); xPos += l.px(KeyDimensions.SPACEBAR) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RALT), xPos, row5, KeyDimensions.ALT)); + keys.add(l.key(Keybind.fromKey(KEY_RALT), xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RSUPER), xPos, row5, KeyDimensions.GUI)); + keys.add(l.key(Keybind.fromKey(KEY_RGUI), xPos, row5, KeyDimensions.GUI)); xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_MENU), xPos, row5, KeyDimensions.MENU)); + keys.add(l.key(Keybind.fromKey(SDLScancode.SDL_SCANCODE_APPLICATION), xPos, row5, KeyDimensions.MENU)); xPos += l.px(KeyDimensions.MENU) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RCONTROL), xPos, row5, KeyDimensions.CTRL)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LEFT), l.ux(15.5), row5)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_DOWN), l.ux(16.5), row5)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RIGHT), l.ux(17.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_RCONTROL), xPos, row5, KeyDimensions.CTRL)); + keys.add(l.key(Keybind.fromKey(KEY_LEFT), l.ux(15.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_DOWN), l.ux(16.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_RIGHT), l.ux(17.5), row5)); } private void buildIsoLayout(LayoutContext l) { double row0 = l.uy(0), row1 = l.uy(1), row2 = l.uy(2), row3 = l.uy(3), row4 = l.uy(4), row5 = l.uy(5); // Row 0: ESC, F1-F12, Print/Scroll/Pause - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_ESCAPE), 0, row0)); + keys.add(l.key(Keybind.fromKey(KEY_ESCAPE), 0, row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F1 + i), l.ux(2d + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F1 + i), l.ux(2d + i), row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F5 + i), l.ux(6.5 + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F5 + i), l.ux(6.5 + i), row0)); for (int i = 0; i < 4; i++) - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_F9 + i), l.ux(11d + i), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PRINTSCREEN), l.ux(15.5), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_SCROLLLOCK), l.ux(16.5), row0)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAUSE), l.ux(17.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_F9 + i), l.ux(11d + i), row0)); + keys.add(l.key(Keybind.fromKey(KEY_PRINTSCREEN), l.ux(15.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_SCROLLLOCK), l.ux(16.5), row0)); + keys.add(l.key(Keybind.fromKey(KEY_PAUSE), l.ux(17.5), row0)); // Row 1: ` 1-0 - = BS, Ins/Home/PgUp - int[] row1Keys = {InputConstants.KEY_GRAVE, InputConstants.KEY_1, InputConstants.KEY_2, InputConstants.KEY_3, InputConstants.KEY_4, InputConstants.KEY_5, InputConstants.KEY_6, InputConstants.KEY_7, InputConstants.KEY_8, InputConstants.KEY_9, InputConstants.KEY_0, InputConstants.KEY_MINUS, InputConstants.KEY_EQUALS}; + int[] row1Keys = {KEY_GRAVE, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINUS, KEY_EQUALS}; for (int i = 0; i < row1Keys.length; i++) keys.add(l.key(Keybind.fromKey(row1Keys[i]), l.ux(i), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_INSERT), l.ux(15.5), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_HOME), l.ux(16.5), row1)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAGEUP), l.ux(17.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); + keys.add(l.key(Keybind.fromKey(KEY_INSERT), l.ux(15.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_HOME), l.ux(16.5), row1)); + keys.add(l.key(Keybind.fromKey(KEY_PAGEUP), l.ux(17.5), row1)); // Row 2: Tab QWERTY... brackets - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_TAB), 0, row2, KeyDimensions.TAB)); - int[] row2Keys = {InputConstants.KEY_Q, InputConstants.KEY_W, InputConstants.KEY_E, InputConstants.KEY_R, InputConstants.KEY_T, InputConstants.KEY_Y, InputConstants.KEY_U, InputConstants.KEY_I, InputConstants.KEY_O, InputConstants.KEY_P, InputConstants.KEY_LBRACKET, InputConstants.KEY_RBRACKET}; + keys.add(l.key(Keybind.fromKey(KEY_TAB), 0, row2, KeyDimensions.TAB)); + int[] row2Keys = {KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRACKET, KEY_RBRACKET}; double tabEnd = l.px(KeyDimensions.TAB) + l.keyGap; for (int i = 0; i < row2Keys.length; i++) keys.add(l.key(Keybind.fromKey(row2Keys[i]), tabEnd + l.ux(i), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_DELETE), l.ux(15.5), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_END), l.ux(16.5), row2)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_PAGEDOWN), l.ux(17.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_DELETE), l.ux(15.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_END), l.ux(16.5), row2)); + keys.add(l.key(Keybind.fromKey(KEY_PAGEDOWN), l.ux(17.5), row2)); // Row 3: Caps ASDF..., ISO # key - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_CAPSLOCK), 0, row3, KeyDimensions.CAPS_LOCK)); - int[] row3Keys = {InputConstants.KEY_A, InputConstants.KEY_S, InputConstants.KEY_D, InputConstants.KEY_F, InputConstants.KEY_G, InputConstants.KEY_H, InputConstants.KEY_J, InputConstants.KEY_K, InputConstants.KEY_L, InputConstants.KEY_SEMICOLON, InputConstants.KEY_APOSTROPHE}; + keys.add(l.key(Keybind.fromKey(KEY_CAPSLOCK), 0, row3, KeyDimensions.CAPS_LOCK)); + int[] row3Keys = {KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, KEY_APOSTROPHE}; double capsEnd = l.px(KeyDimensions.CAPS_LOCK) + l.keyGap; for (int i = 0; i < row3Keys.length; i++) keys.add(l.key(Keybind.fromKey(row3Keys[i]), capsEnd + l.ux(i), row3)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_BACKSLASH), capsEnd + l.ux(11), row3)); + keys.add(l.key(Keybind.fromKey(KEY_BACKSLASH), capsEnd + l.ux(11), row3)); // ISO Enter double topBarStartX = tabEnd + l.ux(12); @@ -450,41 +448,41 @@ private void buildIsoLayout(LayoutContext l) { double enterStemWidth = l.px(KeyDimensions.ENTER_ISO_WIDTH); double enterStemHeight = l.px(KeyDimensions.ENTER_ISO_HEIGHT); double enterStemX = mainBlockRightEdge - enterStemWidth; - keys.add(new IsoEnterKey(Keybind.fromKey(InputConstants.KEY_RETURN), enterStemX, row2, enterStemWidth, enterStemHeight, topBarStartX)); + keys.add(new IsoEnterKey(Keybind.fromKey(KEY_RETURN), enterStemX, row2, enterStemWidth, enterStemHeight, topBarStartX)); // Row 4: LShift, ISO \| key, ZXCV..., RShift, Up - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LSHIFT), 0, row4, KeyDimensions.LEFT_SHIFT_ISO)); + keys.add(l.key(Keybind.fromKey(KEY_LSHIFT), 0, row4, KeyDimensions.LEFT_SHIFT_ISO)); double lShiftEnd = l.px(KeyDimensions.LEFT_SHIFT_ISO) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_WORLD_2), lShiftEnd, row4)); + keys.add(l.key(Keybind.fromKey(SDLScancode.SDL_SCANCODE_NONUSBACKSLASH), lShiftEnd, row4)); - int[] row4Keys = {InputConstants.KEY_Z, InputConstants.KEY_X, InputConstants.KEY_C, InputConstants.KEY_V, InputConstants.KEY_B, InputConstants.KEY_N, InputConstants.KEY_M, InputConstants.KEY_COMMA, InputConstants.KEY_PERIOD, InputConstants.KEY_SLASH}; + int[] row4Keys = {KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_PERIOD, KEY_SLASH}; for (int i = 0; i < row4Keys.length; i++) keys.add(l.key(Keybind.fromKey(row4Keys[i]), lShiftEnd + l.ux(1d + i), row4)); double rShiftX = lShiftEnd + l.ux(11); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RSHIFT), rShiftX, row4, KeyDimensions.RIGHT_SHIFT)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_UP), l.ux(16.5), row4)); + keys.add(l.key(Keybind.fromKey(KEY_RSHIFT), rShiftX, row4, KeyDimensions.RIGHT_SHIFT)); + keys.add(l.key(Keybind.fromKey(KEY_UP), l.ux(16.5), row4)); // Row 5: Ctrl/Win/Alt/Space/AltGr/Win/Menu/Ctrl, Arrows double xPos = 0; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LCONTROL), xPos, row5, KeyDimensions.CTRL)); + keys.add(l.key(Keybind.fromKey(KEY_LCONTROL), xPos, row5, KeyDimensions.CTRL)); xPos += l.px(KeyDimensions.CTRL) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LSUPER), xPos, row5, KeyDimensions.GUI)); + keys.add(l.key(Keybind.fromKey(KEY_LGUI), xPos, row5, KeyDimensions.GUI)); xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LALT), xPos, row5, KeyDimensions.ALT)); + keys.add(l.key(Keybind.fromKey(KEY_LALT), xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_SPACE), xPos, row5, KeyDimensions.SPACEBAR)); + keys.add(l.key(Keybind.fromKey(KEY_SPACE), xPos, row5, KeyDimensions.SPACEBAR)); xPos += l.px(KeyDimensions.SPACEBAR) + l.keyGap; - keys.add(l.keyNamed(Keybind.fromKey(InputConstants.KEY_RALT), "AltGr", xPos, row5, KeyDimensions.ALT)); + keys.add(l.keyNamed(Keybind.fromKey(KEY_RALT), "AltGr", xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RSUPER), xPos, row5, KeyDimensions.GUI)); + keys.add(l.key(Keybind.fromKey(KEY_RGUI), xPos, row5, KeyDimensions.GUI)); xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_MENU), xPos, row5, KeyDimensions.MENU)); + keys.add(l.key(Keybind.fromKey(SDLScancode.SDL_SCANCODE_APPLICATION), xPos, row5, KeyDimensions.MENU)); xPos += l.px(KeyDimensions.MENU) + l.keyGap; - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RCONTROL), xPos, row5, KeyDimensions.CTRL)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_LEFT), l.ux(15.5), row5)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_DOWN), l.ux(16.5), row5)); - keys.add(l.key(Keybind.fromKey(InputConstants.KEY_RIGHT), l.ux(17.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_RCONTROL), xPos, row5, KeyDimensions.CTRL)); + keys.add(l.key(Keybind.fromKey(KEY_LEFT), l.ux(15.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_DOWN), l.ux(16.5), row5)); + keys.add(l.key(Keybind.fromKey(KEY_RIGHT), l.ux(17.5), row5)); } private void calculateSize() { @@ -546,9 +544,7 @@ private static String getShortName(String name) { @Override public void render(HudRenderer renderer) { if (keys.isEmpty()) { - if (mc.options != null) { - onPresetChanged(preset.get()); - } + onPresetChanged(preset.get()); return; } @@ -667,7 +663,7 @@ public static class Key { private float delta; public Key() { - this.keybind = Keybind.fromKey(InputConstants.KEY_SPACE); + this.keybind = Keybind.fromKey(KEY_SPACE); this.width = 60; this.height = 40; } @@ -712,14 +708,14 @@ public String getName() { return "?"; } - public boolean matches(int input, int scancode, boolean key) { + public boolean matches(int input, int keycode, boolean key) { if (keybind != null) { return keybind.isKey() == key && keybind.getValue() == input; } else { InputConstants.Key inputKey = ((KeyMappingAccessor) binding).meteor$getKey(); boolean isKey = inputKey.getType() != InputConstants.Type.MOUSE; - return isKey == key && inputKey.getType() == InputConstants.Type.SCANCODE - ? scancode == inputKey.getValue() + return isKey == key && inputKey.getType() == InputConstants.Type.KEYBOARD + ? keycode == inputKey.getValue() : input == inputKey.getValue(); } } @@ -736,17 +732,16 @@ public void update(KeyAction action) { } public boolean isNativelyPressed() { - long window = mc.getWindow().handle(); if (keybind != null) { if (!keybind.isSet()) return false; return keybind.isKey() - ? InputConstants.isKeyDown(mc.getWindow(), keybind.getValue()) - : GLFW.glfwGetMouseButton(window, keybind.getValue()) != InputConstants.RELEASE; + ? InputConstants.isKeyDown(keybind.getValue()) + : Input.isButtonPressed(keybind.getValue()); } else { int key = ((KeyMappingAccessor) binding).meteor$getKey().getValue(); return key >= 0 && key < 8 - ? GLFW.glfwGetMouseButton(window, key) != InputConstants.RELEASE - : InputConstants.isKeyDown(mc.getWindow(), key); + ? Input.isButtonPressed(key) + : InputConstants.isKeyDown(key); } } @@ -915,7 +910,7 @@ public void initWidgets() { sgGeneral.add(new KeybindSetting.Builder() .name("custom-key") .description("The key to display.") - .defaultValue(Keybind.fromKey(InputConstants.KEY_SPACE)) + .defaultValue(Keybind.fromKey(KEY_SPACE)) .onChanged(k -> { this.key.keybind = k; this.screen.reload(); 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 b6a36665f54..aa81b29248d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/hud/screens/HudEditorScreen.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.hud.screens; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.gui.GuiTheme; import meteordevelopment.meteorclient.gui.WidgetScreen; import meteordevelopment.meteorclient.gui.tabs.builtin.HudTab; @@ -21,7 +22,6 @@ import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.util.Mth; import org.jspecify.annotations.NonNull; -import com.mojang.blaze3d.platform.InputConstants; import java.util.ArrayList; import java.util.Iterator; @@ -336,6 +336,8 @@ private void renderSplitLine(Renderer2D renderer, double x, double y, double des } public static boolean isOpen() { + if (!Utils.canUpdate()) return false; + Screen s = mc.gui.screen(); return s instanceof HudEditorScreen || s instanceof AddHudElementScreen || s instanceof HudElementPresetsScreen || s instanceof HudElementScreen || s instanceof HudTab.HudScreen; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java index 3f4fc5f8e67..99cdcb14e2b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/Modules.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules; +import com.mojang.blaze3d.platform.InputConstants; import com.mojang.datafixers.util.Pair; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; @@ -47,7 +48,6 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import org.jspecify.annotations.Nullable; -import com.mojang.blaze3d.platform.InputConstants; import java.io.File; import java.util.*; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AntiBed.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AntiBed.java index af774fc405a..21c87d083e6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AntiBed.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AntiBed.java @@ -19,8 +19,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; -import net.minecraft.world.InteractionHand; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.world.item.Items; import net.minecraft.world.level.block.BedBlock; @@ -95,6 +94,6 @@ private void sendMinePackets(BlockPos blockPos) { private void sendStopPackets(BlockPos blockPos) { mc.getConnection().send(new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.ABORT_DESTROY_BLOCK, blockPos, Direction.UP)); - mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + mc.getConnection().send(new ServerboundPunchPacket()); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AttributeSwap.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AttributeSwap.java index 55f34abc0fe..cea34a31bd7 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AttributeSwap.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AttributeSwap.java @@ -23,7 +23,6 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.MaceItem; import net.minecraft.world.item.TridentItem; @@ -403,8 +402,8 @@ private int getSmartSlot(Entity target) { ItemStack currentStack = mc.player.getMainHandItem(); if (target != null && smartShieldBreak.get() && target instanceof LivingEntity living && living.isBlocking()) { - if (currentStack.getItem() instanceof AxeItem) return -1; - int axeSlot = InvUtils.findInHotbar(item -> item.getItem() instanceof AxeItem).slot(); + if (currentStack.is(ItemTags.AXES)) return -1; + int axeSlot = InvUtils.findInHotbar(item -> item.is(ItemTags.AXES)).slot(); if (axeSlot != -1) return axeSlot; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoCity.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoCity.java index fd7652df7b3..cf1c6e1acab 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoCity.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoCity.java @@ -24,7 +24,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Items; @@ -216,8 +216,8 @@ public void mine(boolean done) { mc.gameMode.startPrediction(mc.level, sequence -> new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, targetPos, direction, sequence)); mc.gameMode.startPrediction(mc.level, sequence -> new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.STOP_DESTROY_BLOCK, targetPos, direction, sequence)); - if (swingHand.get()) mc.player.swing(InteractionHand.MAIN_HAND); - else mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + if (swingHand.get()) mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getItemInHand(InteractionHand.MAIN_HAND).getAttackAnimation(), false); + else mc.getConnection().send(new ServerboundPunchPacket()); if (switchMode.get() == SwitchMode.Silent) InvUtils.swapBack(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeapon.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeapon.java index f23a48947b3..1e083b2c9db 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeapon.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/AutoWeapon.java @@ -14,7 +14,6 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.ItemStack; public class AutoWeapon extends Module { @@ -68,7 +67,7 @@ private int getBestWeapon(LivingEntity target) { damageS = currentDamageS; slotS = i; } - } else if (stack.getItem() instanceof AxeItem + } else if (stack.is(ItemTags.AXES) && (!antiBreak.get() || (stack.getMaxDamage() - stack.getDamageValue()) > 10)) { currentDamageA = DamageUtils.getAttackDamage(mc.player, target, stack); if (currentDamageA > damageA) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java index ba40ccadafd..3fc3469033a 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/BedAura.java @@ -26,9 +26,9 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.tags.ItemTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BedItem; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BedBlock; import net.minecraft.world.phys.BlockHitResult; @@ -225,7 +225,7 @@ private void onTick(TickEvent.Post event) { // Auto move if (autoMove.get()) { - FindItemResult bed = InvUtils.find(itemStack -> itemStack.getItem() instanceof BedItem); + FindItemResult bed = InvUtils.find(itemStack -> itemStack.is(ItemTags.BEDS)); if (bed.found() && bed.slot() != autoMoveSlot.get() - 1) { InvUtils.move().from(bed.slot()).toHotbar(autoMoveSlot.get() - 1); @@ -248,7 +248,7 @@ private void onTick(TickEvent.Post event) { } private BlockPos findPlace(Player target) { - if (!InvUtils.find(itemStack -> itemStack.getItem() instanceof BedItem).found()) return null; + if (!InvUtils.find(itemStack -> itemStack.is(ItemTags.BEDS)).found()) return null; for (int index = 0; index < 3; index++) { int i = index == 0 ? 1 : index == 1 ? 0 : 2; @@ -301,7 +301,7 @@ private BlockPos findBreak() { private boolean placeBed(BlockPos pos) { if (pos == null) return false; - FindItemResult bed = InvUtils.findInHotbar(itemStack -> itemStack.getItem() instanceof BedItem); + FindItemResult bed = InvUtils.findInHotbar(itemStack -> itemStack.is(ItemTags.BEDS)); if (bed.getHand() == null && !autoSwitch.get()) return false; double yaw = switch (direction) { 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 014dc2bf229..f7504d45772 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Burrow.java @@ -22,7 +22,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.world.InteractionHand; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Items; @@ -200,7 +200,7 @@ private void burrow() { InvUtils.swap(block.slot(), true); mc.gameMode.useItemOn(mc.player, InteractionHand.MAIN_HAND, new BlockHitResult(Utils.vec3(blockPos), Direction.UP, blockPos, false)); - mc.player.connection.send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + mc.player.connection.send(new ServerboundPunchPacket()); InvUtils.swapBack(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Criticals.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Criticals.java index aa0fa5da881..924248462d1 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Criticals.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Criticals.java @@ -18,7 +18,7 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.network.protocol.game.ServerboundAttackPacket; import net.minecraft.network.protocol.game.ServerboundMovePlayerPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.MaceItem; @@ -61,7 +61,7 @@ public class Criticals extends Module { ); private ServerboundAttackPacket attackPacket; - private ServerboundSwingPacket swingPacket; + private ServerboundPunchPacket swingPacket; private boolean sendPackets; private int sendTimer; private double lastY; @@ -130,11 +130,11 @@ private void onSendPacket(PacketEvent.Send event) { } } } - } else if (event.packet instanceof ServerboundSwingPacket serverboundSwingPacket && mode.get() != Mode.Packet) { + } else if (event.packet instanceof ServerboundPunchPacket serverboundPunchPacket && mode.get() != Mode.Packet) { if (skipCrit()) return; if (sendPackets && swingPacket == null) { - swingPacket = serverboundSwingPacket; + swingPacket = serverboundPunchPacket; event.cancel(); } } 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 c7a486bc269..87097ea3068 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/CrystalAura.java @@ -874,8 +874,8 @@ private void attackCrystal(Entity entity) { InteractionHand hand = InvUtils.findInHotbar(Items.END_CRYSTAL).getHand(); if (hand == null) hand = InteractionHand.MAIN_HAND; - if (swingMode.get().client()) mc.player.swing(hand); - if (swingMode.get().packet()) mc.getConnection().send(new ServerboundSwingPacket(hand)); + if (swingMode.get().client()) mc.player.swing(hand, mc.player.getItemInHand(hand).getAttackAnimation(), false); + if (swingMode.get().packet()) mc.getConnection().send(new ServerboundPunchPacket()); attacks++; } @@ -1037,8 +1037,8 @@ private void placeCrystal(BlockHitResult result, double damage, BlockPos support // Place crystal mc.gameMode.startPrediction(mc.level, sequence -> new ServerboundUseItemOnPacket(hand, result, sequence)); - if (swingMode.get().client()) mc.player.swing(hand); - if (swingMode.get().packet()) mc.getConnection().send(new ServerboundSwingPacket(hand)); + if (swingMode.get().client()) mc.player.swing(hand, mc.player.getItemInHand(hand).getAttackAnimation(), false); + if (swingMode.get().packet()) mc.getConnection().send(new ServerboundPunchPacket()); placing = true; placingTimer = 4; 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 5efae07ceb1..882843e222b 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/KillAura.java @@ -13,11 +13,7 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.systems.modules.Modules; -import meteordevelopment.meteorclient.utils.entity.EntityAgeTest; -import meteordevelopment.meteorclient.utils.entity.EntityUtils; -import meteordevelopment.meteorclient.utils.entity.SortPriority; -import meteordevelopment.meteorclient.utils.entity.Target; -import meteordevelopment.meteorclient.utils.entity.TargetUtils; +import meteordevelopment.meteorclient.utils.entity.*; import meteordevelopment.meteorclient.utils.entity.fakeplayer.FakePlayerEntity; import meteordevelopment.meteorclient.utils.player.FindItemResult; import meteordevelopment.meteorclient.utils.player.InvUtils; @@ -33,7 +29,7 @@ import net.minecraft.world.entity.animal.frog.Frog; import net.minecraft.world.entity.animal.parrot.Parrot; import net.minecraft.world.entity.animal.wolf.Wolf; -import net.minecraft.world.entity.monster.EnderMan; +import net.minecraft.world.entity.monster.Enderman; import net.minecraft.world.entity.monster.Zoglin; import net.minecraft.world.entity.monster.hoglin.Hoglin; import net.minecraft.world.entity.monster.piglin.Piglin; @@ -335,7 +331,7 @@ private void onTick(TickEvent.Pre event) { weaponResult = InvUtils.find(this::acceptableWeapon, 0, 8); if (shouldShieldBreak()) { - FindItemResult axeResult = InvUtils.find(itemStack -> itemStack.getItem() instanceof AxeItem, 0, 8); + FindItemResult axeResult = InvUtils.find(itemStack -> itemStack.is(ItemTags.AXES), 0, 8); if (axeResult.found()) weaponResult = axeResult; } @@ -419,7 +415,7 @@ private boolean entityCheck(Entity entity) { ) return false; } if (ignorePassive.get()) { - if (entity instanceof EnderMan enderman && !enderman.isCreepy()) return false; + if (entity instanceof Enderman enderman && !enderman.isCreepy()) return false; if ((entity instanceof Piglin || entity instanceof ZombifiedPiglin || entity instanceof Wolf) && !((Mob) entity).isAggressive()) return false; } @@ -465,13 +461,13 @@ private void attack(Entity target) { Rotations.rotate(Rotations.getYaw(target), Rotations.getPitch(target, Target.Body)); mc.gameMode.attack(mc.player, target); - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); hitTimer = 0; } private boolean acceptableWeapon(ItemStack stack) { - if (shouldShieldBreak()) return stack.getItem() instanceof AxeItem; + if (shouldShieldBreak()) return stack.is(ItemTags.AXES); if (attackWhenHolding.get() == AttackItems.All) return true; if (weapons.get().contains(Items.DIAMOND_SWORD) && stack.is(ItemTags.SWORDS)) return true; 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 76c45ab8bae..f2933dc2ec3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Offhand.java @@ -19,11 +19,10 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.AxeItem; import net.minecraft.world.item.Items; -import static meteordevelopment.orbit.EventPriority.HIGHEST; import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; +import static meteordevelopment.orbit.EventPriority.HIGHEST; public class Offhand extends Module { private final SettingGroup sgCombat = settings.createGroup("Combat"); @@ -191,7 +190,7 @@ else if (ticks > delayTicks.get()) { } // Always Gap - else if ((mc.player.getMainHandItem().is(ItemTags.SWORDS) || mc.player.getMainHandItem().getItem() instanceof AxeItem) && alwaysSwordGap.get()) + else if ((mc.player.getMainHandItem().is(ItemTags.SWORDS) || mc.player.getMainHandItem().is(ItemTags.AXES)) && alwaysSwordGap.get()) currentItem = Item.EGap; // Potion Click @@ -206,7 +205,7 @@ else if (potionClick.get()) { } // Always Pot - else if ((mc.player.getMainHandItem().is(ItemTags.SWORDS) || mc.player.getMainHandItem().getItem() instanceof AxeItem) && alwaysPot.get()) + else if ((mc.player.getMainHandItem().is(ItemTags.SWORDS) || mc.player.getMainHandItem().is(ItemTags.AXES)) && alwaysPot.get()) currentItem = Item.Potion; 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 51079d973d7..62886fc86eb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java @@ -27,9 +27,8 @@ import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket; import net.minecraft.network.protocol.game.ServerboundAttackPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.server.level.BlockDestructionProgress; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.boss.enderdragon.EndCrystal; import net.minecraft.world.level.block.Block; @@ -39,8 +38,8 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Predicate; import java.util.SortedSet; +import java.util.function.Predicate; public class Surround extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -401,7 +400,7 @@ private boolean place(BlockPos placePos, FindItemResult block) { mc.player.connection.send(new ServerboundAttackPacket(crystal.getId())); } - mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + mc.getConnection().send(new ServerboundPunchPacket()); } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/DiscordPresence.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/DiscordPresence.java index a8dda6dab0d..01de40a4f28 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/DiscordPresence.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/DiscordPresence.java @@ -7,6 +7,7 @@ //Created by squidoodly +import com.mojang.blaze3d.Blaze3D; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import meteordevelopment.discordipc.DiscordIPC; import meteordevelopment.discordipc.RichPresence; @@ -34,9 +35,9 @@ import net.minecraft.client.gui.screens.worldselection.EditWorldScreen; import net.minecraft.client.gui.screens.worldselection.SelectWorldScreen; import net.minecraft.realms.RealmsScreen; -import net.minecraft.util.Util; import org.meteordev.starscript.Script; +import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -288,7 +289,7 @@ private void onOpenScreen(OpenScreenEvent event) { @Override public WWidget getWidget(GuiTheme theme) { WButton help = theme.button("Open documentation."); - help.action = () -> Util.getPlatform().openUri("https://github.com/MeteorDevelopment/meteor-client/wiki/Starscript"); + help.action = () -> Blaze3D.openUri(URI.create("https://github.com/MeteorDevelopment/meteor-client/wiki/Starscript")); return help; } 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 ba5e2894275..c1088019d98 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java @@ -36,11 +36,12 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DecoratedPotBlock; -import com.mojang.blaze3d.platform.InputConstants; import java.util.List; import java.util.concurrent.ThreadLocalRandom; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_MIDDLE; + public class InventoryTweaks extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); private final SettingGroup sgSorting = settings.createGroup("Sorting"); @@ -98,7 +99,7 @@ public class InventoryTweaks extends Module { .name("sorting-key") .description("Key to trigger the sort.") .visible(sortingEnabled::get) - .defaultValue(Keybind.fromButton(InputConstants.MOUSE_BUTTON_MIDDLE)) + .defaultValue(Keybind.fromButton(MOUSE_BUTTON_MIDDLE)) .build() ); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notebot.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notebot.java index e81bf20d437..7bab429e464 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notebot.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/Notebot.java @@ -834,7 +834,7 @@ private void tuneBlocks() { } if (swingArm.get()) { - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); } int iterations = 0; @@ -904,7 +904,7 @@ private void onTickPlay() { // Swing arm if (swingArm.get()) { - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); } // Play notes diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/swarm/Swarm.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/swarm/Swarm.java index c3c5317c5f3..ef06a936e79 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/swarm/Swarm.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/swarm/Swarm.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.misc.swarm; +import com.mojang.blaze3d.Blaze3D; import meteordevelopment.meteorclient.events.game.GameJoinedEvent; import meteordevelopment.meteorclient.events.game.GameLeftEvent; import meteordevelopment.meteorclient.events.world.TickEvent; @@ -17,7 +18,8 @@ import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; -import net.minecraft.util.Util; + +import java.net.URI; public class Swarm extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -72,7 +74,7 @@ public WWidget getWidget(GuiTheme theme) { stop.action = this::close; WButton guide = list.add(theme.button("Guide")).expandX().widget(); - guide.action = () -> Util.getPlatform().openUri("https://github.com/MeteorDevelopment/meteor-client/wiki/Swarm-Guide"); + guide.action = () -> Blaze3D.openUri(URI.create("https://github.com/MeteorDevelopment/meteor-client/wiki/Swarm-Guide")); return list; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/EntityControl.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/EntityControl.java index 14ae044a418..5a91344a1f3 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/EntityControl.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/EntityControl.java @@ -174,7 +174,7 @@ public void onActivate() { private void onPreTick(TickEvent.Pre event) { if (sentPacket && mc.player.getVehicle() != null) { ServerboundMoveVehiclePacket packet = ServerboundMoveVehiclePacket.fromEntity(mc.player.getVehicle()); - ((IVec3) packet.position()).meteor$setY(lastPacketY); + ((IVec3) packet.movingTo().position()).meteor$setY(lastPacketY); mc.getConnection().send(packet); sentPacket = false; } @@ -214,9 +214,9 @@ private void onEntityMove(EntityMoveEvent event) { private void onSendPacket(PacketEvent.Send event) { if (!(event.packet instanceof ServerboundMoveVehiclePacket packet) || !antiKick.get()) return; - double currentY = packet.position().y; + double currentY = packet.movingTo().position().y; if (delayLeft <= 0 && !sentPacket && shouldFlyDown(currentY) && EntityUtils.isOnAir(mc.player.getVehicle()) && !mc.player.getVehicle().isFlyingVehicle()) { - ((IVec3) packet.position()).meteor$setY(lastPacketY - 0.03130D); + ((IVec3) packet.movingTo().position()).meteor$setY(lastPacketY - 0.03130D); sentPacket = true; delayLeft = delay.get(); } 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 fa603ad9b22..feeeb56a776 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/Scaffold.java @@ -227,7 +227,7 @@ private void onTick(TickEvent.Pre event) { if (!BlockUtils.canPlace(bp)) continue; if (mc.player.getEyePosition().distanceToSqr(Vec3.atCenterOf(bp.relative(BlockUtils.getClosestPlaceSide(bp)))) > 36) continue; - blockPosArray.add(new BlockPos(bp)); + blockPosArray.add(bp.immutable()); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFlightMode.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFlightMode.java index 3b4f302bd8e..2ff3709abbe 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFlightMode.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/elytrafly/ElytraFlightMode.java @@ -125,12 +125,12 @@ public void handleAutopilot() { if (itemResult.isOffhand()) { mc.gameMode.useItem(mc.player, InteractionHand.OFF_HAND); - mc.player.swing(InteractionHand.OFF_HAND); + mc.player.swing(InteractionHand.OFF_HAND, mc.player.getOffhandItem().getInteractAnimation(), false); } else { InvUtils.swap(itemResult.slot(), true); mc.gameMode.useItem(mc.player, InteractionHand.MAIN_HAND); - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getInteractAnimation(), false); InvUtils.swapBack(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AntiAFK.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AntiAFK.java index d5fbc94826b..7340e540089 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AntiAFK.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/AntiAFK.java @@ -185,7 +185,7 @@ private void onTick(TickEvent.Pre event) { // Swing if (swing.get() && random.nextInt(99) == 0) { - mc.player.swing(mc.player.getUsedItemHand()); + mc.player.swing(mc.player.getUsedItemHand(), mc.player.getItemInHand(mc.player.getUsedItemHand()).getInteractAnimation(), false); } // Sneak diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/GhostHand.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/GhostHand.java index 03ecefe17fc..17eb07c87bb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/GhostHand.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/GhostHand.java @@ -49,7 +49,7 @@ private void onTick(DoItemUseEvent event) { for (InteractionHand hand : InteractionHand.values()) { InteractionResult result = mc.gameMode.useItemOn(mc.player, hand, new BlockHitResult(new Vec3(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5), Direction.UP, pos, true)); if (result instanceof InteractionResult.Success || result instanceof InteractionResult.Fail) { - mc.player.swing(hand); + mc.player.swing(hand, mc.player.getItemInHand(hand).getInteractAnimation(), false); event.cancel(); return; } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/InstantRebreak.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/InstantRebreak.java index 0fb4ba42926..80d93645f1c 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/InstantRebreak.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/InstantRebreak.java @@ -19,9 +19,8 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.tags.ItemTags; -import net.minecraft.world.InteractionHand; public class InstantRebreak extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -110,7 +109,7 @@ private void onTick(TickEvent.Pre event) { Rotations.rotate(Rotations.getYaw(blockPos), Rotations.getPitch(blockPos), this::sendPacket); else sendPacket(); - mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + mc.getConnection().send(new ServerboundPunchPacket()); } } else { ticks++; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Blur.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Blur.java index 76a98681da5..5691a536e21 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Blur.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Blur.java @@ -5,14 +5,14 @@ package meteordevelopment.meteorclient.systems.modules.render; -import com.mojang.blaze3d.GpuFormat; -import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.buffers.Std140Builder; import com.mojang.blaze3d.buffers.Std140SizeCalculator; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.FilterMode; -import com.mojang.blaze3d.textures.GpuTextureView; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.textures.FilterMode; +import com.mojang.renderpearl.api.textures.GpuTextureView; import it.unimi.dsi.fastutil.ints.IntFloatImmutablePair; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.game.ResolutionChangedEvent; @@ -31,7 +31,7 @@ import net.minecraft.client.gui.screens.ChatScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; -import net.minecraft.client.renderer.DynamicUniformStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorage; import org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; @@ -217,7 +217,7 @@ private void onRenderAfterWorld() { .attachments(mc.gameRenderer.mainRenderTarget()) .pipeline(MeteorRenderPipelines.BLUR_PASSTHROUGH) .fullscreen() - .sampler("u_Texture", fbos[0], RenderSystem.getSamplerCache().getClampToEdge(FilterMode.LINEAR)) // todo ??? + .sampler("u_Texture", fbos[0], RenderSystem.getSamplerCache().getClampToEdge(FilterMode.LINEAR)) .end(); } @@ -268,7 +268,7 @@ private void updateUniforms(float offset) { private static final FixedUniformStorage UNIFORM_STORAGE = new FixedUniformStorage<>("Meteor - Blur UBO", UNIFORM_SIZE, 6); private record BlurUniformData(float halfTexelSizeX, float halfTexelSizeY, - float offset) implements DynamicUniformStorage.DynamicUniform { + float offset) implements DynamicGpuDataStorage.DynamicGpuData { @Override public void write(@NonNull ByteBuffer buffer) { Std140Builder.intoBuffer(buffer) diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/CameraTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/CameraTweaks.java index c3be1f36ac6..de8d9f4f593 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/CameraTweaks.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/CameraTweaks.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.events.game.ChangePerspectiveEvent; import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.settings.*; @@ -13,7 +14,6 @@ import meteordevelopment.meteorclient.utils.misc.Keybind; import meteordevelopment.orbit.EventHandler; import net.minecraft.client.CameraType; -import com.mojang.blaze3d.platform.InputConstants; public class CameraTweaks extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/FreeLook.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/FreeLook.java index 7ed62db8474..bf27e840fdb 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/FreeLook.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/FreeLook.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.events.world.TickEvent; import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; @@ -13,7 +14,6 @@ import meteordevelopment.orbit.EventHandler; import net.minecraft.client.CameraType; import net.minecraft.util.Mth; -import com.mojang.blaze3d.platform.InputConstants; public class FreeLook extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); 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 e1159f69e7e..b397d9efb19 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Freecam.java @@ -43,7 +43,8 @@ import net.minecraft.world.phys.shapes.CollisionContext; import org.joml.Vector3d; import org.jspecify.annotations.Nullable; -import com.mojang.blaze3d.platform.InputConstants; + +import static com.mojang.blaze3d.platform.InputConstants.KEY_F3; public class Freecam extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -305,7 +306,7 @@ private void onTick(TickEvent.Post event) { @EventHandler(priority = EventPriority.HIGH) public void onKey(KeyInputEvent event) { - if (Input.isKeyPressed(InputConstants.KEY_F3)) return; + if (Input.isKeyPressed(KEY_F3)) return; if (checkGuiMove()) return; if (onInput(event.key(), event.action)) event.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java index 807f3bd14a1..dcbfd4f783f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java @@ -67,7 +67,7 @@ public class HandView extends Module { .build() ); - public final Setting swingSpeed = sgGeneral.add(new IntSetting.Builder() + public final Setting swingSpeed = sgGeneral.add(new DoubleSetting.Builder() .name("swing-speed") .description("The swing speed of your hands.") .defaultValue(6) @@ -207,9 +207,9 @@ private void onRenderArm(ArmRenderEvent event) { } private void rotate(PoseStack matrix, Vector3d rotation) { - matrix.mulPose(Axis.XP.rotationDegrees((float) rotation.x)); - matrix.mulPose(Axis.YP.rotationDegrees((float) rotation.y)); - matrix.mulPose(Axis.ZP.rotationDegrees((float) rotation.z)); + matrix.rotateDegrees(Axis.XP, (float) rotation.x); + matrix.rotateDegrees(Axis.YP, (float) rotation.y); + matrix.rotateDegrees(Axis.ZP, (float) rotation.z); } private void scale(PoseStack matrix, Vector3d scale) { @@ -221,8 +221,8 @@ private void translate(PoseStack matrix, Vector3d translation) { } private void applyServerRotations(PoseStack matrix) { - matrix.mulPose(Axis.XP.rotationDegrees(mc.player.getXRot() - Rotations.serverPitch)); - matrix.mulPose(Axis.YP.rotationDegrees(mc.player.getYRot() - Rotations.serverYaw)); + matrix.rotateDegrees(Axis.XP, mc.player.getXRot() - Rotations.serverPitch); + matrix.rotateDegrees(Axis.YP, mc.player.getYRot() - Rotations.serverYaw); } public boolean oldAnimations() { 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 36c68549ac9..6f899a466fe 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -60,7 +60,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { for (int i = 0; i < ((ItemStackRenderStateAccessor) event.renderState.item).meteor$getActiveLayerCount(); i++) { ItemStackRenderState.LayerRenderState layer = ((ItemStackRenderStateAccessor) event.renderState.item).meteor$getLayers()[i]; - ModelInfo info = getInfo(layer.prepareQuadList()); + ModelInfo info = getInfo(layer.quads.all()); matrices.pushPose(); applyTransformation(matrices, ((LayerRenderStateAccessor) layer).meteor$getTransform()); @@ -68,7 +68,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { offsetInWater(matrices, event.itemEntity); if (info.flat) { - matrices.mulPose(Axis.XP.rotationDegrees(90)); + matrices.rotateDegrees(Axis.XP, 90); matrices.translate(0, 0, info.offsetZ); } @@ -87,7 +87,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { float degrees = (random.nextFloat() * 2 - 1) * 90; matrices.translate(x, y, z); - matrices.mulPose(axis.rotationDegrees(degrees)); + matrices.rotateDegrees(axis, degrees); matrices.translate(-x, -y, -z); } 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 c5bd7ebfa22..21e46fe9a5d 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; @@ -19,7 +20,6 @@ import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.orbit.EventHandler; import net.minecraft.util.Mth; -import com.mojang.blaze3d.platform.InputConstants; public class Zoom extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoBreed.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoBreed.java index 2f1305b5d07..4ca16461cb0 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoBreed.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoBreed.java @@ -104,7 +104,7 @@ private void onTick(TickEvent.Pre event) { Rotations.rotate(Rotations.getYaw(entity), Rotations.getPitch(entity), -100, () -> { EntityHitResult location = new EntityHitResult(animal, animal.getBoundingBox().getCenter()); mc.gameMode.interact(mc.player, animal, location, hand.get()); - mc.player.swing(hand.get()); + mc.player.swing(hand.get(), mc.player.getItemInHand(hand.get()).getInteractAnimation(), false); animalsFed.putLast(animal, tickCounter); }); break; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSign.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSign.java index 76df1044144..6f0a2e1ac10 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSign.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSign.java @@ -18,8 +18,10 @@ import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen; import net.minecraft.network.protocol.game.ServerboundSignUpdatePacket; import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraft.world.level.block.entity.SignTextSlot; import java.util.ArrayDeque; +import java.util.List; import java.util.Queue; public class AutoSign extends Module { @@ -34,7 +36,8 @@ public class AutoSign extends Module { .build() ); - private String[] text; + private List text; + private SignTextSlot slot; // Some servers (e.g., 2b2t) don't like the sign packet being sent too soon after the swing or block click packets, so queue them. // Delaying by sleeping in the event handler may be fine for a single sign, but would visibly lag the UI at a larger scale. @@ -48,6 +51,7 @@ public AutoSign() { @Override public void onDeactivate() { text = null; + slot = null; } @EventHandler @@ -72,18 +76,19 @@ private void onTick(TickEvent.Post event) { @EventHandler private void onSendPacket(PacketEvent.Send event) { - if (!(event.packet instanceof ServerboundSignUpdatePacket)) return; + if (!(event.packet instanceof ServerboundSignUpdatePacket signPacket)) return; - text = ((ServerboundSignUpdatePacket) event.packet).getLines(); + text = signPacket.lines(); + slot = signPacket.slot(); } @EventHandler private void onOpenScreen(OpenScreenEvent event) { - if (!(event.screen instanceof AbstractSignEditScreen) || text == null) return; + if (!(event.screen instanceof AbstractSignEditScreen) || text == null || slot == null) return; SignBlockEntity sign = ((AbstractSignEditScreenAccessor) event.screen).meteor$getSign(); - queue.add(new ServerboundSignUpdatePacket(sign.getBlockPos(), true, text[0], text[1], text[2], text[3])); + queue.add(new ServerboundSignUpdatePacket(sign.getBlockPos(), text, slot)); event.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java index 984fdee1a8d..db213d8518e 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/AutoSmelter.java @@ -6,15 +6,12 @@ package meteordevelopment.meteorclient.systems.modules.world; import meteordevelopment.meteorclient.mixininterface.IAbstractFurnaceMenu; -import meteordevelopment.meteorclient.settings.BoolSetting; -import meteordevelopment.meteorclient.settings.IntSetting; -import meteordevelopment.meteorclient.settings.ItemListSetting; -import meteordevelopment.meteorclient.settings.Setting; -import meteordevelopment.meteorclient.settings.SettingGroup; +import meteordevelopment.meteorclient.settings.*; import meteordevelopment.meteorclient.systems.modules.Categories; import meteordevelopment.meteorclient.systems.modules.Module; import meteordevelopment.meteorclient.utils.Utils; import meteordevelopment.meteorclient.utils.player.InvUtils; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.inventory.AbstractFurnaceMenu; import net.minecraft.world.inventory.ContainerInput; import net.minecraft.world.item.Item; @@ -74,7 +71,7 @@ public AutoSmelter() { private boolean fuelItemFilter(Item item) { if (!Utils.canUpdate()) return false; - return mc.getConnection().fuelValues().fuelItems().contains(item); + return item.getDefaultInstance().has(DataComponents.COOKING_FUEL); } private boolean smeltableItemFilter(Item item) { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/BuildHeight.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/BuildHeight.java index 2bf39936274..c186f9286f6 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/BuildHeight.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/BuildHeight.java @@ -22,8 +22,8 @@ public BuildHeight() { private void onSendPacket(PacketEvent.Send event) { if (!(event.packet instanceof ServerboundUseItemOnPacket p)) return; if (mc.level == null) return; - if (p.getHitResult().getLocation().y >= mc.level.getHeight() && p.getHitResult().getDirection() == Direction.UP) { - ((BlockHitResultAccessor) p.getHitResult()).meteor$setDirection(Direction.DOWN); + if (p.hitResult().getLocation().y >= mc.level.getHeight() && p.hitResult().getDirection() == Direction.UP) { + ((BlockHitResultAccessor) p.hitResult()).meteor$setDirection(Direction.DOWN); } } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java index fb1d6f8e7ac..bc2cf6dd3ad 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Collisions.java @@ -84,7 +84,7 @@ private void onPlayerMove(PlayerMoveEvent event) { private void onPacketSend(PacketEvent.Send event) { if (!unloadedChunks.get()) return; if (event.packet instanceof ServerboundMoveVehiclePacket packet) { - if (!mc.level.getChunkSource().hasChunk((int) packet.position().x() >> 4, (int) packet.position().z() >> 4)) { + if (!mc.level.getChunkSource().hasChunk((int) packet.movingTo().position().x() >> 4, (int) packet.movingTo().position().z() >> 4)) { mc.player.getVehicle().absSnapTo(mc.player.getVehicle().xo, mc.player.getVehicle().yo, mc.player.getVehicle().zo); event.cancel(); } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java index c4537d27e47..a44926449ca 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/EndermanLook.java @@ -18,7 +18,7 @@ import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.monster.EnderMan; +import net.minecraft.world.entity.monster.Enderman; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; @@ -51,7 +51,7 @@ private void onTick(TickEvent.Pre event) { return; for (Entity entity : mc.level.entitiesForRendering()) { - if (!(entity instanceof EnderMan enderman) || !enderman.isAlive() || !mc.player.hasLineOfSight(enderman)) + if (!(entity instanceof Enderman enderman) || !enderman.isAlive() || !mc.player.hasLineOfSight(enderman)) continue; switch (lookMode.get()) { @@ -69,9 +69,9 @@ private void onTick(TickEvent.Pre event) { } /** - * @see EnderMan#isBeingStaredBy(Player) + * @see Enderman#isBeingStaredBy(Player) */ - private boolean angleCheck(EnderMan entity) { + private boolean angleCheck(Enderman entity) { Vec3 vec3d = mc.player.getViewVector(1.0F).normalize(); Vec3 vec3d2 = new Vec3(entity.getX() - mc.player.getX(), entity.getEyeY() - mc.player.getEyeY(), entity.getZ() - mc.player.getZ()); 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 a890b03cfbc..a11e3e57959 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Excavator.java @@ -8,6 +8,7 @@ import baritone.api.BaritoneAPI; import baritone.api.IBaritone; import baritone.api.utils.BetterBlockPos; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; @@ -20,7 +21,6 @@ import meteordevelopment.meteorclient.utils.render.color.SettingColor; import meteordevelopment.orbit.EventHandler; import net.minecraft.world.phys.BlockHitResult; -import com.mojang.blaze3d.platform.InputConstants; public class Excavator extends Module { private final IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone(); 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 5f09fe4ff07..e770f8a1aa9 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/HighwayBuilder.java @@ -762,7 +762,7 @@ private void tickDoubleMine() { normalMining.stopDestroying(); } - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getInteractAnimation(), false); } if (packetMining != null) { 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 3dd49d55700..4473c4d6872 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/Nuker.java @@ -31,7 +31,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.network.protocol.game.ServerboundPlayerActionPacket; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.world.InteractionHand; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.block.Block; @@ -518,8 +518,8 @@ private void breakBlock(BlockPos blockPos) { // Packet mine mode mc.gameMode.startPrediction(mc.level, sequence -> new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.START_DESTROY_BLOCK, blockPos, BlockUtils.getDirection(blockPos), sequence)); - if (swing.get()) mc.player.swing(InteractionHand.MAIN_HAND); - else mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + if (swing.get()) mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); + else mc.getConnection().send(new ServerboundPunchPacket()); mc.gameMode.startPrediction(mc.level, sequence -> new ServerboundPlayerActionPacket(ServerboundPlayerActionPacket.Action.STOP_DESTROY_BLOCK, blockPos, BlockUtils.getDirection(blockPos), sequence)); } else { @@ -532,7 +532,7 @@ private boolean isOutOfRange(BlockPos blockPos) { Vec3 pos = Vec3.atCenterOf(blockPos); ClipContext clipContext = new ClipContext(mc.player.getEyePosition(), pos, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, mc.player); BlockHitResult result = mc.level.clip(clipContext); - if (result == null || !result.getBlockPos().equals(blockPos)) + if (!result.getBlockPos().equals(blockPos)) return !PlayerUtils.isWithin(pos, wallsRange.get()); return false; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java index 3373f3f533e..9a99e4e32e2 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/world/VeinMiner.java @@ -221,7 +221,7 @@ public boolean shouldRemove() { public void mine() { if (!mining) { - mc.player.swing(InteractionHand.MAIN_HAND); + mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); mining = true; } if (rotate.get()) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java index 05c5cee890d..19490b77108 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/OutlineRenderCommandQueue.java @@ -15,13 +15,13 @@ import net.minecraft.client.renderer.block.MovingBlockRenderState; import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; import net.minecraft.client.renderer.entity.state.EntityRenderState; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; +import net.minecraft.client.renderer.feature.phase.TranslucentFeatureRenderPhase; import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.state.level.CameraRenderState; import net.minecraft.client.renderer.state.level.QuadParticleRenderState; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.client.resources.model.geometry.BakedQuad; +import net.minecraft.client.renderer.texture.UvMapping; +import net.minecraft.client.resources.model.geometry.ItemQuads; import net.minecraft.network.chat.Component; import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.item.ItemDisplayContext; @@ -44,11 +44,15 @@ public void setColor(Color color) { @Override public @NonNull SubmitNodeCollection order(int i) { - return submitsPerOrder.computeIfAbsent(i, _ -> new OutlineBatchingRenderCommandQueue()); + return submitsPerOrder.computeIfAbsent(i, _ -> new OutlineBatchingRenderCommandQueue(true, new TranslucentFeatureRenderPhase())); } @NullMarked private class OutlineBatchingRenderCommandQueue extends SubmitNodeCollection { + public OutlineBatchingRenderCommandQueue(boolean useImprovedTransparency, TranslucentFeatureRenderPhase seeThrough) { + super(useImprovedTransparency, seeThrough); + } + @Override public void submitShadow(PoseStack poseStack, float shadowRadius, List shadowPieces) { } @@ -70,13 +74,13 @@ public void submitLeash(PoseStack poseStack, EntityRenderState.LeashState leashS } @Override - public void submitModel(Model model, S state, PoseStack poseStack, RenderType renderType, int lightCoords, int overlayCoords, int tintedColor, @Nullable TextureAtlasSprite sprite, int outlineColor, ModelFeatureRenderer.@Nullable CrumblingOverlay crumblingOverlay) { - super.submitModel(model, state, poseStack, renderType, lightCoords, overlayCoords, color, sprite, color, crumblingOverlay); + public void submitModel(Model model, S state, PoseStack poseStack, RenderType renderType, int lightCoords, int overlayCoords, int tintedColor, @Nullable UvMapping uvMapping, int outlineColor) { + super.submitModel(model, state, poseStack, renderType, lightCoords, overlayCoords, tintedColor, uvMapping, color); } @Override - public void submitModelPart(ModelPart part, PoseStack poseStack, RenderType renderType, int lightCoords, int overlayCoords, @Nullable TextureAtlasSprite sprite, int tintedColor, ModelFeatureRenderer.@Nullable CrumblingOverlay crumblingOverlay, int outlineColor) { - super.submitModelPart(part, poseStack, renderType, lightCoords, overlayCoords, sprite, color, crumblingOverlay, color); + public void submitModelPart(final ModelPart modelPart, final PoseStack poseStack, final RenderType renderType, final int lightCoords, final int overlayCoords, final @Nullable UvMapping uvMapping, final int tintedColor, final int outlineColor) { + super.submitModelPart(modelPart, poseStack, renderType, lightCoords, overlayCoords, uvMapping, tintedColor, color); } @Override @@ -90,11 +94,11 @@ public void submitBlockModel(PoseStack poseStack, RenderType renderType, List modelParts, int progress) { + public void submitBreakingBlockModel(PoseStack poseStack, List parts, int progress, final boolean isBlockTranslucent) { } @Override - public void submitItem(PoseStack poseStack, ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int[] tintLayers, List quads, ItemStackRenderState.FoilType foilType) { + public void submitItem(PoseStack poseStack, ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int[] tintLayers, ItemQuads quads, ItemStackRenderState.FoilType foilType) { if (tints == null || tints[0] != color) { tints = new int[]{color, color, color, color}; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java index 26c04dd5510..0564ec040db 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java @@ -276,10 +276,10 @@ public static void getItemsInContainerItem(ItemStack itemStack, ItemStack[] item DataComponentMap components = itemStack.getComponents(); if (components.has(DataComponents.CONTAINER)) { - var stacks = components.get(DataComponents.CONTAINER).allItemsCopyStream().toList(); + List stacks = components.get(DataComponents.CONTAINER).itemCopies().toList(); for (int i = 0; i < stacks.size(); i++) { - if (i >= 0 && i < items.length) items[i] = stacks.get(i); + if (i < items.length) items[i] = stacks.get(i); } } else if (components.has(DataComponents.BLOCK_ENTITY_DATA)) { TypedEntityData> blockEntityData = components.get(DataComponents.BLOCK_ENTITY_DATA); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java index 53c51ac7af9..1c98b4fb387 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/EntityUtils.java @@ -21,6 +21,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.GameType; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -105,7 +106,6 @@ public static GameType getGameMode(Player player) { return playerListEntry.getGameMode(); } - @SuppressWarnings("deprecation") // Use of AbstractBlock.AbstractBlockState#blocksMovement public static boolean isAboveWater(Entity entity) { BlockPos.MutableBlockPos blockPos = entity.blockPosition().mutable(); int bottom = mc.level.getMinY(); @@ -113,7 +113,9 @@ public static boolean isAboveWater(Entity entity) { while (blockPos.getY() > bottom) { BlockState state = mc.level.getBlockState(blockPos); - if (state.blocksMotion()) break; + // todo is there a better way to replace BlockBehaviour.BlockStateBase#blocksMotion than just copy-pasting the method body? + Block block = state.getBlock(); + if (block != Blocks.COBWEB && block != Blocks.BAMBOO_SAPLING && state.isSolid()) break; Fluid fluid = state.getFluidState().getType(); if (fluid == Fluids.WATER || fluid == Fluids.FLOWING_WATER) { diff --git a/src/main/java/meteordevelopment/meteorclient/utils/entity/simulator/ProjectileEntitySimulator.java b/src/main/java/meteordevelopment/meteorclient/utils/entity/simulator/ProjectileEntitySimulator.java index 6daaa744112..67e7c93a955 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/entity/simulator/ProjectileEntitySimulator.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/entity/simulator/ProjectileEntitySimulator.java @@ -374,7 +374,8 @@ private SimulationStep getCollision() { entity -> !entity.isSpectator() && entity.isAlive() && entity.isPickable(), getToleranceMargin(), ClipContext.Block.COLLIDER, - false + false, + true ); // prevent simulating projectiles as colliding with ourselves on the first tick of movement diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java index 28521f744ad..e69de29bb2d 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java @@ -1,25 +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; - -import com.mojang.blaze3d.platform.cursor.CursorType; -import com.mojang.blaze3d.platform.cursor.CursorTypes; - -public enum CursorStyle { - Default(CursorType.DEFAULT), - Click(CursorTypes.POINTING_HAND), - Type(CursorTypes.IBEAM); - - private final CursorType cursor; - - CursorStyle(CursorType cursor) { - this.cursor = cursor; - } - - public CursorType getCursor() { - return cursor; - } -} diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index 43dfc4f227c..0f15bd59cc0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -25,8 +25,6 @@ public enum Modifier { CONTROL(InputConstants.MOD_CONTROL), ALT(InputConstants.MOD_ALT), SUPER(InputConstants.MOD_SUPER), - CAPS_LOCK(InputConstants.MOD_CAPS_LOCK), - NUM_LOCK(InputConstants.MOD_NUM_LOCK), ; private static final Modifier[] VALUES = values(); @@ -40,11 +38,9 @@ public enum Modifier { public boolean isKeyPressed() { return switch (this) { case CONTROL -> Input.isKeyPressed(InputConstants.KEY_LCONTROL) || Input.isKeyPressed(InputConstants.KEY_RCONTROL); - case SUPER -> Input.isKeyPressed(InputConstants.KEY_LSUPER) || Input.isKeyPressed(InputConstants.KEY_RSUPER); + case SUPER -> Input.isKeyPressed(InputConstants.KEY_LGUI) || Input.isKeyPressed(InputConstants.KEY_RGUI); case ALT -> Input.isKeyPressed(InputConstants.KEY_LALT) || Input.isKeyPressed(InputConstants.KEY_RALT); case SHIFT -> Input.isKeyPressed(InputConstants.KEY_LSHIFT) || Input.isKeyPressed(InputConstants.KEY_RSHIFT); - case CAPS_LOCK -> Input.isKeyPressed(InputConstants.KEY_CAPSLOCK); - case NUM_LOCK -> Input.isKeyPressed(InputConstants.KEY_NUMLOCK); }; } @@ -184,7 +180,7 @@ private boolean modifiersPressed() { } private boolean isKeyMod(InputConstants.Key key) { - return key.getValue() >= InputConstants.KEY_LSHIFT && key.getValue() <= InputConstants.KEY_RSUPER; + return key.getValue() >= InputConstants.KEY_LCONTROL && key.getValue() <= InputConstants.KEY_RGUI; } @Override @@ -203,8 +199,6 @@ public String toString() { if (modifiers.contains(Modifier.SUPER)) label.append("Cmd + "); if (modifiers.contains(Modifier.ALT)) label.append("Alt + "); if (modifiers.contains(Modifier.SHIFT)) label.append("Shift + "); - if (modifiers.contains(Modifier.CAPS_LOCK)) label.append("Caps Lock + "); - if (modifiers.contains(Modifier.NUM_LOCK)) label.append("Num Lock + "); label.append(key.getDisplayName().getString()); return label.toString(); @@ -270,7 +264,7 @@ public Keybind fromTag(CompoundTag tag) { } private static InputConstants.Key keyboard(int key) { - return InputConstants.Type.KEYSYM.getOrCreate(key); + return InputConstants.Type.KEYBOARD.getOrCreate(key); } private static InputConstants.Key mouse(int button) { 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 eb3d6e96db5..9620bebec0e 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/Input.java @@ -5,19 +5,20 @@ package meteordevelopment.meteorclient.utils.misc.input; +import com.mojang.blaze3d.platform.InputConstants; +import com.mojang.blaze3d.platform.cursor.CursorType; +import com.mojang.blaze3d.platform.cursor.CursorTypes; import meteordevelopment.meteorclient.gui.GuiKeyEvents; import meteordevelopment.meteorclient.mixin.KeyMappingAccessor; -import meteordevelopment.meteorclient.utils.misc.CursorStyle; import net.minecraft.client.KeyMapping; -import com.mojang.blaze3d.platform.InputConstants; - -import static meteordevelopment.meteorclient.MeteorClient.mc; public class Input { private static final boolean[] keys = new boolean[512]; private static final boolean[] buttons = new boolean[16]; - private static CursorStyle lastCursorStyle = CursorStyle.Default; + private static CursorType lastCursorStyle = CursorTypes.ARROW; + + private static final int[] MODIFIER_GROUPS = {InputConstants.MOD_SHIFT, InputConstants.MOD_CONTROL, InputConstants.MOD_ALT, InputConstants.MOD_SUPER}; private Input() { } @@ -54,19 +55,35 @@ public static boolean isButtonPressed(int button) { return button < buttons.length && buttons[button]; } - public static void setCursorStyle(CursorStyle style) { + public static void setCursorStyle(CursorType style) { if (lastCursorStyle != style) { - style.getCursor().select(mc.getWindow()); + style.select(); lastCursorStyle = style; } } + /** + * Whether exactly the modifiers in {@code mask} are held. SDL reports the left and right + * key of each modifier as separate bits and carries the Num Lock and Caps Lock state in + * every event, so comparing {@code modifiers} directly against a {@code MOD_*} constant + * never matches. + */ + public static boolean modifiersMatch(int modifiers, int mask) { + modifiers &= ~(InputConstants.MOD_CAPS_LOCK | InputConstants.MOD_NUM_LOCK); + + for (int group : MODIFIER_GROUPS) { + if ((mask & group) != 0 && (modifiers & group) == 0) return false; + } + + return (modifiers & ~mask) == 0; + } + public static int getModifier(int key) { return switch (key) { case InputConstants.KEY_LSHIFT, InputConstants.KEY_RSHIFT -> InputConstants.MOD_SHIFT; case InputConstants.KEY_LCONTROL, InputConstants.KEY_RCONTROL -> InputConstants.MOD_CONTROL; case InputConstants.KEY_LALT, InputConstants.KEY_RALT -> InputConstants.MOD_ALT; - case InputConstants.KEY_LSUPER, InputConstants.KEY_RSUPER -> InputConstants.MOD_SUPER; + case InputConstants.KEY_LGUI, InputConstants.KEY_RGUI -> InputConstants.MOD_SUPER; default -> 0; }; } 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 aec7375bbd6..979b516f8e0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -12,8 +12,8 @@ public class KeyBinds { private static final KeyMapping.Category CATEGORY = KeyMapping.Category.register(MeteorClient.identifier("meteor-client")); - public static KeyMapping OPEN_GUI = new KeyMapping("key.meteor-client.open-gui", InputConstants.Type.KEYSYM, InputConstants.KEY_RSHIFT, CATEGORY); - public static KeyMapping OPEN_COMMANDS = new KeyMapping("key.meteor-client.open-commands", InputConstants.Type.KEYSYM, InputConstants.KEY_PERIOD, CATEGORY); + public static KeyMapping OPEN_GUI = new KeyMapping("key.meteor-client.open-gui", InputConstants.Type.KEYBOARD, InputConstants.KEY_RSHIFT, CATEGORY); + public static KeyMapping OPEN_COMMANDS = new KeyMapping("key.meteor-client.open-commands", InputConstants.Type.KEYBOARD, InputConstants.KEY_PERIOD, CATEGORY); private KeyBinds() { } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java index 6a4a6599a38..265d3085cee 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/network/PacketUtils.java @@ -191,7 +191,7 @@ public class PacketUtils { builder.put("ServerboundSignUpdatePacket", GamePacketTypes.SERVERBOUND_SIGN_UPDATE); builder.put("ServerboundSpectatorActionPacket", GamePacketTypes.SERVERBOUND_SPECTATOR_ACTION); builder.put("ServerboundStatusRequestPacket", StatusPacketTypes.SERVERBOUND_STATUS_REQUEST); - builder.put("ServerboundSwingPacket", GamePacketTypes.SERVERBOUND_SWING); + builder.put("ServerboundSwingPacket", GamePacketTypes.SERVERBOUND_PUNCH); builder.put("ServerboundTeleportToEntityPacket", GamePacketTypes.SERVERBOUND_TELEPORT_TO_ENTITY); builder.put("ServerboundTestInstanceBlockActionPacket", GamePacketTypes.SERVERBOUND_TEST_INSTANCE_BLOCK_ACTION); builder.put("ServerboundUseItemOnPacket", GamePacketTypes.SERVERBOUND_USE_ITEM_ON); diff --git a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java index 11119875814..e98dcbbb77b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/player/PlayerUtils.java @@ -206,7 +206,7 @@ else if (entity instanceof Player player && !Friends.get().isFriend(player) && i } // Check for beds if in nether - if (mc.level.environmentAttributes().getDimensionValue(EnvironmentAttributes.BED_RULE).explodes()) { + if (mc.level.environmentAttributes().getDimensionValue(EnvironmentAttributes.BED_RULE).destroyOnUse()) { BlockPos playerPos = mc.player.blockPosition(); int range = 6; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java index 80dd3a84485..4eea7a7533b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/CustomBannerGuiElementRenderer.java @@ -27,12 +27,12 @@ public CustomBannerGuiElementRenderer(SpriteGetter sprites) { return CustomBannerGuiElementRenderState.class; } - protected void renderToTexture(CustomBannerGuiElementRenderState state, PoseStack matrixStack, @NonNull SubmitNodeCollector submitNodeCollector) { + protected void renderToTexture(CustomBannerGuiElementRenderState state, PoseStack poseStack, @NonNull SubmitNodeCollector submitNodeCollector) { Minecraft.getInstance().gameRenderer.lighting().setupFor(Lighting.Entry.ITEMS_FLAT); - matrixStack.translate(0.0F, 0.25F, 0.0F); + poseStack.translate(0.0F, 0.25F, 0.0F); BannerRenderer.submitPatterns( this.sprites, - matrixStack, + poseStack, submitNodeCollector, 15728880, OverlayTexture.NO_OVERLAY, @@ -40,8 +40,7 @@ protected void renderToTexture(CustomBannerGuiElementRenderState state, PoseStac 0.0F, true, state.baseColor(), - state.resultBannerPatterns(), - null + state.resultBannerPatterns() ); } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/MeshBuilderVertexConsumerProvider.java b/src/main/java/meteordevelopment/meteorclient/utils/render/MeshBuilderVertexConsumerProvider.java index b128e53afba..d92af6c9008 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/MeshBuilderVertexConsumerProvider.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/MeshBuilderVertexConsumerProvider.java @@ -60,6 +60,11 @@ public VertexConsumer setUv2(int u, int v) { return this; } + @Override + public VertexConsumer setUv3(float u, float v) { + return this; + } + public VertexConsumer setNormal(float x, float y, float z) { return this; } @@ -156,6 +161,11 @@ public void setOffset(int offsetX, int offsetY, int offsetZ) { return this; } + @Override + public VertexConsumer setUv3(float u, float v) { + return this; + } + @Override public @NonNull VertexConsumer setNormal(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 b86fd7d0eb0..22c5bac16df 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PeekScreen.java @@ -5,6 +5,7 @@ package meteordevelopment.meteorclient.utils.render; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.render.BetterTooltips; import meteordevelopment.meteorclient.utils.Utils; @@ -20,7 +21,6 @@ import net.minecraft.world.inventory.ShulkerBoxMenu; import net.minecraft.world.item.ItemStack; import org.jspecify.annotations.NonNull; -import com.mojang.blaze3d.platform.InputConstants; import static meteordevelopment.meteorclient.MeteorClient.mc; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/PlayerHeadTexture.java b/src/main/java/meteordevelopment/meteorclient/utils/render/PlayerHeadTexture.java index e370a57d34d..9b9e25ee209 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/PlayerHeadTexture.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/PlayerHeadTexture.java @@ -1,8 +1,8 @@ package meteordevelopment.meteorclient.utils.render; -import com.mojang.blaze3d.GpuFormat; import com.mojang.blaze3d.platform.TextureUtil; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.textures.FilterMode; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.renderer.Texture; import meteordevelopment.meteorclient.utils.network.Http; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java index 3052b4ec259..6e296f1739d 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/SimpleBlockRenderer.java @@ -14,12 +14,13 @@ import net.minecraft.client.renderer.block.dispatch.BlockStateModelPart; import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; import net.minecraft.client.renderer.blockentity.state.BlockEntityRenderState; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; +import net.minecraft.client.renderer.feature.phase.TranslucentFeatureRenderPhase; import net.minecraft.client.renderer.item.ItemStackRenderState; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.renderer.rendertype.RenderTypes; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.UvMapping; import net.minecraft.client.resources.model.geometry.BakedQuad; +import net.minecraft.client.resources.model.geometry.ItemQuads; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.RandomSource; @@ -53,9 +54,9 @@ public SubmitNodeCollection order(int i) { } }; - private static final SubmitNodeCollection MESH_NODES = new SubmitNodeCollection() { + private static final SubmitNodeCollection MESH_NODES = new SubmitNodeCollection(true, new TranslucentFeatureRenderPhase()) { @Override - public void submitModel(Model model, S state, PoseStack poseStack, RenderType renderType, int lightCoords, int overlayCoords, int tintedColor, @Nullable TextureAtlasSprite sprite, int outlineColor, ModelFeatureRenderer.@Nullable CrumblingOverlay crumblingOverlay) { + public void submitModel(final Model model, final S state, final PoseStack poseStack, final RenderType renderType, final int lightCoords, final int overlayCoords, final int tintedColor, final @Nullable UvMapping uvMapping, final int outlineColor) { if (CONSUMER.isBound()) { model.setupAnim(state); model.renderToBuffer(poseStack, CONSUMER.get(), lightCoords, overlayCoords, tintedColor); @@ -63,7 +64,7 @@ public void submitModel(Model model, S state, PoseStack poseStack } @Override - public void submitItem(PoseStack poseStack, ItemDisplayContext displayContext, int lightCoords, int overlayCoords, int outlineColor, int[] tintLayers, List quads, ItemStackRenderState.FoilType foilType) { + public void submitItem(final PoseStack poseStack, final ItemDisplayContext displayContext, final int lightCoords, final int overlayCoords, final int outlineColor, final int[] tintLayers, final ItemQuads quads, final ItemStackRenderState.FoilType foilType) { } }; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java index 948dc348081..5774d06d7ec 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/WireframeEntityRenderer.java @@ -16,13 +16,13 @@ import net.minecraft.client.renderer.SubmitNodeStorage; import net.minecraft.client.renderer.entity.EntityRenderer; import net.minecraft.client.renderer.entity.state.EntityRenderState; -import net.minecraft.client.renderer.feature.ModelFeatureRenderer; import net.minecraft.client.renderer.rendertype.RenderType; -import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.UvMapping; import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec3; import org.jspecify.annotations.NonNull; +import org.jspecify.annotations.Nullable; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -80,9 +80,8 @@ public void submitModel( int lightCoords, int overlayCoords, int tintedColor, - TextureAtlasSprite sprite, - int outlineColor, - ModelFeatureRenderer.CrumblingOverlay crumblingOverlay + final @Nullable UvMapping uvMapping, + int outlineColor ) { if (renderType.isOutline()) return; @@ -152,6 +151,11 @@ private static class MyVertexConsumer implements VertexConsumer { return this; } + @Override + public VertexConsumer setUv3(float u, float v) { + return this; + } + @Override public @NonNull VertexConsumer setNormal(float x, float y, float z) { return this; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java index 22e43dacd1f..5e9e346dc66 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java @@ -5,11 +5,12 @@ package meteordevelopment.meteorclient.utils.render.postprocess; -import com.mojang.blaze3d.GpuFormat; import com.mojang.blaze3d.buffers.Std140Builder; import com.mojang.blaze3d.buffers.Std140SizeCalculator; import com.mojang.blaze3d.platform.TextureUtil; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.textures.FilterMode; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.events.game.ResourcePacksReloadedEvent; import meteordevelopment.meteorclient.renderer.MeshRenderer; @@ -20,7 +21,8 @@ import meteordevelopment.meteorclient.utils.PostInit; import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.orbit.EventHandler; -import net.minecraft.client.renderer.DynamicUniformStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; import net.minecraft.server.packs.resources.Resource; import net.minecraft.world.entity.Entity; import org.jspecify.annotations.NonNull; @@ -90,7 +92,7 @@ private static void onResourcePacksReloaded(ResourcePacksReloadedEvent event) { protected void setupPass(MeshRenderer renderer) { Color color = chams.shaderColor.get(); - renderer.uniform("ImageData", UNIFORM_STORAGE.writeUniform(new UniformData( + renderer.uniform("ImageData", UNIFORM_STORAGE.writeData(new UniformData( color.r / 255f, color.g / 255f, color.b / 255f, color.a / 255f ))); @@ -117,13 +119,13 @@ public boolean shouldDraw(Entity entity) { .putVec4() .get(); - private static final DynamicUniformStorage UNIFORM_STORAGE = new DynamicUniformStorage<>("Meteor - Image UBO", UNIFORM_SIZE, 16); + private static final DynamicGpuDataStorage UNIFORM_STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Image UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { UNIFORM_STORAGE.endFrame(); } - private record UniformData(float r, float g, float b, float a) implements DynamicUniformStorage.DynamicUniform { + private record UniformData(float r, float g, float b, float a) implements DynamicGpuDataStorage.DynamicGpuData { @Override public void write(@NonNull ByteBuffer buffer) { Std140Builder.intoBuffer(buffer) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java index 861b56283ae..72b2208a4c5 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/EntityShader.java @@ -1,6 +1,6 @@ package meteordevelopment.meteorclient.utils.render.postprocess; -import com.mojang.blaze3d.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; import meteordevelopment.meteorclient.mixininterface.ILevelRenderer; import net.minecraft.world.entity.Entity; diff --git a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java index f62321dda9f..dbca96e7a64 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java @@ -5,10 +5,12 @@ package meteordevelopment.meteorclient.utils.render.postprocess; -import com.mojang.blaze3d.buffers.GpuBufferSlice; import com.mojang.blaze3d.buffers.Std140Builder; import com.mojang.blaze3d.buffers.Std140SizeCalculator; -import net.minecraft.client.renderer.DynamicUniformStorage; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; +import net.minecraft.client.renderer.DynamicGpuDataStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; import org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; @@ -21,18 +23,18 @@ public class OutlineUniforms { .putFloat() .get(); - private static final DynamicUniformStorage STORAGE = new DynamicUniformStorage<>("Meteor - Outline UBO", UNIFORM_SIZE, 16); + private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Outline UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { STORAGE.endFrame(); } public static GpuBufferSlice write(int width, float fillOpacity, int shapeMode, float glowMultiplier) { - return STORAGE.writeUniform(new Data(width, fillOpacity, shapeMode, glowMultiplier)); + return STORAGE.writeData(new Data(width, fillOpacity, shapeMode, glowMultiplier)); } private record Data(int width, float fillOpacity, int shapeMode, - float glowMultiplier) implements DynamicUniformStorage.DynamicUniform { + float glowMultiplier) implements DynamicGpuDataStorage.DynamicGpuData { @Override public void write(@NonNull ByteBuffer buffer) { Std140Builder.intoBuffer(buffer) 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 55ae2766866..43029b13e51 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -1,17 +1,20 @@ package meteordevelopment.meteorclient.utils.render.postprocess; -import com.mojang.blaze3d.GpuFormat; +import com.mojang.blaze3d.Blaze3D; import com.mojang.blaze3d.buffers.Std140Builder; import com.mojang.blaze3d.buffers.Std140SizeCalculator; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.pipeline.RenderTarget; import com.mojang.blaze3d.pipeline.TextureTarget; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.textures.FilterMode; +import com.mojang.renderpearl.api.GpuFormat; +import com.mojang.renderpearl.api.buffers.GpuBuffer; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import com.mojang.renderpearl.api.textures.FilterMode; import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.renderer.MeshRenderer; import net.minecraft.client.gui.render.GuiRenderer; -import net.minecraft.client.renderer.DynamicUniformStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; import org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; @@ -24,8 +27,8 @@ public abstract class PostProcessShader { protected PostProcessShader(RenderPipeline pipeline) { this.pipeline = pipeline; - this.framebuffer = new TextureTarget(MeteorClient.NAME + " PostProcessShader " + this.getClass().getSimpleName(), mc.getWindow().getWidth(), mc.getWindow().getHeight(), true, - GpuFormat.RGBA8_UNORM); + this.framebuffer = new TextureTarget(MeteorClient.NAME + " PostProcessShader " + this.getClass().getSimpleName(), mc.getWindow().getWidth(), mc.getWindow().getHeight(), + GpuFormat.RGBA8_UNORM, GpuFormat.D32_FLOAT); } protected abstract boolean shouldDraw(); @@ -60,9 +63,9 @@ public void render() { .attachments(mc.gameRenderer.mainRenderTarget()) .pipeline(pipeline) .fullscreen() - .uniform("PostData", UNIFORM_STORAGE.writeUniform(new UniformData( + .uniform("PostData", UNIFORM_STORAGE.writeData(new UniformData( (float) mc.getWindow().getWidth(), (float) mc.getWindow().getHeight(), - (float) (mc.getFrameTimeNs() / 1e9) + (float) Blaze3D.getTime() ))) .sampler("u_Texture", framebuffer.getColorTextureView(), RenderSystem.getSamplerCache().getClampToEdge(FilterMode.NEAREST)); @@ -83,13 +86,14 @@ public void onResized(int width, int height) { .putFloat() .get(); - private static final DynamicUniformStorage UNIFORM_STORAGE = new DynamicUniformStorage<>("Meteor - Post UBO", UNIFORM_SIZE, 16); + // todo what should usage be? not just here but everywhere else also + private static final DynamicGpuDataStorage UNIFORM_STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Post UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { UNIFORM_STORAGE.endFrame(); } - private record UniformData(float sizeX, float sizeY, float time) implements DynamicUniformStorage.DynamicUniform { + private record UniformData(float sizeX, float sizeY, float time) implements DynamicGpuDataStorage.DynamicGpuData { @Override public void write(@NonNull ByteBuffer buffer) { Std140Builder.intoBuffer(buffer) diff --git a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BundleTooltipComponent.java b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BundleTooltipComponent.java index 6796cbce47a..b21ff54db6f 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BundleTooltipComponent.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/tooltip/BundleTooltipComponent.java @@ -123,7 +123,7 @@ private void drawSelectedItemTooltip(Font font, GuiGraphicsExtractor graphics, i int j = x + width / 2 - 12; ClientTooltipComponent tooltipComponent = ClientTooltipComponent.create(text.getVisualOrderText()); graphics.tooltip( - font, List.of(tooltipComponent), j - i / 2, y - 37, DefaultTooltipPositioner.INSTANCE, itemStack.get(DataComponents.TOOLTIP_STYLE) + font, List.of(tooltipComponent), j - i / 2, y - 37, DefaultTooltipPositioner.INSTANCE, itemStack.get(DataComponents.TOOLTIP_STYLE), false ); } } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java index 80f3c9551b5..9b08a06b62b 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/world/BlockUtils.java @@ -19,7 +19,7 @@ import meteordevelopment.orbit.EventPriority; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; -import net.minecraft.network.protocol.game.ServerboundSwingPacket; +import net.minecraft.network.protocol.game.ServerboundPunchPacket; import net.minecraft.tags.FluidTags; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; @@ -137,8 +137,8 @@ public static void interact(BlockHitResult blockHitResult, InteractionHand hand, InteractionResult result = mc.gameMode.useItemOn(mc.player, hand, blockHitResult); if (result.consumesAction()) { - if (swing) mc.player.swing(hand); - else mc.getConnection().send(new ServerboundSwingPacket(hand)); + if (swing) mc.player.swing(hand, mc.player.getItemInHand(hand).getInteractAnimation(), false); + else mc.getConnection().send(new ServerboundPunchPacket()); } mc.player.setShiftKeyDown(wasSneaking); @@ -240,7 +240,7 @@ public static boolean breakBlock(BlockPos blockPos, boolean swing) { if (!canBreak(blockPos, mc.level.getBlockState(blockPos))) return false; // Creating new instance of block pos because minecraft assigns the parameter to a field, and we don't want it to change when it has been stored in a field somewhere - BlockPos pos = blockPos instanceof BlockPos.MutableBlockPos ? new BlockPos(blockPos) : blockPos; + BlockPos pos = blockPos instanceof BlockPos.MutableBlockPos ? blockPos.immutable() : blockPos; InstantRebreak ir = Modules.get().get(InstantRebreak.class); if (ir != null && ir.isActive() && ir.blockPos.equals(pos) && ir.shouldMine()) { @@ -252,8 +252,8 @@ public static boolean breakBlock(BlockPos blockPos, boolean swing) { mc.gameMode.continueDestroyBlock(pos, getDirection(blockPos)); else mc.gameMode.startDestroyBlock(pos, getDirection(blockPos)); - if (swing) mc.player.swing(InteractionHand.MAIN_HAND); - else mc.getConnection().send(new ServerboundSwingPacket(InteractionHand.MAIN_HAND)); + if (swing) mc.player.swing(InteractionHand.MAIN_HAND, mc.player.getMainHandItem().getAttackAnimation(), false); + else mc.getConnection().send(new ServerboundPunchPacket()); breaking = true; breakingThisTick = true; diff --git a/src/main/resources/assets/meteor-client/shaders/passthrough.vert b/src/main/resources/assets/meteor-client/shaders/blur.vsh similarity index 61% rename from src/main/resources/assets/meteor-client/shaders/passthrough.vert rename to src/main/resources/assets/meteor-client/shaders/blur.vsh index 334da5f4825..6de00d66ac6 100644 --- a/src/main/resources/assets/meteor-client/shaders/passthrough.vert +++ b/src/main/resources/assets/meteor-client/shaders/blur.vsh @@ -1,10 +1,11 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require precision lowp float; layout (location = 0) in vec2 Position; -out vec2 uv; +layout (location = 0) out vec2 uv; void main() { gl_Position = vec4(Position, 0.0, 1.0); diff --git a/src/main/resources/assets/meteor-client/shaders/blur_down.frag b/src/main/resources/assets/meteor-client/shaders/blur_down.fsh similarity index 79% rename from src/main/resources/assets/meteor-client/shaders/blur_down.frag rename to src/main/resources/assets/meteor-client/shaders/blur_down.fsh index 1b1fcbe0847..25040e51cce 100644 --- a/src/main/resources/assets/meteor-client/shaders/blur_down.frag +++ b/src/main/resources/assets/meteor-client/shaders/blur_down.fsh @@ -1,9 +1,10 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require precision lowp float; -in vec2 uv; -out vec4 color; +layout (location = 0) in vec2 uv; +layout (location = 0) out vec4 color; uniform sampler2D u_Texture; diff --git a/src/main/resources/assets/meteor-client/shaders/blur_up.frag b/src/main/resources/assets/meteor-client/shaders/blur_up.fsh similarity index 85% rename from src/main/resources/assets/meteor-client/shaders/blur_up.frag rename to src/main/resources/assets/meteor-client/shaders/blur_up.fsh index 45a133ce227..b46aeee324e 100644 --- a/src/main/resources/assets/meteor-client/shaders/blur_up.frag +++ b/src/main/resources/assets/meteor-client/shaders/blur_up.fsh @@ -1,9 +1,10 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require precision lowp float; -in vec2 uv; -out vec4 color; +layout (location = 0) in vec2 uv; +layout (location = 0) out vec4 color; uniform sampler2D u_Texture; diff --git a/src/main/resources/assets/meteor-client/shaders/passthrough.frag b/src/main/resources/assets/meteor-client/shaders/passthrough.frag deleted file mode 100644 index f3483ed833d..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/passthrough.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 330 core - -precision lowp float; - -in vec2 uv; -out vec4 color; - -uniform sampler2D u_Texture; - -void main() { - color = texture(u_Texture, uv); -} diff --git a/src/main/resources/assets/meteor-client/shaders/passthrough.fsh b/src/main/resources/assets/meteor-client/shaders/passthrough.fsh new file mode 100644 index 00000000000..78f37aca679 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/passthrough.fsh @@ -0,0 +1,13 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +precision lowp float; + +layout (location = 0) in vec2 uv; +layout (location = 0) out vec4 color; + +uniform sampler2D u_Texture; + +void main() { + color = texture(u_Texture, uv); +} diff --git a/src/main/resources/assets/meteor-client/shaders/blur.vert b/src/main/resources/assets/meteor-client/shaders/passthrough.vsh similarity index 61% rename from src/main/resources/assets/meteor-client/shaders/blur.vert rename to src/main/resources/assets/meteor-client/shaders/passthrough.vsh index 334da5f4825..6de00d66ac6 100644 --- a/src/main/resources/assets/meteor-client/shaders/blur.vert +++ b/src/main/resources/assets/meteor-client/shaders/passthrough.vsh @@ -1,10 +1,11 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require precision lowp float; layout (location = 0) in vec2 Position; -out vec2 uv; +layout (location = 0) out vec2 uv; void main() { gl_Position = vec4(Position, 0.0, 1.0); diff --git a/src/main/resources/assets/meteor-client/shaders/pos_color.frag b/src/main/resources/assets/meteor-client/shaders/pos_color.frag deleted file mode 100644 index 567156e0fb2..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/pos_color.frag +++ /dev/null @@ -1,9 +0,0 @@ -#version 330 core - -out vec4 color; - -in vec4 v_Color; - -void main() { - color = v_Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_color.fsh b/src/main/resources/assets/meteor-client/shaders/pos_color.fsh new file mode 100644 index 00000000000..3301fd7b1c9 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/pos_color.fsh @@ -0,0 +1,10 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +layout (location = 0) out vec4 color; + +layout (location = 0) in vec4 v_Color; + +void main() { + color = v_Color; +} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_color.vert b/src/main/resources/assets/meteor-client/shaders/pos_color.vert deleted file mode 100644 index a5cc401b772..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/pos_color.vert +++ /dev/null @@ -1,17 +0,0 @@ -#version 330 core - -layout (location = 0) in vec4 Position; -layout (location = 1) in vec4 Color; - -layout (std140) uniform MeshData { - mat4 u_Proj; - mat4 u_ModelView; -}; - -out vec4 v_Color; - -void main() { - gl_Position = u_Proj * u_ModelView * Position; - - v_Color = Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_color.vsh b/src/main/resources/assets/meteor-client/shaders/pos_color.vsh new file mode 100644 index 00000000000..77298e42dff --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/pos_color.vsh @@ -0,0 +1,26 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +#ifdef UI + #define pos_vec vec2 + #define pos_vec_to_vec4(vec) vec4(vec, 0.0, 1.0) +#else + #define pos_vec vec3 + #define pos_vec_to_vec4(vec) vec4(vec, 1.0) +#endif + +layout (location = 0) in pos_vec Position; +layout (location = 1) in vec4 Color; + +layout (std140) uniform MeshData { + mat4 u_Proj; + mat4 u_ModelView; +}; + +layout (location = 0) out vec4 v_Color; + +void main() { + gl_Position = u_Proj * u_ModelView * pos_vec_to_vec4(Position); + + v_Color = Color; +} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.frag b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.frag deleted file mode 100644 index 1aa3d3eff09..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 330 core - -out vec4 color; - -uniform sampler2D u_Texture; - -in vec2 v_TexCoord; -in vec4 v_Color; - -void main() { - color = texture(u_Texture, v_TexCoord) * v_Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.fsh b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.fsh new file mode 100644 index 00000000000..5acc8e85228 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.fsh @@ -0,0 +1,13 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +layout (location = 0) out vec4 color; + +uniform sampler2D u_Texture; + +layout (location = 0) in vec2 v_TexCoord; +layout (location = 1) in vec4 v_Color; + +void main() { + color = texture(u_Texture, v_TexCoord) * v_Color; +} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vert b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vert deleted file mode 100644 index 429facab50b..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vert +++ /dev/null @@ -1,20 +0,0 @@ -#version 330 core - -layout (location = 0) in vec4 Position; -layout (location = 1) in vec2 Texture; -layout (location = 2) in vec4 Color; - -layout (std140) uniform MeshData { - mat4 u_Proj; - mat4 u_ModelView; -}; - -out vec2 v_TexCoord; -out vec4 v_Color; - -void main() { - gl_Position = u_Proj * u_ModelView * Position; - - v_TexCoord = Texture; - v_Color = Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh new file mode 100644 index 00000000000..95ead1a0638 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh @@ -0,0 +1,21 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +layout (location = 0) in vec2 Position; +layout (location = 1) in vec2 Texture; +layout (location = 2) in vec4 Color; + +layout (std140) uniform MeshData { + mat4 u_Proj; + mat4 u_ModelView; +}; + +layout (location = 0) out vec2 v_TexCoord; +layout (location = 1) out vec4 v_Color; + +void main() { + gl_Position = u_Proj * u_ModelView * vec4(Position, 0.0, 1.0); + + v_TexCoord = Texture; + v_Color = Color; +} diff --git a/src/main/resources/assets/meteor-client/shaders/post-process/base.vert b/src/main/resources/assets/meteor-client/shaders/post-process/base.vsh similarity index 62% rename from src/main/resources/assets/meteor-client/shaders/post-process/base.vert rename to src/main/resources/assets/meteor-client/shaders/post-process/base.vsh index b1cd1bcf16c..0fd857bf574 100644 --- a/src/main/resources/assets/meteor-client/shaders/post-process/base.vert +++ b/src/main/resources/assets/meteor-client/shaders/post-process/base.vsh @@ -1,4 +1,5 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require layout (location = 0) in vec2 Position; @@ -7,8 +8,8 @@ layout (std140) uniform PostData { float u_Time; }; -out vec2 v_TexCoord; -out vec2 v_OneTexel; +layout (location = 0) out vec2 v_TexCoord; +layout (location = 1) out vec2 v_OneTexel; void main() { gl_Position = vec4(Position, 0.0, 1.0); diff --git a/src/main/resources/assets/meteor-client/shaders/post-process/image.frag b/src/main/resources/assets/meteor-client/shaders/post-process/image.fsh similarity index 57% rename from src/main/resources/assets/meteor-client/shaders/post-process/image.frag rename to src/main/resources/assets/meteor-client/shaders/post-process/image.fsh index 5116ad6a553..6b795f96d1c 100644 --- a/src/main/resources/assets/meteor-client/shaders/post-process/image.frag +++ b/src/main/resources/assets/meteor-client/shaders/post-process/image.fsh @@ -1,7 +1,8 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require -in vec2 v_TexCoord; -in vec2 v_OneTexel; +layout (location = 0) in vec2 v_TexCoord; +layout (location = 1) in vec2 v_OneTexel; uniform sampler2D u_Texture; uniform sampler2D u_TextureI; @@ -10,7 +11,7 @@ layout (std140) uniform ImageData { vec4 u_Color; }; -out vec4 color; +layout (location = 0) out vec4 color; void main() { if (texture(u_Texture, v_TexCoord).a == 0.0) discard; diff --git a/src/main/resources/assets/meteor-client/shaders/post-process/outline.frag b/src/main/resources/assets/meteor-client/shaders/post-process/outline.fsh similarity index 86% rename from src/main/resources/assets/meteor-client/shaders/post-process/outline.frag rename to src/main/resources/assets/meteor-client/shaders/post-process/outline.fsh index bcbacbd8b0a..048de677581 100644 --- a/src/main/resources/assets/meteor-client/shaders/post-process/outline.frag +++ b/src/main/resources/assets/meteor-client/shaders/post-process/outline.fsh @@ -1,7 +1,8 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require -in vec2 v_TexCoord; -in vec2 v_OneTexel; +layout (location = 0) in vec2 v_TexCoord; +layout (location = 1) in vec2 v_OneTexel; uniform sampler2D u_Texture; @@ -12,7 +13,7 @@ layout (std140) uniform OutlineData { float glowMultiplier; } u_Outline; -out vec4 color; +layout (location = 0) out vec4 color; void main() { vec4 center = texture(u_Texture, v_TexCoord); diff --git a/src/main/resources/assets/meteor-client/shaders/text.frag b/src/main/resources/assets/meteor-client/shaders/text.frag deleted file mode 100644 index ceeb34e0917..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/text.frag +++ /dev/null @@ -1,12 +0,0 @@ -#version 330 core - -out vec4 color; - -uniform sampler2D u_Texture; - -in vec2 v_TexCoord; -in vec4 v_Color; - -void main() { - color = vec4(1.0, 1.0, 1.0, texture(u_Texture, v_TexCoord).r) * v_Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/text.fsh b/src/main/resources/assets/meteor-client/shaders/text.fsh new file mode 100644 index 00000000000..89f0685d991 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/text.fsh @@ -0,0 +1,13 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +layout (location = 0) out vec4 color; + +uniform sampler2D u_Texture; + +layout (location = 0) in vec2 v_TexCoord; +layout (location = 1) in vec4 v_Color; + +void main() { + color = vec4(1.0, 1.0, 1.0, texture(u_Texture, v_TexCoord).r) * v_Color; +} diff --git a/src/main/resources/assets/meteor-client/shaders/text.vert b/src/main/resources/assets/meteor-client/shaders/text.vert deleted file mode 100644 index 429facab50b..00000000000 --- a/src/main/resources/assets/meteor-client/shaders/text.vert +++ /dev/null @@ -1,20 +0,0 @@ -#version 330 core - -layout (location = 0) in vec4 Position; -layout (location = 1) in vec2 Texture; -layout (location = 2) in vec4 Color; - -layout (std140) uniform MeshData { - mat4 u_Proj; - mat4 u_ModelView; -}; - -out vec2 v_TexCoord; -out vec4 v_Color; - -void main() { - gl_Position = u_Proj * u_ModelView * Position; - - v_TexCoord = Texture; - v_Color = Color; -} diff --git a/src/main/resources/assets/meteor-client/shaders/text.vsh b/src/main/resources/assets/meteor-client/shaders/text.vsh new file mode 100644 index 00000000000..95ead1a0638 --- /dev/null +++ b/src/main/resources/assets/meteor-client/shaders/text.vsh @@ -0,0 +1,21 @@ +#version 330 +#extension GL_ARB_separate_shader_objects : require + +layout (location = 0) in vec2 Position; +layout (location = 1) in vec2 Texture; +layout (location = 2) in vec4 Color; + +layout (std140) uniform MeshData { + mat4 u_Proj; + mat4 u_ModelView; +}; + +layout (location = 0) out vec2 v_TexCoord; +layout (location = 1) out vec4 v_Color; + +void main() { + gl_Position = u_Proj * u_ModelView * vec4(Position, 0.0, 1.0); + + v_TexCoord = Texture; + v_Color = Color; +} diff --git a/src/main/resources/meteor-client-sodium.mixins.json b/src/main/resources/meteor-client-sodium.mixins.json index 05722eb99d1..d7744492e73 100644 --- a/src/main/resources/meteor-client-sodium.mixins.json +++ b/src/main/resources/meteor-client-sodium.mixins.json @@ -4,7 +4,6 @@ "compatibilityLevel": "JAVA_21", "plugin": "meteordevelopment.meteorclient.MixinPlugin", "client": [ - "MeshVertexConsumerMixin", "AbstractBlockRenderContextMixin", "SodiumBlockRendererMixin", "SodiumChunkBuilderMeshingTaskMixin", diff --git a/src/main/resources/meteor-client-viafabricplus.mixins.json b/src/main/resources/meteor-client-viafabricplus.mixins.json index 38868b7bcdb..8bc17408060 100644 --- a/src/main/resources/meteor-client-viafabricplus.mixins.json +++ b/src/main/resources/meteor-client-viafabricplus.mixins.json @@ -4,7 +4,6 @@ "compatibilityLevel": "JAVA_21", "plugin": "meteordevelopment.meteorclient.MixinPlugin", "client": [ - "GeneralSettingsMixin" ], "injectors": { "defaultRequire": 1 diff --git a/src/main/resources/meteor-client.classtweaker b/src/main/resources/meteor-client.classtweaker index 42b3247b492..66a57a1d0bc 100644 --- a/src/main/resources/meteor-client.classtweaker +++ b/src/main/resources/meteor-client.classtweaker @@ -18,17 +18,13 @@ accessible class net/minecraft/client/gui/screens/inventory/BeaconScreen$Bea # ResourceLoadStateTrackerAccessor, ReloadStateAccessor, Utils#isLoading accessible class net/minecraft/client/ResourceLoadStateTracker$ReloadState -# ExtendedRenderPipelineBuilder -accessible method com/mojang/blaze3d/pipeline/RenderPipeline$Builder ()V -accessible method com/mojang/blaze3d/pipeline/RenderPipeline$Builder withSnippet (Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet;)V - # OutlineRenderCommandQueue#order accessible field net/minecraft/client/renderer/SubmitNodeStorage submitsPerOrder Lit/unimi/dsi/fastutil/ints/Int2ObjectAVLTreeMap; # GlCommandEncoderMixin, GlDeviceMixin -accessible class com/mojang/blaze3d/opengl/GlDevice +accessible class com/mojang/renderpearl/backend/opengl/GlDevice # GlCommandEncoderMixin -accessible class com/mojang/blaze3d/opengl/GlCommandEncoder +accessible class com/mojang/renderpearl/backend/opengl/GlCommandEncoder # AutoFish#tryCatch accessible class net/minecraft/world/entity/projectile/FishingHook$FishHookState @@ -38,8 +34,12 @@ accessible method net/minecraft/client/multiplayer/MultiPlayerGameMode startP # GuiGraphicsExtractorAccessor accessible class net/minecraft/client/gui/GuiGraphicsExtractor$ScissorStack -# WireframeEntityRenderer#getBuffer -accessible field net/minecraft/client/renderer/rendertype/RenderSetup outputTarget Lnet/minecraft/client/renderer/rendertype/OutputTarget; # ProjectileEntitySimulator#hitOrDeflect accessible method net/minecraft/world/entity/projectile/Projectile shouldBounceOnWorldBorder ()Z + +# ExtendedRenderPipelineBuilder +accessible method com/mojang/renderpearl/api/pipeline/RenderPipeline$Builder ()V + +# ItemPhysics +accessible field net/minecraft/client/renderer/item/ItemStackRenderState$LayerRenderState quads Lnet/minecraft/client/resources/model/geometry/ItemQuads; diff --git a/src/main/resources/meteor-client.mixins.json b/src/main/resources/meteor-client.mixins.json index fbc6db3c47e..029c502f962 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -96,6 +96,8 @@ "FireworkRocketEntityMixin", "FireworksSparkParticleMixin", "FireworksSparkParticleSubMixin", + "FirstPersonHandsAndItemsMixin", + "FirstPersonHandsAndItemsRendererMixin", "FishingHookAccessor", "FishingHookMixin", "FluidRendererMixin", @@ -103,10 +105,10 @@ "FontMixin", "FoodDataMixin", "FriendlyByteBufMixin", + "FrontendGpuDeviceMixin", "GameRendererMixin", "GlCommandEncoderMixin", "GlDeviceMixin", - "GpuDeviceMixin", "GuiGraphicsExtractorAccessor", "GuiGraphicsExtractorMixin", "GuiMessageMixin", @@ -117,7 +119,6 @@ "HumanoidArmorLayerMixin", "ItemContainerContentsMixin", "ItemEntityRendererMixin", - "ItemInHandRendererMixin", "ItemMixin", "ItemRendererMixin", "ItemStackMixin", @@ -138,6 +139,7 @@ "LivingEntityAccessor", "LivingEntityMixin", "LivingEntityRendererMixin", + "LivingEntitySwingStateMixin", "LocalPlayerAccessor", "LocalPlayerMixin", "MapRendererMixin",