From 6ce1c2ff8aaf8deeae1a0bda8de20a2d80d2a75c Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 21 Aug 2026 01:13:12 +0100 Subject: [PATCH 1/9] Update to 26.3-snapshot-9 All rendering is broken, but as long as you have nothing doing any custom rendering you can load into a world and play fine --- gradle/libs.versions.toml | 4 +- .../meteorclient/commands/Command.java | 2 +- .../commands/commands/SaveMapCommand.java | 73 +++--- .../commands/commands/SayCommand.java | 3 +- .../gui/DefaultSettingsWidgetFactory.java | 26 +- .../meteorclient/gui/WidgetScreen.java | 25 +- .../gui/renderer/packer/TexturePacker.java | 4 +- .../gui/screens/ContainerInventoryScreen.java | 4 +- .../gui/screens/ModulesScreen.java | 8 +- .../gui/screens/ProxiesScreen.java | 29 ++- .../settings/EntityTypeListSettingScreen.java | 2 +- .../DynamicRegistryListSettingScreen.java | 2 +- .../gui/tabs/builtin/ProfilesTab.java | 66 ++--- .../gui/themes/meteor/MeteorGuiTheme.java | 4 +- .../themes/meteor/widgets/WMeteorModule.java | 8 +- .../meteorclient/gui/widgets/WTopBar.java | 4 +- .../gui/widgets/containers/WSection.java | 4 +- .../gui/widgets/containers/WView.java | 4 +- .../gui/widgets/containers/WWindow.java | 4 +- .../gui/widgets/input/WBlockPosEdit.java | 2 +- .../gui/widgets/input/WTextBox.java | 59 +++-- .../gui/widgets/pressable/WPressable.java | 6 +- .../mixin/AbstractContainerScreenMixin.java | 6 +- .../mixin/AvatarRendererMixin.java | 9 +- .../mixin/BannerRendererMixin.java | 7 +- .../mixin/BookEditScreenMixin.java | 8 +- .../mixin/BookViewScreenMixin.java | 3 +- .../mixin/ChatComponentMixin.java | 2 +- .../mixin/ClientPacketListenerMixin.java | 8 +- .../mixin/CloudRendererMixin.java | 6 +- .../mixin/EnchantTableRendererMixin.java | 5 +- .../mixin/EndCrystalRendererMixin.java | 8 +- .../mixin/EntityRendererMixin.java | 2 +- .../mixin/FirstPersonHandsAndItemsMixin.java | 60 +++++ ...FirstPersonHandsAndItemsRendererMixin.java | 64 +++++ ...Mixin.java => FrontendGpuDeviceMixin.java} | 10 +- .../meteorclient/mixin/GameRendererMixin.java | 20 +- .../mixin/GlCommandEncoderMixin.java | 32 ++- .../meteorclient/mixin/GlDeviceMixin.java | 4 +- .../mixin/GuiGraphicsExtractorMixin.java | 11 +- .../mixin/ItemInHandRendererMixin.java | 107 -------- .../meteorclient/mixin/ItemRendererMixin.java | 2 +- .../mixin/KeyboardHandlerMixin.java | 16 +- .../mixin/LevelExtractorMixin.java | 2 +- .../mixin/LevelRendererMixin.java | 20 +- .../meteorclient/mixin/LightmapMixin.java | 2 +- .../mixin/LightningBoltRendererMixin.java | 10 +- .../meteorclient/mixin/LivingEntityMixin.java | 19 +- .../mixin/LivingEntityRendererMixin.java | 9 +- .../mixin/LivingEntitySwingStateMixin.java | 26 ++ .../meteorclient/mixin/LocalPlayerMixin.java | 22 +- .../meteorclient/mixin/MinecraftAccessor.java | 6 +- .../meteorclient/mixin/MinecraftMixin.java | 2 + .../mixin/ModelBlockRendererMixin.java | 4 +- .../meteorclient/mixin/MouseHandlerMixin.java | 4 +- .../mixin/PipelineCacheAccessor.java | 20 ++ .../meteorclient/mixin/PlayerMixin.java | 10 - .../mixin/ProjectileUtilMixin.java | 2 +- .../mixin/RenderPipelineMixin.java | 2 +- .../mixin/ScreenEffectRendererMixin.java | 7 +- .../meteorclient/mixin/ScreenMixin.java | 6 +- .../mixin/ShaderManagerMixin.java | 8 +- .../meteorclient/mixin/SkyRendererMixin.java | 8 +- .../meteorclient/mixin/TitleScreenMixin.java | 4 +- .../meteorclient/mixin/VulkanDeviceMixin.java | 4 +- .../mixin/sodium/MeshVertexConsumerMixin.java | 73 +++--- .../mixininterface/IGpuDevice.java | 3 +- .../ExtendedRenderPipelineBuilder.java | 2 +- .../renderer/FixedUniformStorage.java | 12 +- .../renderer/FullScreenRenderer.java | 4 +- .../meteorclient/renderer/MeshBuilder.java | 16 +- .../meteorclient/renderer/MeshRenderer.java | 23 +- .../meteorclient/renderer/MeshUniforms.java | 11 +- .../renderer/MeteorRenderPipelines.java | 37 ++- .../renderer/MeteorVertexFormats.java | 5 +- .../meteorclient/renderer/Renderer2D.java | 4 +- .../meteorclient/renderer/Renderer3D.java | 2 +- .../meteorclient/renderer/Texture.java | 6 +- .../meteorclient/renderer/text/Font.java | 4 +- .../meteorclient/settings/FileSetting.java | 21 +- .../meteorclient/settings/KeybindSetting.java | 4 +- .../systems/accounts/Account.java | 12 +- .../accounts/types/TheAlteningAccount.java | 8 +- .../systems/hud/elements/CombatHud.java | 3 +- .../hud/elements/keyboard/KeyboardHud.java | 191 +++++++-------- .../systems/hud/screens/HudEditorScreen.java | 30 +-- .../meteorclient/systems/modules/Modules.java | 12 +- .../systems/modules/combat/AntiBed.java | 5 +- .../systems/modules/combat/AttributeSwap.java | 5 +- .../systems/modules/combat/AutoCity.java | 6 +- .../systems/modules/combat/AutoWeapon.java | 3 +- .../systems/modules/combat/BedAura.java | 8 +- .../systems/modules/combat/Burrow.java | 4 +- .../systems/modules/combat/Criticals.java | 8 +- .../systems/modules/combat/CrystalAura.java | 8 +- .../systems/modules/combat/KillAura.java | 16 +- .../systems/modules/combat/Offhand.java | 9 +- .../systems/modules/combat/Surround.java | 7 +- .../systems/modules/misc/InventoryTweaks.java | 5 +- .../systems/modules/misc/Notebot.java | 4 +- .../modules/movement/EntityControl.java | 6 +- .../systems/modules/movement/GUIMove.java | 18 +- .../systems/modules/movement/Scaffold.java | 2 +- .../movement/elytrafly/ElytraFlightMode.java | 4 +- .../systems/modules/player/AntiAFK.java | 2 +- .../systems/modules/player/GhostHand.java | 2 +- .../modules/player/InstantRebreak.java | 5 +- .../modules/player/MiddleClickExtra.java | 4 +- .../modules/render/BetterTooltips.java | 8 +- .../systems/modules/render/Blur.java | 16 +- .../systems/modules/render/CameraTweaks.java | 4 +- .../systems/modules/render/FreeLook.java | 18 +- .../systems/modules/render/Freecam.java | 5 +- .../systems/modules/render/HandView.java | 2 +- .../systems/modules/render/ItemPhysics.java | 2 +- .../systems/modules/render/Zoom.java | 4 +- .../systems/modules/world/AutoBreed.java | 2 +- .../systems/modules/world/AutoSign.java | 15 +- .../systems/modules/world/AutoSmelter.java | 9 +- .../systems/modules/world/BuildHeight.java | 4 +- .../systems/modules/world/Collisions.java | 2 +- .../systems/modules/world/EndermanLook.java | 8 +- .../systems/modules/world/Excavator.java | 4 +- .../systems/modules/world/HighwayBuilder.java | 2 +- .../systems/modules/world/Nuker.java | 8 +- .../systems/modules/world/VeinMiner.java | 2 +- .../utils/OutlineRenderCommandQueue.java | 24 +- .../meteorclient/utils/Utils.java | 84 +------ .../utils/entity/EntityUtils.java | 6 +- .../simulator/ProjectileEntitySimulator.java | 3 +- .../meteorclient/utils/misc/CursorStyle.java | 30 --- .../meteorclient/utils/misc/Keybind.java | 231 ++++++++++++------ .../meteorclient/utils/misc/input/Input.java | 23 +- .../utils/misc/input/KeyAction.java | 6 +- .../utils/misc/input/KeyBinds.java | 5 +- .../utils/network/PacketUtils.java | 2 +- .../utils/player/PlayerUtils.java | 2 +- .../CustomBannerGuiElementRenderer.java | 9 +- .../MeshBuilderVertexConsumerProvider.java | 10 + .../meteorclient/utils/render/PeekScreen.java | 4 +- .../utils/render/PlayerHeadTexture.java | 4 +- .../utils/render/SimpleBlockRenderer.java | 11 +- .../utils/render/WireframeEntityRenderer.java | 14 +- .../utils/render/postprocess/ChamsShader.java | 13 +- .../render/postprocess/EntityShader.java | 2 +- .../render/postprocess/OutlineUniforms.java | 11 +- .../render/postprocess/PostProcessShader.java | 24 +- .../utils/tooltip/BundleTooltipComponent.java | 2 +- .../meteorclient/utils/world/BlockUtils.java | 12 +- .../meteor-client-sodium.mixins.json | 1 - src/main/resources/meteor-client.classtweaker | 16 +- src/main/resources/meteor-client.mixins.json | 7 +- 152 files changed, 1137 insertions(+), 1078 deletions(-) create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsMixin.java create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/FirstPersonHandsAndItemsRendererMixin.java rename src/main/java/meteordevelopment/meteorclient/mixin/{GpuDeviceMixin.java => FrontendGpuDeviceMixin.java} (76%) delete mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/ItemInHandRendererMixin.java create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/LivingEntitySwingStateMixin.java create mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java delete mode 100644 src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1ce3365df8c..5522abc4893 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] # Fabric (https://fabricmc.net/develop) jdk = "25" -minecraft = "26.2" +minecraft = "26.3-snapshot-9" fabric-loader = "0.19.3" -fabric-api = "0.154.2+26.2" +fabric-api = "0.158.0+26.3" # Plugins # Loom (https://github.com/FabricMC/fabric-loom) 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/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 e085d15736b..cff70d4b1ab 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; @@ -486,22 +487,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 11cd804bb8d..49b7c0ab4af 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 org.lwjgl.glfw.GLFW.*; public abstract class WidgetScreen extends Screen { private static final GuiRenderer RENDERER = new GuiRenderer(); @@ -151,7 +152,7 @@ public boolean mouseReleased(@NonNull MouseButtonEvent click) { mouseX *= s; mouseY *= s; - if (debug && click.button() == GLFW_MOUSE_BUTTON_RIGHT) + if (debug && click.button() == MOUSE_BUTTON_RIGHT) DEBUG_RENDERER.mouseReleased(root, new MouseButtonEvent(mouseX, mouseY, click.buttonInfo()), 0); return root.mouseReleased(new MouseButtonEvent(mouseX, mouseY, click.buttonInfo())); @@ -184,12 +185,12 @@ public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmou public boolean keyReleased(@NonNull KeyEvent input) { if (locked) return false; - if ((input.modifiers() == GLFW_MOD_CONTROL || input.modifiers() == GLFW_MOD_SUPER) && input.key() == GLFW_KEY_9) { + if ((input.modifiers() == MOD_CONTROL || input.modifiers() == MOD_SUPER) && input.key() == KEY_9) { debug = !debug; return true; } - if ((input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) && enterAction != null) { + if ((input.key() == KEY_RETURN || input.key() == KEY_NUMPADENTER) && enterAction != null) { enterAction.run(); return true; } @@ -205,7 +206,7 @@ public boolean keyPressed(@NonNull KeyEvent input) { if (shouldReturn) return true; // Select next text box if TAB was pressed - if (input.key() == GLFW_KEY_TAB) { + if (input.key() == KEY_TAB) { AtomicReference firstTextBox = new AtomicReference<>(null); AtomicBoolean done = new AtomicBoolean(false); AtomicBoolean foundFocused = new AtomicBoolean(false); @@ -236,10 +237,10 @@ public boolean keyPressed(@NonNull KeyEvent input) { return true; } - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; + boolean control = SystemUtils.IS_OS_MAC ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; - return (control && input.key() == GLFW_KEY_C && toClipboard()) - || (control && input.key() == GLFW_KEY_V && fromClipboard()); + return (control && input.key() == KEY_C && toClipboard()) + || (control && input.key() == KEY_V && fromClipboard()); } public void keyRepeated(KeyEvent input) { @@ -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) { - glfwSetCursorPos(mc.getWindow().handle(), 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/ContainerInventoryScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ContainerInventoryScreen.java index 057f134c75b..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 org.lwjgl.glfw.GLFW; import java.util.ArrayList; import java.util.Collections; @@ -151,7 +151,7 @@ public boolean keyPressed(@NonNull KeyEvent input) { return tooltips.openContent(stack); } - if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.keyInventory.matches(input)) { + if (input.key() == InputConstants.KEY_ESCAPE || mc.options.keyInventory.matches(input)) { onClose(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java b/src/main/java/meteordevelopment/meteorclient/gui/screens/ModulesScreen.java index c2ba7d7ecd5..1f405535217 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; @@ -24,15 +23,16 @@ 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 org.lwjgl.glfw.GLFW.*; public class ModulesScreen extends TabScreen { private WCategoryController controller; @@ -155,9 +155,9 @@ protected WWindow createSearch(WContainer c) { public boolean keyPressed(@NonNull KeyEvent value) { if (locked) return false; - boolean cntrl = MacosUtil.IS_MACOS ? value.modifiers() == GLFW_MOD_SUPER : value.modifiers() == GLFW_MOD_CONTROL; + boolean cntrl = SystemUtils.IS_OS_MAC ? value.modifiers() == MOD_SUPER : value.modifiers() == MOD_CONTROL; - if (cntrl && value.key() == GLFW_KEY_F) { + if (cntrl && value.key() == KEY_F) { if (searchWindow != null) searchWindow.setExpanded(true); if (searchTextBox != null) { searchTextBox.setFocused(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 52381815b66..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 com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; public class WMeteorModule extends WPressable implements MeteorWidget { private final Module module; @@ -58,8 +58,8 @@ protected void onCalculateSize() { @Override protected void onPressed(int button) { - if (button == GLFW_MOUSE_BUTTON_LEFT) module.toggle(); - else if (button == GLFW_MOUSE_BUTTON_RIGHT) mc.gui.setScreen(theme.moduleScreen(module)); + if (button == MOUSE_BUTTON_LEFT) module.toggle(); + else if (button == MOUSE_BUTTON_RIGHT) mc.gui.setScreen(theme.moduleScreen(module)); } @Override diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/WTopBar.java index 13e908a763a..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 org.lwjgl.glfw.GLFW.glfwSetCursorPos; 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); - glfwSetCursorPos(mc.getWindow().handle(), mouseX, mouseY); + SDLMouse.SDL_WarpMouseInWindow(mc.getWindow().handle(), (float) mouseX, (float) mouseY); } } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java index acdac7e1dfc..532e21b5528 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WSection.java @@ -11,7 +11,7 @@ import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.util.Mth; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; public abstract class WSection extends WVerticalList { public Runnable action; @@ -124,7 +124,7 @@ public WHeader(String title) { @Override public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { - if (mouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !doubled) { + if (mouseOver && click.button() == MOUSE_BUTTON_LEFT && !doubled) { onClick(); return true; } diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java index 15a14e5f68e..44ea22245c8 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/containers/WView.java @@ -11,7 +11,7 @@ import net.minecraft.client.input.MouseButtonEvent; import net.minecraft.util.Mth; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; public abstract class WView extends WVerticalList { public double maxHeight = Double.MAX_VALUE; @@ -74,7 +74,7 @@ protected void onCalculateWidgetPositions() { @Override public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { - if (handleMouseOver && click.button() == GLFW_MOUSE_BUTTON_LEFT && !doubled) { + if (handleMouseOver && click.button() == MOUSE_BUTTON_LEFT && !doubled) { setFocused(true); return true; } 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 4b84785762d..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 org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; public abstract class WWindow extends WVerticalList { public double padding = 8; @@ -191,7 +191,7 @@ protected void onCalculateSize() { @Override public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { if (mouseOver && !doubled) { - if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) setExpanded(!expanded); + if (click.button() == MOUSE_BUTTON_RIGHT) setExpanded(!expanded); else { dragging = true; dragged = false; 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 12f5409d223..0f10db85ffb 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; @@ -24,8 +23,8 @@ import java.lang.reflect.InvocationTargetException; import java.util.List; +import static com.mojang.blaze3d.platform.InputConstants.*; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static org.lwjgl.glfw.GLFW.*; public abstract class WTextBox extends WWidget { private static final Renderer DEFAULT_RENDERER = (renderer, x, y, text, color) -> renderer.text(text, x, y, color, false); @@ -110,7 +109,7 @@ protected double maxTextWidth() { @Override public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { if (mouseOver) { - if (click.button() == GLFW_MOUSE_BUTTON_RIGHT) { + if (click.button() == MOUSE_BUTTON_RIGHT) { if (!text.isEmpty()) { text = ""; cursor = 0; @@ -119,7 +118,7 @@ public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { runAction(); } - } else if (click.button() == GLFW_MOUSE_BUTTON_LEFT) { + } else if (click.button() == MOUSE_BUTTON_LEFT) { selecting = true; double overflowWidth = getOverflowWidthForRender(); @@ -240,32 +239,32 @@ public boolean onMouseReleased(MouseButtonEvent click) { public boolean onKeyPressed(KeyEvent input) { if (!focused) return false; - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; + boolean control = SystemUtils.IS_OS_MAC ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; - if (control && input.key() == GLFW_KEY_C) { + if (control && input.key() == KEY_C) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboardHandler.setClipboard(text.substring(selectionStart, selectionEnd)); } return true; - } else if (control && input.key() == GLFW_KEY_X) { + } else if (control && input.key() == KEY_X) { if (cursor != selectionStart || cursor != selectionEnd) { mc.keyboardHandler.setClipboard(text.substring(selectionStart, selectionEnd)); clearSelection(); } return true; - } else if (control && input.key() == GLFW_KEY_A) { + } else if (control && input.key() == KEY_A) { cursor = text.length(); selectionStart = 0; selectionEnd = cursor; - } else if (input.modifiers() == ((MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT) && input.key() == GLFW_KEY_A) { + } else if (input.modifiers() == ((SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT) && input.key() == KEY_A) { resetSelection(); - } else if (input.key() == GLFW_KEY_ENTER || input.key() == GLFW_KEY_KP_ENTER) { + } else if (input.key() == KEY_RETURN || input.key() == KEY_NUMPADENTER) { setFocused(false); if (actionOnUnfocused != null) actionOnUnfocused.run(); return true; - } else if (input.key() == GLFW_KEY_TAB && completionsW != null) { + } else if (input.key() == KEY_TAB && completionsW != null) { String completion = ((ICompletionItem) completionsW.cells.get(getSelectedCompletion()).widget()).getCompletion(); StringBuilder sb = new StringBuilder(text.length() + completion.length() + 1); @@ -299,12 +298,12 @@ public boolean onKeyPressed(KeyEvent input) { public boolean onKeyRepeated(KeyEvent input) { if (!focused) return false; - boolean control = MacosUtil.IS_MACOS ? input.modifiers() == GLFW_MOD_SUPER : input.modifiers() == GLFW_MOD_CONTROL; - boolean shift = input.modifiers() == GLFW_MOD_SHIFT; - boolean controlShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) | GLFW_MOD_SHIFT); - boolean altShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT) | GLFW_MOD_SHIFT); + boolean control = SystemUtils.IS_OS_MAC ? input.modifiers() == MOD_SUPER : input.modifiers() == MOD_CONTROL; + boolean shift = input.modifiers() == MOD_SHIFT; + boolean controlShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL) | MOD_SHIFT); + boolean altShift = input.modifiers() == ((SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT) | MOD_SHIFT); - if (control && input.key() == GLFW_KEY_V) { + if (control && input.key() == KEY_V) { clearSelection(); String preText = text; @@ -328,13 +327,13 @@ public boolean onKeyRepeated(KeyEvent input) { if (!text.equals(preText)) runAction(); return true; - } else if (input.key() == GLFW_KEY_BACKSPACE) { + } else if (input.key() == KEY_BACKSPACE) { if (cursor > 0 && cursor == selectionStart && cursor == selectionEnd) { String preText = text; - int count = (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) + int count = (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) ? cursor - : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) ? countToNextSpace(true) : 1; @@ -348,14 +347,14 @@ public boolean onKeyRepeated(KeyEvent input) { } return true; - } else if (input.key() == GLFW_KEY_DELETE) { + } else if (input.key() == KEY_DELETE) { if (cursor == selectionStart && cursor == selectionEnd) { if (cursor < text.length()) { String preText = text; - int count = input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? GLFW_MOD_ALT : MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL) + int count = 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 ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) + : (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_CONTROL : MOD_ALT)) ? countToNextSpace(false) : 1; @@ -367,15 +366,15 @@ public boolean onKeyRepeated(KeyEvent input) { clearSelection(); } return true; - } else if (input.key() == GLFW_KEY_LEFT) { + } 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 ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (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 ? GLFW_MOD_ALT : MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) { cursor = 0; resetSelection(); } @@ -431,15 +430,15 @@ else if (shift) { } return true; - } else if (input.key() == GLFW_KEY_RIGHT) { + } 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 ? GLFW_MOD_CONTROL : GLFW_MOD_ALT)) { + if (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 ? GLFW_MOD_ALT : MacosUtil.IS_MACOS ? GLFW_MOD_SUPER : GLFW_MOD_CONTROL)) { + else if (input.modifiers() == (SystemUtils.IS_OS_WINDOWS ? MOD_ALT : SystemUtils.IS_OS_MAC ? MOD_SUPER : MOD_CONTROL)) { cursor = text.length(); resetSelection(); } @@ -494,7 +493,7 @@ else if (shift) { } return true; - } else if (input.key() == GLFW_KEY_DOWN && completionsW != null) { + } else if (input.key() == KEY_DOWN && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == Math.min(5, completions.size() - 1)) { @@ -508,7 +507,7 @@ else if (shift) { } return true; - } else if (input.key() == GLFW_KEY_UP && completionsW != null) { + } else if (input.key() == KEY_UP && completionsW != null) { int currentI = getSelectedCompletion(); if (currentI == 0) { diff --git a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java index ac58f20c63e..b99369fb007 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/pressable/WPressable.java @@ -8,8 +8,8 @@ import meteordevelopment.meteorclient.gui.widgets.WWidget; import net.minecraft.client.input.MouseButtonEvent; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; public abstract class WPressable extends WWidget { public Runnable action; @@ -18,7 +18,7 @@ public abstract class WPressable extends WWidget { @Override public boolean onMouseClicked(MouseButtonEvent click, boolean doubled) { - if (mouseOver && (click.button() == GLFW_MOUSE_BUTTON_LEFT || click.button() == GLFW_MOUSE_BUTTON_RIGHT)) + if (mouseOver && (click.button() == MOUSE_BUTTON_LEFT || click.button() == MOUSE_BUTTON_RIGHT)) pressed = true; return pressed; } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AbstractContainerScreenMixin.java index c0daddc283f..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 com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_LEFT; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_LEFT; @Mixin(AbstractContainerScreen.class) public abstract class AbstractContainerScreenMixin extends Screen implements MenuAccess { @@ -89,7 +89,7 @@ private void onInit(CallbackInfo ci) { // Inventory Tweaks @Inject(method = "mouseDragged", at = @At("TAIL")) private void onMouseDragged(MouseButtonEvent event, double dx, double dy, CallbackInfoReturnable cir) { - if (event.button() != GLFW_MOUSE_BUTTON_LEFT || doubleclick || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) + if (event.button() != MOUSE_BUTTON_LEFT || doubleclick || !Modules.get().get(InventoryTweaks.class).mouseDragItemMove()) return; Slot slot = getHoveredSlot(event.x(), event.y()); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java index 54dbd67e015..1b9e6109683 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); 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/BookEditScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BookEditScreenMixin.java index 0231425cc7e..7e0e10cca16 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BookEditScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BookEditScreenMixin.java @@ -13,7 +13,6 @@ import net.minecraft.client.gui.screens.inventory.BookEditScreen; import net.minecraft.nbt.*; import net.minecraft.network.chat.Component; -import org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -69,9 +68,9 @@ private void onInit(CallbackInfo ci) { } try { - GLFW.glfwSetClipboardString(mc.getWindow().handle(), Base64.getEncoder().encodeToString(bytes.array)); + mc.keyboardHandler.setClipboard(Base64.getEncoder().encodeToString(bytes.array)); } catch (OutOfMemoryError exception) { - GLFW.glfwSetClipboardString(mc.getWindow().handle(), exception.toString()); + mc.keyboardHandler.setClipboard(exception.toString()); } }) .pos(4, 4) @@ -81,8 +80,7 @@ private void onInit(CallbackInfo ci) { addRenderableWidget( new Button.Builder(Component.literal("Paste"), _ -> { - String clipboard = GLFW.glfwGetClipboardString(mc.getWindow().handle()); - if (clipboard == null) return; + String clipboard = mc.keyboardHandler.getClipboard(); byte[] bytes; try { diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/BookViewScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/BookViewScreenMixin.java index 3f43e0c54fc..e7f77bf5ea3 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/BookViewScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/BookViewScreenMixin.java @@ -21,7 +21,6 @@ import net.minecraft.world.InteractionHand; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; -import org.lwjgl.glfw.GLFW; import org.lwjgl.system.MemoryStack; import org.lwjgl.system.MemoryUtil; import org.spongepowered.asm.mixin.Mixin; @@ -83,7 +82,7 @@ private void onInit(CallbackInfo ci) { if (size > available) { ChatUtils.error("Could not copy to clipboard: Out of memory."); } else { - GLFW.glfwSetClipboardString(mc.getWindow().handle(), encoded); + mc.keyboardHandler.setClipboard(encoded); } }) .pos(4, 4) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ChatComponentMixin.java index f9f5992608a..ceb30a85d01 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/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..d5c7469ec0c 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java @@ -11,8 +11,9 @@ 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.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; import net.minecraft.resources.Identifier; +import net.minecraft.util.FormattedCharSequence; import net.minecraft.world.inventory.tooltip.TooltipComponent; import org.jspecify.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -26,13 +27,13 @@ @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) + @Inject(method = "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(Font font, List tooltip, Optional component, ClientTooltipPositioner positioner, int xo, int yo, boolean replaceExisting, @Nullable Identifier style, CallbackInfo ci, @Local(name = "components") List components) { + if (component.isPresent() && component.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;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 1af2e207239..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 org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -34,22 +34,22 @@ public abstract class KeyboardHandlerMixin { @Inject(method = "keyPress", at = @At("HEAD"), cancellable = true) public void onKey(long handle, int action, KeyEvent event, CallbackInfo ci) { int modifiers = event.modifiers(); - if (event.key() != GLFW.GLFW_KEY_UNKNOWN) { + if (event.key() != InputConstants.UNKNOWN.getValue()) { // on Linux/X11 the modifier is not active when the key is pressed and still active when the key is released // https://github.com/glfw/glfw/issues/1630 - if (action == GLFW.GLFW_PRESS) { + if (action == InputConstants.PRESS) { modifiers |= Input.getModifier(event.key()); - } else if (action == GLFW.GLFW_RELEASE) { + } else if (action == InputConstants.RELEASE) { modifiers &= ~Input.getModifier(event.key()); } - if (minecraft.gui.screen() instanceof WidgetScreen widgetScreen && action == GLFW.GLFW_REPEAT) { - widgetScreen.keyRepeated(new KeyEvent(event.key(), event.scancode(), modifiers)); + if (minecraft.gui.screen() instanceof WidgetScreen widgetScreen && action == InputConstants.REPEAT) { + widgetScreen.keyRepeated(new KeyEvent(event.key(), event.keycode(), modifiers)); } if (GuiKeyEvents.canUseKeys) { - Input.setKeyState(event.key(), action != GLFW.GLFW_RELEASE); - if (MeteorClient.EVENT_BUS.post(KeyInputEvent.get(new KeyEvent(event.key(), event.scancode(), modifiers), KeyAction.get(action))).isCancelled()) + Input.setKeyState(event.key(), action != InputConstants.RELEASE); + 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..d48a6a501e9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java @@ -6,11 +6,11 @@ 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.vertex.PoseStack; +import com.mojang.renderpearl.api.buffers.GpuBufferSlice; import it.unimi.dsi.fastutil.Stack; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import meteordevelopment.meteorclient.mixininterface.IEntityRenderState; @@ -23,7 +23,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,14 +32,9 @@ 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; @@ -78,7 +72,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(); } @@ -130,7 +124,7 @@ private void draw(LevelRenderState worldState, PoseStack matrices, EntityShader meteor$pushEntityOutlineFramebuffer(shader.framebuffer); try { try (var frame = renderDispatcher.prepareFrame(outlineRenderCommandQueue)) { - frame.executeOutline(); + executeOutline(frame); } } finally { outlineRenderCommandQueue.submitsPerOrder.clear(); @@ -138,7 +132,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 +159,10 @@ private void onResize(int width, int height, CallbackInfo ci) { @Shadow @Final private RenderBuffers renderBuffers; + + @Shadow + protected abstract void executeOutline(FeatureRenderDispatcher.PreparedFrame featureFrame); + @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 eddb5ed1c46..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, h + (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, h + (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..0ccb0017be8 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java @@ -19,6 +19,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 +29,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; @@ -48,9 +51,9 @@ public LocalPlayerMixin(ClientLevel world, GameProfile profile) { } @Inject(method = "drop", at = @At("HEAD"), cancellable = true) - private void onDrop(boolean all, CallbackInfoReturnable cir) { + private void onDrop(boolean all, CallbackInfo ci) { if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(getMainHandItem())).isCancelled()) - cir.setReturnValue(false); + ci.cancel(); } @ModifyExpressionValue(method = "handlePortalTransitionEffect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/Gui;screen()Lnet/minecraft/client/gui/screens/Screen;", ordinal = 0)) @@ -86,7 +89,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 +135,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 +182,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 +192,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/MouseHandlerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/MouseHandlerMixin.java index 12c36a8ccfa..c349cdd6791 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/MouseHandlerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/MouseHandlerMixin.java @@ -22,7 +22,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import static org.lwjgl.glfw.GLFW.GLFW_RELEASE; +import static com.mojang.blaze3d.platform.InputConstants.RELEASE; @Mixin(MouseHandler.class) public abstract class MouseHandlerMixin { @@ -38,7 +38,7 @@ public abstract class MouseHandlerMixin { @Inject(method = "onButton", at = @At("HEAD"), cancellable = true) private void onMouseButton(long handle, MouseButtonInfo rawButtonInfo, int action, CallbackInfo ci) { - Input.setButtonState(rawButtonInfo.button(), action != GLFW_RELEASE); + Input.setButtonState(rawButtonInfo.button(), action != RELEASE); MouseButtonEvent click = new MouseButtonEvent(getScaledXPos(minecraft.getWindow()), getScaledYPos(minecraft.getWindow()), rawButtonInfo); if (MeteorClient.EVENT_BUS.post(MouseClickEvent.get(click, KeyAction.get(action))).isCancelled()) ci.cancel(); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java new file mode 100644 index 00000000000..5876c6dfabb --- /dev/null +++ b/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java @@ -0,0 +1,20 @@ +/* + * 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.mojang.blaze3d.pipeline.PipelineCache; +import com.mojang.renderpearl.api.pipeline.CompiledRenderPipeline; +import com.mojang.renderpearl.api.pipeline.RenderPipeline; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; + +@Mixin(PipelineCache.class) +public interface PipelineCacheAccessor { + @Accessor("cache") + Map getCache(); +} 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/ScreenMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java index 2b359b9a994..dd8385b0d85 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ScreenMixin.java @@ -27,14 +27,14 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import static org.lwjgl.glfw.GLFW.*; +import static com.mojang.blaze3d.platform.InputConstants.*; @Mixin(value = Screen.class, priority = 500) // needs to be before baritone public abstract class ScreenMixin { @Unique private static boolean meteor$isArray(int key) { - return key == GLFW_KEY_RIGHT || key == GLFW_KEY_LEFT || key == GLFW_KEY_DOWN || key == GLFW_KEY_UP; + return key == KEY_RIGHT || key == KEY_LEFT || key == KEY_DOWN || key == KEY_UP; } @Inject(method = "extractTransparentBackground", at = @At("HEAD"), cancellable = true) @@ -63,7 +63,7 @@ private static void onDefaultHandleClickEvent(ClickEvent event, Minecraft minecr private void onKeyPressed(KeyEvent event, CallbackInfoReturnable cir) { if ((Object) (this) instanceof ChatScreen) return; GUIMove guiMove = Modules.get().get(GUIMove.class); - if ((guiMove.disableArrows() && meteor$isArray(event.key())) || (guiMove.disableSpace() && event.key() == GLFW_KEY_SPACE)) { + if ((guiMove.disableArrows() && meteor$isArray(event.key())) || (guiMove.disableSpace() && event.key() == KEY_SPACE)) { cir.setReturnValue(true); } } diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java index bad493d0d5f..d553a829a64 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(Lnet/minecraft/client/renderer/ShaderManager$Configs;Lnet/minecraft/server/packs/resources/ResourceManager;Lnet/minecraft/util/profiling/ProfilerFiller;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ShaderManager$CompilationCache;close()V")) + private void meteor$reloadPipelines(CallbackInfo ci, @Local 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..608d61f418d 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; @@ -33,8 +33,8 @@ private void updateRenderState(ClientLevel level, float partialTicks, Camera cam if (ambience.customSkyColor.get()) state.skyColor = ambience.skyColor().getPacked(); } - @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 09f5e976df6..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 org.lwjgl.glfw.GLFW; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -32,7 +32,7 @@ private void onExtractRenderState(GuiGraphicsExtractor graphics, int mouseX, int @Inject(method = "mouseClicked", at = @At("HEAD"), cancellable = true) private void onMouseClicked(MouseButtonEvent event, boolean doubleClick, CallbackInfoReturnable cir) { - if (Config.get().titleScreenCredits.get() && event.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (Config.get().titleScreenCredits.get() && event.button() == InputConstants.MOUSE_BUTTON_LEFT) { if (TitleScreenCredits.onClicked(event.x(), event.y())) cir.setReturnValue(true); } } 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/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..e91491b225d 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,7 +145,6 @@ 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) { @@ -176,16 +175,16 @@ 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()) { pass.setUniform(entry.getKey(), entry.getValue()); } - for (var entry : samplers.entrySet()) { - pass.bindTexture(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); - } +// for (var entry : samplers.entrySet()) { +// pass.bindTexture(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); +// } pass.setVertexBuffer(0, vertexBuffer); pass.setIndexBuffer(indexBuffer.buffer(), indexType); diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java index 780583c6945..a910f1faac3 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java @@ -5,10 +5,11 @@ 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 org.joml.Matrix4f; import org.jspecify.annotations.NonNull; @@ -22,7 +23,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 DynamicGpuDataStorage<>("Meteor - Mesh UBO", SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { STORAGE.endFrame(); @@ -32,10 +33,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..5248cce5954 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java @@ -5,18 +5,13 @@ 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.mixin.PipelineCacheAccessor; import net.minecraft.client.Minecraft; import net.minecraft.server.packs.resources.ResourceManager; import org.apache.commons.io.IOUtils; @@ -116,7 +111,7 @@ public abstract class MeteorRenderPipelines { .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()) + .withBindGroupLayout(BindGroupLayout.builder()/*.withSampler("u_Texture")*/.build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -128,7 +123,7 @@ public abstract class MeteorRenderPipelines { .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()) + .withBindGroupLayout(BindGroupLayout.builder()/*.withSampler("u_Texture")*/.build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -143,7 +138,7 @@ public abstract class MeteorRenderPipelines { .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vert")) .withFragmentShader(MeteorClient.identifier("shaders/post-process/outline.frag")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + /*.withSampler("u_Texture")*/ .withUniform("PostData", UniformType.UNIFORM_BUFFER) .withUniform("OutlineData", UniformType.UNIFORM_BUFFER) .build()) @@ -159,8 +154,8 @@ public abstract class MeteorRenderPipelines { .withVertexShader(MeteorClient.identifier("shaders/post-process/base.vert")) .withFragmentShader(MeteorClient.identifier("shaders/post-process/image.frag")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") - .withSampler("u_TextureI") + /*.withSampler("u_Texture")*/ +// .withSampler("u_TextureI") .withUniform("PostData", UniformType.UNIFORM_BUFFER) .withUniform("ImageData", UniformType.UNIFORM_BUFFER) .build()) @@ -178,7 +173,7 @@ public abstract class MeteorRenderPipelines { .withVertexShader(MeteorClient.identifier("shaders/blur.vert")) .withFragmentShader(MeteorClient.identifier("shaders/blur_down.frag")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + /*.withSampler("u_Texture")*/ .withUniform("BlurData", UniformType.UNIFORM_BUFFER) .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -193,7 +188,7 @@ public abstract class MeteorRenderPipelines { .withVertexShader(MeteorClient.identifier("shaders/blur.vert")) .withFragmentShader(MeteorClient.identifier("shaders/blur_up.frag")) .withBindGroupLayout(BindGroupLayout.builder() - .withSampler("u_Texture") + /*.withSampler("u_Texture")*/ .withUniform("BlurData", UniformType.UNIFORM_BUFFER) .build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -207,7 +202,7 @@ public abstract class MeteorRenderPipelines { .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()) + .withBindGroupLayout(BindGroupLayout.builder()/*.withSampler("u_Texture")*/.build()) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(false) @@ -219,12 +214,14 @@ private static RenderPipeline add(RenderPipeline pipeline) { return pipeline; } - public static void precompile() { + public static void precompile(PipelineCache cache) { + PipelineCacheAccessor pipelineAccessor = (PipelineCacheAccessor) cache; + GpuDevice device = RenderSystem.getDevice(); ResourceManager resources = Minecraft.getInstance().getResourceManager(); for (RenderPipeline pipeline : PIPELINES) { - device.precompilePipeline(pipeline, (identifier, _) -> { + CompiledRenderPipeline newPipeline = device.compilePipeline(pipeline, (identifier, _) -> { var resource = resources.getResource(identifier).get(); try (var in = resource.open()) { @@ -233,6 +230,8 @@ public static void precompile() { throw new RuntimeException(e); } }); + + pipelineAccessor.getCache().put(pipeline, newPipeline); } } 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 2f84997edc7..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 org.lwjgl.glfw.GLFW; import java.util.function.Consumer; @@ -32,7 +32,7 @@ public KeybindSetting(String name, String description, Keybind defaultValue, Con @EventHandler(priority = EventPriority.HIGHEST) private void onKeyBinding(KeyInputEvent event) { if (widget == null) return; - if (event.action == KeyAction.Press && event.key() == GLFW.GLFW_KEY_ESCAPE && widget.onClear()) event.cancel(); + if (event.action == KeyAction.Press && event.key() == InputConstants.KEY_ESCAPE && widget.onClear()) event.cancel(); else if (event.action == KeyAction.Release && widget.onAction(true, event.key(), event.modifiers())) event.cancel(); } 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/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 5c2a353d116..b731eb87ff2 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 @@ -38,13 +38,13 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.util.Mth; -import org.lwjgl.glfw.GLFW; 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 +260,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 +277,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 +328,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(GLFW.GLFW_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(GLFW.GLFW_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(GLFW.GLFW_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(GLFW.GLFW_KEY_F9 + i), l.ux(11d + i), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PRINT_SCREEN), l.ux(15.5), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_SCROLL_LOCK), l.ux(16.5), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_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 = {GLFW.GLFW_KEY_GRAVE_ACCENT, GLFW.GLFW_KEY_1, GLFW.GLFW_KEY_2, GLFW.GLFW_KEY_3, GLFW.GLFW_KEY_4, GLFW.GLFW_KEY_5, GLFW.GLFW_KEY_6, GLFW.GLFW_KEY_7, GLFW.GLFW_KEY_8, GLFW.GLFW_KEY_9, GLFW.GLFW_KEY_0, GLFW.GLFW_KEY_MINUS, GLFW.GLFW_KEY_EQUAL}; + 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(GLFW.GLFW_KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_INSERT), l.ux(15.5), row1)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_HOME), l.ux(16.5), row1)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PAGE_UP), 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(GLFW.GLFW_KEY_TAB), 0, row2, KeyDimensions.TAB)); - int[] row2Keys = {GLFW.GLFW_KEY_Q, GLFW.GLFW_KEY_W, GLFW.GLFW_KEY_E, GLFW.GLFW_KEY_R, GLFW.GLFW_KEY_T, GLFW.GLFW_KEY_Y, GLFW.GLFW_KEY_U, GLFW.GLFW_KEY_I, GLFW.GLFW_KEY_O, GLFW.GLFW_KEY_P, GLFW.GLFW_KEY_LEFT_BRACKET, GLFW.GLFW_KEY_RIGHT_BRACKET}; + 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(GLFW.GLFW_KEY_BACKSLASH), tabEnd + l.ux(12), row2, KeyDimensions.TAB)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_DELETE), l.ux(15.5), row2)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_END), l.ux(16.5), row2)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PAGE_DOWN), 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(GLFW.GLFW_KEY_CAPS_LOCK), 0, row3, KeyDimensions.CAPS_LOCK)); - int[] row3Keys = {GLFW.GLFW_KEY_A, GLFW.GLFW_KEY_S, GLFW.GLFW_KEY_D, GLFW.GLFW_KEY_F, GLFW.GLFW_KEY_G, GLFW.GLFW_KEY_H, GLFW.GLFW_KEY_J, GLFW.GLFW_KEY_K, GLFW.GLFW_KEY_L, GLFW.GLFW_KEY_SEMICOLON, GLFW.GLFW_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(GLFW.GLFW_KEY_ENTER), 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(GLFW.GLFW_KEY_LEFT_SHIFT), 0, row4, KeyDimensions.LEFT_SHIFT_ANSI)); - int[] row4Keys = {GLFW.GLFW_KEY_Z, GLFW.GLFW_KEY_X, GLFW.GLFW_KEY_C, GLFW.GLFW_KEY_V, GLFW.GLFW_KEY_B, GLFW.GLFW_KEY_N, GLFW.GLFW_KEY_M, GLFW.GLFW_KEY_COMMA, GLFW.GLFW_KEY_PERIOD, GLFW.GLFW_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(GLFW.GLFW_KEY_RIGHT_SHIFT), lShiftEnd + l.ux(10), row4, KeyDimensions.RIGHT_SHIFT)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_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(GLFW.GLFW_KEY_LEFT_CONTROL), 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(GLFW.GLFW_KEY_LEFT_SUPER), xPos, row5, KeyDimensions.GUI)); - xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_LEFT_ALT), xPos, row5, KeyDimensions.ALT)); +// keys.add(l.key(Keybind.fromKey(KEY_LSUPER), xPos, row5, KeyDimensions.GUI)); +// xPos += l.px(KeyDimensions.GUI) + l.keyGap; + 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(GLFW.GLFW_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(GLFW.GLFW_KEY_RIGHT_ALT), 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(GLFW.GLFW_KEY_RIGHT_SUPER), 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)); - xPos += l.px(KeyDimensions.MENU) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_RIGHT_CONTROL), xPos, row5, KeyDimensions.CTRL)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_LEFT), l.ux(15.5), row5)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_DOWN), l.ux(16.5), row5)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_RIGHT), l.ux(17.5), row5)); +// keys.add(l.key(Keybind.fromKey(KEY_RSUPER), xPos, row5, KeyDimensions.GUI)); +// xPos += l.px(KeyDimensions.GUI) + l.keyGap; +// keys.add(l.key(Keybind.fromKey(KEY_MENU), xPos, row5, KeyDimensions.MENU)); +// xPos += l.px(KeyDimensions.MENU) + l.keyGap; + 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(GLFW.GLFW_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(GLFW.GLFW_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(GLFW.GLFW_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(GLFW.GLFW_KEY_F9 + i), l.ux(11d + i), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PRINT_SCREEN), l.ux(15.5), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_SCROLL_LOCK), l.ux(16.5), row0)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_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 = {GLFW.GLFW_KEY_GRAVE_ACCENT, GLFW.GLFW_KEY_1, GLFW.GLFW_KEY_2, GLFW.GLFW_KEY_3, GLFW.GLFW_KEY_4, GLFW.GLFW_KEY_5, GLFW.GLFW_KEY_6, GLFW.GLFW_KEY_7, GLFW.GLFW_KEY_8, GLFW.GLFW_KEY_9, GLFW.GLFW_KEY_0, GLFW.GLFW_KEY_MINUS, GLFW.GLFW_KEY_EQUAL}; + 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(GLFW.GLFW_KEY_BACKSPACE), l.ux(13), row1, KeyDimensions.BACKSPACE)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_INSERT), l.ux(15.5), row1)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_HOME), l.ux(16.5), row1)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PAGE_UP), 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(GLFW.GLFW_KEY_TAB), 0, row2, KeyDimensions.TAB)); - int[] row2Keys = {GLFW.GLFW_KEY_Q, GLFW.GLFW_KEY_W, GLFW.GLFW_KEY_E, GLFW.GLFW_KEY_R, GLFW.GLFW_KEY_T, GLFW.GLFW_KEY_Y, GLFW.GLFW_KEY_U, GLFW.GLFW_KEY_I, GLFW.GLFW_KEY_O, GLFW.GLFW_KEY_P, GLFW.GLFW_KEY_LEFT_BRACKET, GLFW.GLFW_KEY_RIGHT_BRACKET}; + 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(GLFW.GLFW_KEY_DELETE), l.ux(15.5), row2)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_END), l.ux(16.5), row2)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_PAGE_DOWN), 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(GLFW.GLFW_KEY_CAPS_LOCK), 0, row3, KeyDimensions.CAPS_LOCK)); - int[] row3Keys = {GLFW.GLFW_KEY_A, GLFW.GLFW_KEY_S, GLFW.GLFW_KEY_D, GLFW.GLFW_KEY_F, GLFW.GLFW_KEY_G, GLFW.GLFW_KEY_H, GLFW.GLFW_KEY_J, GLFW.GLFW_KEY_K, GLFW.GLFW_KEY_L, GLFW.GLFW_KEY_SEMICOLON, GLFW.GLFW_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(GLFW.GLFW_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 +446,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(GLFW.GLFW_KEY_ENTER), 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(GLFW.GLFW_KEY_LEFT_SHIFT), 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(KEY_WORLD_2), lShiftEnd, row4)); - int[] row4Keys = {GLFW.GLFW_KEY_Z, GLFW.GLFW_KEY_X, GLFW.GLFW_KEY_C, GLFW.GLFW_KEY_V, GLFW.GLFW_KEY_B, GLFW.GLFW_KEY_N, GLFW.GLFW_KEY_M, GLFW.GLFW_KEY_COMMA, GLFW.GLFW_KEY_PERIOD, GLFW.GLFW_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(GLFW.GLFW_KEY_RIGHT_SHIFT), rShiftX, row4, KeyDimensions.RIGHT_SHIFT)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_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(GLFW.GLFW_KEY_LEFT_CONTROL), 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(GLFW.GLFW_KEY_LEFT_SUPER), xPos, row5, KeyDimensions.GUI)); - xPos += l.px(KeyDimensions.GUI) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_LEFT_ALT), xPos, row5, KeyDimensions.ALT)); +// keys.add(l.key(Keybind.fromKey(KEY_LSUPER), xPos, row5, KeyDimensions.GUI)); +// xPos += l.px(KeyDimensions.GUI) + l.keyGap; + 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(GLFW.GLFW_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(GLFW.GLFW_KEY_RIGHT_ALT), "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(GLFW.GLFW_KEY_RIGHT_SUPER), 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)); - xPos += l.px(KeyDimensions.MENU) + l.keyGap; - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_RIGHT_CONTROL), xPos, row5, KeyDimensions.CTRL)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_LEFT), l.ux(15.5), row5)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_DOWN), l.ux(16.5), row5)); - keys.add(l.key(Keybind.fromKey(GLFW.GLFW_KEY_RIGHT), l.ux(17.5), row5)); +// keys.add(l.key(Keybind.fromKey(KEY_RSUPER), xPos, row5, KeyDimensions.GUI)); +// xPos += l.px(KeyDimensions.GUI) + l.keyGap; +// keys.add(l.key(Keybind.fromKey(KEY_MEN), xPos, row5, KeyDimensions.MENU)); +// xPos += l.px(KeyDimensions.MENU) + l.keyGap; + 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 +542,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 +661,7 @@ public static class Key { private float delta; public Key() { - this.keybind = Keybind.fromKey(GLFW.GLFW_KEY_SPACE); + this.keybind = Keybind.fromKey(KEY_SPACE); this.width = 60; this.height = 40; } @@ -712,14 +706,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 +730,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() - ? GLFW.glfwGetKey(window, keybind.getValue()) != GLFW.GLFW_RELEASE - : GLFW.glfwGetMouseButton(window, keybind.getValue()) != GLFW.GLFW_RELEASE; + ? Type.KEYBOARD.getOrCreate(keybind.getValue()).getValue() != RELEASE + : Type.MOUSE.getOrCreate(keybind.getValue()).getValue() != RELEASE; } else { int key = ((KeyMappingAccessor) binding).meteor$getKey().getValue(); return key >= 0 && key < 8 - ? GLFW.glfwGetMouseButton(window, key) != GLFW.GLFW_RELEASE - : GLFW.glfwGetKey(window, key) != GLFW.GLFW_RELEASE; + ? Type.MOUSE.getOrCreate(key).getValue() != RELEASE + : Type.KEYBOARD.getOrCreate(key).getValue() != RELEASE; } } @@ -915,7 +908,7 @@ public void initWidgets() { sgGeneral.add(new KeybindSetting.Builder() .name("custom-key") .description("The key to display.") - .defaultValue(Keybind.fromKey(GLFW.GLFW_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 093bc2c6776..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 org.lwjgl.glfw.GLFW; import java.util.ArrayList; import java.util.Iterator; @@ -77,7 +77,7 @@ public boolean mouseClicked(@NonNull MouseButtonEvent click, boolean doubled) { mouseX *= s; mouseY *= s; - if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == InputConstants.MOUSE_BUTTON_LEFT) { pressed = true; selectionSnapBox = null; @@ -126,7 +126,7 @@ public boolean mouseReleased(@NonNull MouseButtonEvent click) { mouseX *= s; mouseY *= s; - if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) pressed = false; + if (click.button() == InputConstants.MOUSE_BUTTON_LEFT) pressed = false; if (addedHoveredToSelectionWhenClickedElement != null) { selection.remove(addedHoveredToSelectionWhenClickedElement); @@ -134,12 +134,12 @@ public boolean mouseReleased(@NonNull MouseButtonEvent click) { } if (moved) { - if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int) mouseY); + if (click.button() == InputConstants.MOUSE_BUTTON_LEFT && !dragging) fillSelection((int) mouseX, (int) mouseY); } else { - if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == InputConstants.MOUSE_BUTTON_LEFT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) hovered.toggle(); - } else if (click.button() == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { + } else if (click.button() == InputConstants.MOUSE_BUTTON_RIGHT) { HudElement hovered = getHovered((int) mouseX, (int) mouseY); if (hovered != null) mc.gui.setScreen(new HudElementScreen(theme, hovered)); @@ -147,7 +147,7 @@ public boolean mouseReleased(@NonNull MouseButtonEvent click) { } } - if (click.button() == GLFW.GLFW_MOUSE_BUTTON_LEFT) { + if (click.button() == InputConstants.MOUSE_BUTTON_LEFT) { snapper.unsnap(); moved = dragging = false; } @@ -158,10 +158,10 @@ public boolean mouseReleased(@NonNull MouseButtonEvent click) { @Override public boolean keyPressed(@NonNull KeyEvent input) { if (!pressed) { - if (input.key() == GLFW.GLFW_KEY_ENTER || input.key() == GLFW.GLFW_KEY_KP_ENTER) { + if (input.key() == InputConstants.KEY_RETURN || input.key() == InputConstants.KEY_NUMPADENTER) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.toggle(); - } else if (input.key() == GLFW.GLFW_KEY_DELETE) { + } else if (input.key() == InputConstants.KEY_DELETE) { HudElement hovered = getHovered(lastMouseX, lastMouseY); if (hovered != null) hovered.remove(); @@ -170,14 +170,14 @@ public boolean keyPressed(@NonNull KeyEvent input) { selection.clear(); } } else if (!selection.isEmpty()) { - int pixels = (Input.isKeyPressed(GLFW.GLFW_KEY_LEFT_CONTROL) || Input.isKeyPressed(GLFW.GLFW_KEY_RIGHT_CONTROL)) ? 10 : 1; + int pixels = (Input.isKeyPressed(InputConstants.KEY_LCONTROL) || Input.isKeyPressed(InputConstants.KEY_RCONTROL)) ? 10 : 1; int dx = 0, dy = 0; switch (input.key()) { - case GLFW.GLFW_KEY_UP -> dy = -pixels; - case GLFW.GLFW_KEY_DOWN -> dy = pixels; - case GLFW.GLFW_KEY_RIGHT -> dx = pixels; - case GLFW.GLFW_KEY_LEFT -> dx = -pixels; + case InputConstants.KEY_UP -> dy = -pixels; + case InputConstants.KEY_DOWN -> dy = pixels; + case InputConstants.KEY_RIGHT -> dx = pixels; + case InputConstants.KEY_LEFT -> dx = -pixels; } // manually move selection to bypass snapping @@ -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 22a61c2894b..b7b7c300eeb 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 org.lwjgl.glfw.GLFW; import java.io.File; import java.util.*; @@ -62,7 +62,7 @@ public class Modules extends System { private final Map> groups = new Reference2ReferenceOpenHashMap<>(); private final Set active = new ReferenceOpenHashSet<>(); - private Module moduleToBind; + private @Nullable Module moduleToBind; private boolean awaitingKeyRelease = false; public Modules() { @@ -214,7 +214,7 @@ void removeActive(Module module) { // Binding - public void setModuleToBind(Module moduleToBind) { + public void setModuleToBind(@Nullable Module moduleToBind) { this.moduleToBind = moduleToBind; } @@ -244,7 +244,7 @@ private boolean onBinding(boolean isKey, int value, int modifiers) { if (!isBinding()) return false; if (awaitingKeyRelease) { - if (!isKey || (value != GLFW.GLFW_KEY_ENTER && value != GLFW.GLFW_KEY_KP_ENTER)) return false; + if (!isKey || (value != InputConstants.KEY_RETURN && value != InputConstants.KEY_NUMPADENTER)) return false; awaitingKeyRelease = false; return false; @@ -253,7 +253,7 @@ private boolean onBinding(boolean isKey, int value, int modifiers) { if (moduleToBind.keybind.canBindTo(isKey, value, modifiers)) { moduleToBind.keybind.set(isKey, value, modifiers); moduleToBind.info("Bound to (highlight)%s(default).", moduleToBind.keybind); - } else if (value == GLFW.GLFW_KEY_ESCAPE) { + } else if (value == InputConstants.KEY_ESCAPE) { moduleToBind.keybind.set(Keybind.none()); moduleToBind.info("Removed bind."); } else return false; @@ -277,7 +277,7 @@ private void onMouseClick(MouseClickEvent event) { } private void onAction(boolean isKey, int value, int modifiers, boolean isPress) { - if (mc.gui.screen() != null || Input.isKeyPressed(GLFW.GLFW_KEY_F3)) return; + if (mc.gui.screen() != null || Input.isKeyPressed(InputConstants.KEY_F3)) return; for (Module module : moduleInstances.values()) { if (module.keybind.matches(isKey, value, modifiers) && (isPress || (module.toggleOnBindRelease && module.isActive()))) { 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 b4070ed90ad..2352cc70f10 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 44b7ab9c135..9737faa6cfb 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 4342c648a34..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 com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_RIGHT; import static meteordevelopment.orbit.EventPriority.HIGHEST; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_RIGHT; 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; @@ -242,7 +241,7 @@ else if ((isClicking || !autoTotem.isLocked() && !item.isOffhand())) { @EventHandler private void onMouseClick(MouseClickEvent event) { // Detects if the User is right-clicking - isClicking = mc.gui.screen() == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.button() == GLFW_MOUSE_BUTTON_RIGHT; + isClicking = mc.gui.screen() == null && !Modules.get().get(AutoTotem.class).isLocked() && !usableItem() && !mc.player.isUsingItem() && event.action == KeyAction.Press && event.button() == MOUSE_BUTTON_RIGHT; } private boolean usableItem() { diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/combat/Surround.java index 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/InventoryTweaks.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/misc/InventoryTweaks.java index 16e27fa130b..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 org.lwjgl.glfw.GLFW; 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(GLFW.GLFW_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 77111133509..ed8cda76d5a 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/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/GUIMove.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java index 350f08a31de..c03896a0e47 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/movement/GUIMove.java @@ -24,7 +24,7 @@ import net.minecraft.util.Mth; import net.minecraft.world.item.CreativeModeTabs; -import static org.lwjgl.glfw.GLFW.*; +import static com.mojang.blaze3d.platform.InputConstants.*; public class GUIMove extends Module { public enum Screens { @@ -147,10 +147,10 @@ private void onRender3D(Render3DEvent event) { float yaw = mc.player.getYRot(); float pitch = mc.player.getXRot(); - if (Input.isKeyPressed(GLFW_KEY_LEFT)) yaw -= rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_RIGHT)) yaw += rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_UP)) pitch -= rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_DOWN)) pitch += rotationDelta; + if (Input.isKeyPressed(KEY_LEFT)) yaw -= rotationDelta; + if (Input.isKeyPressed(KEY_RIGHT)) yaw += rotationDelta; + if (Input.isKeyPressed(KEY_UP)) pitch -= rotationDelta; + if (Input.isKeyPressed(KEY_DOWN)) pitch += rotationDelta; pitch = Mth.clamp(pitch, -90, 90); @@ -159,10 +159,10 @@ private void onRender3D(Render3DEvent event) { } else { double dy = 0, dx = 0; - if (Input.isKeyPressed(GLFW_KEY_LEFT)) dy = -rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_RIGHT)) dy = rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_UP)) dx = -rotationDelta; - if (Input.isKeyPressed(GLFW_KEY_DOWN)) dx = rotationDelta; + if (Input.isKeyPressed(KEY_LEFT)) dy = -rotationDelta; + if (Input.isKeyPressed(KEY_RIGHT)) dy = rotationDelta; + if (Input.isKeyPressed(KEY_UP)) dx = -rotationDelta; + if (Input.isKeyPressed(KEY_DOWN)) dx = rotationDelta; freecam.changeLookDirection(dy, dx); } 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/player/MiddleClickExtra.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java index 156665a8a8f..a79b8d19e28 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/player/MiddleClickExtra.java @@ -28,7 +28,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.GameType; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_MIDDLE; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_MIDDLE; public class MiddleClickExtra extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -103,7 +103,7 @@ public void onDeactivate() { @EventHandler private void onMouseClick(MouseClickEvent event) { - if (event.action != KeyAction.Press || event.button() != GLFW_MOUSE_BUTTON_MIDDLE || mc.gui.screen() != null) + if (event.action != KeyAction.Press || event.button() != MOUSE_BUTTON_MIDDLE || mc.gui.screen() != null) return; if (disabledByCreative()) return; diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java index eb3ddcb4b18..f28d818d9c1 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/BetterTooltips.java @@ -59,8 +59,8 @@ import java.util.Optional; import java.util.function.Consumer; -import static org.lwjgl.glfw.GLFW.GLFW_KEY_LEFT_ALT; -import static org.lwjgl.glfw.GLFW.GLFW_MOUSE_BUTTON_MIDDLE; +import static com.mojang.blaze3d.platform.InputConstants.KEY_LALT; +import static com.mojang.blaze3d.platform.InputConstants.MOUSE_BUTTON_MIDDLE; public class BetterTooltips extends Module { public static final Color ECHEST_COLOR = new Color(0, 50, 50); @@ -82,7 +82,7 @@ public class BetterTooltips extends Module { private final Setting keybind = sgGeneral.add(new KeybindSetting.Builder() .name("keybind") .description("The bind for keybind mode.") - .defaultValue(Keybind.fromKey(GLFW_KEY_LEFT_ALT)) + .defaultValue(Keybind.fromKey(KEY_LALT)) .visible(() -> displayWhen.get() == DisplayWhen.Keybind) .onChanged(_ -> updateTooltips = true) .build() @@ -98,7 +98,7 @@ public class BetterTooltips extends Module { private final Setting openContentsKey = sgGeneral.add(new KeybindSetting.Builder() .name("keybind") .description("Key to open contents (containers, books, etc.) when pressed on items.") - .defaultValue(Keybind.fromButton(GLFW_MOUSE_BUTTON_MIDDLE)) + .defaultValue(Keybind.fromButton(MOUSE_BUTTON_MIDDLE)) .visible(openContents::get) .build() ); 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 5243ab3e096..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 org.lwjgl.glfw.GLFW; public class CameraTweaks extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -50,7 +50,7 @@ public class CameraTweaks extends Module { .name("bind") .description("Binds camera distance scrolling to a key.") .visible(scrollingEnabled::get) - .defaultValue(Keybind.fromKey(GLFW.GLFW_KEY_LEFT_ALT)) + .defaultValue(Keybind.fromKey(InputConstants.KEY_LALT)) .build() ); 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 2e431acbb35..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 org.lwjgl.glfw.GLFW; public class FreeLook extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -99,19 +99,19 @@ private void onTick(TickEvent.Post event) { for (int i = 0; i < (arrowSpeed.get() * 2); i++) { switch (mode.get()) { case Player -> { - if (Input.isKeyPressed(GLFW.GLFW_KEY_LEFT)) cameraYaw -= 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_RIGHT)) cameraYaw += 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_UP)) cameraPitch -= 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_DOWN)) cameraPitch += 0.5; + if (Input.isKeyPressed(InputConstants.KEY_LEFT)) cameraYaw -= 0.5; + if (Input.isKeyPressed(InputConstants.KEY_RIGHT)) cameraYaw += 0.5; + if (Input.isKeyPressed(InputConstants.KEY_UP)) cameraPitch -= 0.5; + if (Input.isKeyPressed(InputConstants.KEY_DOWN)) cameraPitch += 0.5; } case Camera -> { float yaw = mc.player.getYRot(); float pitch = mc.player.getXRot(); - if (Input.isKeyPressed(GLFW.GLFW_KEY_LEFT)) yaw -= 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_RIGHT)) yaw += 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_UP)) pitch -= 0.5; - if (Input.isKeyPressed(GLFW.GLFW_KEY_DOWN)) pitch += 0.5; + if (Input.isKeyPressed(InputConstants.KEY_LEFT)) yaw -= 0.5; + if (Input.isKeyPressed(InputConstants.KEY_RIGHT)) yaw += 0.5; + if (Input.isKeyPressed(InputConstants.KEY_UP)) pitch -= 0.5; + if (Input.isKeyPressed(InputConstants.KEY_DOWN)) pitch += 0.5; mc.player.setYRot(yaw); mc.player.setXRot(pitch); 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 492fa23a137..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 org.lwjgl.glfw.GLFW; + +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(GLFW.GLFW_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..484818ef6b5 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) 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..b2eb6cc0e5e 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()); 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 54a78d53d37..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 org.lwjgl.glfw.GLFW; public class Zoom extends Module { private final SettingGroup sgGeneral = settings.getDefaultGroup(); @@ -109,7 +109,7 @@ public void onDeactivate() { @EventHandler public void onKeyPressed(KeyInputEvent event) { - if (event.key() != GLFW.GLFW_KEY_F1) return; + if (event.key() != InputConstants.KEY_F1) return; hudManualToggled = true; } 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 1d4c9138df2..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 org.lwjgl.glfw.GLFW; public class Excavator extends Module { private final IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone(); @@ -31,7 +31,7 @@ public class Excavator extends Module { private final Setting selectionBind = sgGeneral.add(new KeybindSetting.Builder() .name("selection-bind") .description("Bind to draw selection.") - .defaultValue(Keybind.fromButton(GLFW.GLFW_MOUSE_BUTTON_RIGHT)) + .defaultValue(Keybind.fromButton(InputConstants.MOUSE_BUTTON_RIGHT)) .build() ); 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 5207e34d1df..af80cb739d5 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 ff7dff87929..56f9f25f3d2 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; @@ -509,8 +509,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 { @@ -523,7 +523,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 d6d5ad5e902..0564ec040db 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/Utils.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/Utils.java @@ -73,7 +73,6 @@ import java.util.stream.Collectors; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static org.lwjgl.glfw.GLFW.*; public class Utils { public static final Pattern FILE_NAME_INVALID_CHARS_PATTERN = Pattern.compile("[\\s\\\\/:*?\"<>|]"); @@ -277,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); @@ -449,85 +448,6 @@ public static String titleToName(String title) { return title.replace(" ", "-").toLowerCase(Locale.ROOT); } - public static String getKeyName(int key) { - return switch (key) { - case GLFW_KEY_UNKNOWN -> "Unknown"; - case GLFW_KEY_ESCAPE -> "Esc"; - case GLFW_KEY_GRAVE_ACCENT -> "Grave Accent"; - case GLFW_KEY_WORLD_1 -> "World 1"; - case GLFW_KEY_WORLD_2 -> "World 2"; - case GLFW_KEY_PRINT_SCREEN -> "Print Screen"; - case GLFW_KEY_PAUSE -> "Pause"; - case GLFW_KEY_INSERT -> "Insert"; - case GLFW_KEY_DELETE -> "Delete"; - case GLFW_KEY_HOME -> "Home"; - case GLFW_KEY_PAGE_UP -> "Page Up"; - case GLFW_KEY_PAGE_DOWN -> "Page Down"; - case GLFW_KEY_END -> "End"; - case GLFW_KEY_TAB -> "Tab"; - case GLFW_KEY_LEFT_CONTROL -> "Left Control"; - case GLFW_KEY_RIGHT_CONTROL -> "Right Control"; - case GLFW_KEY_LEFT_ALT -> "Left Alt"; - case GLFW_KEY_RIGHT_ALT -> "Right Alt"; - case GLFW_KEY_LEFT_SHIFT -> "Left Shift"; - case GLFW_KEY_RIGHT_SHIFT -> "Right Shift"; - case GLFW_KEY_UP -> "Arrow Up"; - case GLFW_KEY_DOWN -> "Arrow Down"; - case GLFW_KEY_LEFT -> "Arrow Left"; - case GLFW_KEY_RIGHT -> "Arrow Right"; - case GLFW_KEY_APOSTROPHE -> "Apostrophe"; - case GLFW_KEY_BACKSPACE -> "Backspace"; - case GLFW_KEY_CAPS_LOCK -> "Caps Lock"; - case GLFW_KEY_MENU -> "Menu"; - case GLFW_KEY_LEFT_SUPER -> "Left Super"; - case GLFW_KEY_RIGHT_SUPER -> "Right Super"; - case GLFW_KEY_ENTER -> "Enter"; - case GLFW_KEY_KP_ENTER -> "Numpad Enter"; - case GLFW_KEY_NUM_LOCK -> "Num Lock"; - case GLFW_KEY_SCROLL_LOCK -> "Scroll Lock"; - case GLFW_KEY_SPACE -> "Space"; - case GLFW_KEY_F1 -> "F1"; - case GLFW_KEY_F2 -> "F2"; - case GLFW_KEY_F3 -> "F3"; - case GLFW_KEY_F4 -> "F4"; - case GLFW_KEY_F5 -> "F5"; - case GLFW_KEY_F6 -> "F6"; - case GLFW_KEY_F7 -> "F7"; - case GLFW_KEY_F8 -> "F8"; - case GLFW_KEY_F9 -> "F9"; - case GLFW_KEY_F10 -> "F10"; - case GLFW_KEY_F11 -> "F11"; - case GLFW_KEY_F12 -> "F12"; - case GLFW_KEY_F13 -> "F13"; - case GLFW_KEY_F14 -> "F14"; - case GLFW_KEY_F15 -> "F15"; - case GLFW_KEY_F16 -> "F16"; - case GLFW_KEY_F17 -> "F17"; - case GLFW_KEY_F18 -> "F18"; - case GLFW_KEY_F19 -> "F19"; - case GLFW_KEY_F20 -> "F20"; - case GLFW_KEY_F21 -> "F21"; - case GLFW_KEY_F22 -> "F22"; - case GLFW_KEY_F23 -> "F23"; - case GLFW_KEY_F24 -> "F24"; - case GLFW_KEY_F25 -> "F25"; - default -> { - String keyName = glfwGetKeyName(key, 0); - yield keyName == null ? "Unknown" : StringUtils.capitalize(keyName); - } - }; - } - - public static String getButtonName(int button) { - return switch (button) { - case -1 -> "Unknown"; - case 0 -> "Mouse Left"; - case 1 -> "Mouse Right"; - case 2 -> "Mouse Middle"; - default -> "Mouse " + button; - }; - } - public static byte[] readBytes(InputStream in) { try { return in.readAllBytes(); 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 deleted file mode 100644 index a0db6fbf835..00000000000 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/CursorStyle.java +++ /dev/null @@ -1,30 +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 org.lwjgl.glfw.GLFW; - -public enum CursorStyle { - Default, - Click, - Type; - - private boolean created; - private long cursor; - - public long getGlfwCursor() { - if (!created) { - switch (this) { - case Click -> cursor = GLFW.glfwCreateStandardCursor(GLFW.GLFW_HAND_CURSOR); - case Type -> cursor = GLFW.glfwCreateStandardCursor(GLFW.GLFW_IBEAM_CURSOR); - } - - created = true; - } - - 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 90e05c3a119..61fa056d20c 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -5,146 +5,200 @@ package meteordevelopment.meteorclient.utils.misc; -import meteordevelopment.meteorclient.utils.Utils; +import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.utils.misc.input.Input; import net.minecraft.client.input.KeyEvent; import net.minecraft.client.input.MouseButtonInfo; import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.StringTag; -import java.util.Objects; - -import static org.lwjgl.glfw.GLFW.*; +import java.util.*; public class Keybind implements ISerializable, ICopyable { - private boolean isKey; - private int value; - private int modifiers; + public enum Modifier { + SHIFT(InputConstants.MOD_SHIFT), + 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(); + + public final int mask; + + Modifier(int mask) { + this.mask = mask; + } + + public boolean isKeyPressed() { + return switch (this) { + case CONTROL -> Input.isKeyPressed(InputConstants.KEY_LCONTROL) || Input.isKeyPressed(InputConstants.KEY_RCONTROL); + case SUPER -> false; // Input.isKeyPressed(InputConstants.KEY_LSUPER) || Input.isKeyPressed(InputConstants.KEY_RSUPER); todo figure out which key is super - maybe RGUI/LGUI? + 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); + }; + } - private Keybind(boolean isKey, int value, int modifiers) { - set(isKey, value, modifiers); + private static EnumSet fromRawValue(int modifiers) { + var result = EnumSet.noneOf(Modifier.class); + for (var mod : VALUES) { + if ((mod.mask & modifiers) != 0) result.add(mod); + } + return result; + } + } + + public InputConstants.Key key; + private final EnumSet modifiers = EnumSet.noneOf(Modifier.class); + + private Keybind(InputConstants.Key key, Collection modifiers) { + this.key = key; + this.modifiers.addAll(modifiers); } public static Keybind none() { - return new Keybind(true, GLFW_KEY_UNKNOWN, 0); + return new Keybind(InputConstants.UNKNOWN, Set.of()); + } + + public static Keybind fromKey(InputConstants.Key key) { + return new Keybind(key, Set.of()); } public static Keybind fromKey(int key) { - return new Keybind(true, key, 0); + return fromKey(keyboard(key)); } - public static Keybind fromKeys(int key, int modifiers) { - return new Keybind(true, key, modifiers); + public static Keybind fromKeys(InputConstants.Key key, Collection modifiers) { + return new Keybind(key, modifiers); } - public static Keybind fromButton(int button) { - return new Keybind(false, button, 0); + public static Keybind fromKeys(InputConstants.Key key, Modifier... modifiers) { + return fromKeys(key, Arrays.asList(modifiers)); } - public int getValue() { - return value; + public static Keybind fromKeys(int key, int modifiers) { + return fromKeys(keyboard(key), Modifier.fromRawValue(modifiers)); + } + + public static Keybind fromButton(int button) { + return fromKey(mouse(button)); } public boolean isSet() { - return value != GLFW_KEY_UNKNOWN; + return !key.equals(InputConstants.UNKNOWN); } public boolean isKey() { - return isKey; + return key.getType() != InputConstants.Type.MOUSE; } public boolean hasMods() { - return isKey && modifiers != 0; + return !modifiers.isEmpty(); + } + + public int getValue() { + return key.getValue(); + } + + public void set(InputConstants.Key key, Collection modifiers) { + this.key = key; + this.modifiers.clear(); + this.modifiers.addAll(modifiers); + } + + public void set(InputConstants.Key key, Modifier... modifiers) { + set(key, Arrays.asList(modifiers)); } public void set(boolean isKey, int value, int modifiers) { - this.isKey = isKey; - this.value = value; - this.modifiers = modifiers; + set(isKey ? keyboard(value) : mouse(value), isKey ? Modifier.fromRawValue(modifiers) : Set.of()); } @Override public Keybind set(Keybind value) { - this.isKey = value.isKey; - this.value = value.value; - this.modifiers = value.modifiers; + set(value.key, value.modifiers); return this; } public void reset() { - set(true, GLFW_KEY_UNKNOWN, 0); + set(InputConstants.UNKNOWN, Set.of()); } - public boolean canBindTo(boolean isKey, int value, int modifiers) { - if (isKey) { - if (modifiers != 0 && isKeyMod(value)) return false; - return value != GLFW_KEY_UNKNOWN && value != GLFW_KEY_ESCAPE; + public boolean canBindTo(InputConstants.Key key, Collection modifiers) { + if (key.getType() != InputConstants.Type.MOUSE) { + if (!modifiers.isEmpty() && isKeyMod(key)) return false; + return !key.equals(InputConstants.UNKNOWN) && !key.equals(keyboard(InputConstants.KEY_ESCAPE)); } - return value != GLFW_MOUSE_BUTTON_LEFT && value != GLFW_MOUSE_BUTTON_RIGHT; + + return !key.equals(mouse(InputConstants.MOUSE_BUTTON_LEFT)) && !key.equals(mouse(InputConstants.MOUSE_BUTTON_RIGHT)); + } + + public boolean canBindTo(boolean isKey, int value, int modifiers) { + return canBindTo(isKey ? keyboard(value) : mouse(value), isKey ? Modifier.fromRawValue(modifiers) : Set.of()); + } + + public boolean matches(InputConstants.Key key, Set modifiers) { + if (!isSet() || !this.key.equals(key)) return false; + return !hasMods() || this.modifiers.equals(modifiers); } public boolean matches(boolean isKey, int value, int modifiers) { - if (!this.isSet() || this.isKey != isKey) return false; - if (!hasMods()) return this.value == value; - return this.value == value && this.modifiers == modifiers; + return matches(isKey ? keyboard(value) : mouse(value), isKey ? Modifier.fromRawValue(modifiers) : Set.of()); } public boolean matches(KeyEvent input) { - return matches(true, input.key(), input.modifiers()); + return matches(InputConstants.getKey(input), Modifier.fromRawValue(input.modifiers())); } public boolean matches(MouseButtonInfo input) { - return matches(false, input.button(), 0); + return matches(mouse(input.button()), Set.of()); } public boolean isPressed() { - return isKey ? modifiersPressed() && Input.isKeyPressed(value) : Input.isButtonPressed(value); + if (key.getType() == InputConstants.Type.MOUSE) return Input.isButtonPressed(key.getValue()); + + return modifiersPressed() && Input.isKeyPressed(key.getValue()); } private boolean modifiersPressed() { if (!hasMods()) return true; - if (!isModPressed(GLFW_MOD_CONTROL, GLFW_KEY_LEFT_CONTROL, GLFW_KEY_RIGHT_CONTROL)) return false; - if (!isModPressed(GLFW_MOD_SUPER, GLFW_KEY_LEFT_SUPER, GLFW_KEY_RIGHT_SUPER)) return false; - if (!isModPressed(GLFW_MOD_ALT, GLFW_KEY_LEFT_ALT, GLFW_KEY_RIGHT_ALT)) return false; - if (!isModPressed(GLFW_MOD_SHIFT, GLFW_KEY_LEFT_SHIFT, GLFW_KEY_RIGHT_SHIFT)) return false; - - return true; - } - - private boolean isModPressed(int value, int... keys) { - if ((modifiers & value) == 0) return true; - - for (int key : keys) { - if (Input.isKeyPressed(key)) return true; + for (Modifier modifier : modifiers) { + if (!modifier.isKeyPressed()) return false; } - return false; + return true; } - private boolean isKeyMod(int key) { - return key >= GLFW_KEY_LEFT_SHIFT && key <= GLFW_KEY_RIGHT_SUPER; + private boolean isKeyMod(InputConstants.Key key) { + return key.getValue() >= InputConstants.KEY_LCONTROL && key.getValue() <= InputConstants.KEY_RGUI; } @Override public Keybind copy() { - return new Keybind(isKey, value, modifiers); + return new Keybind(key, modifiers); } @Override public String toString() { if (!isSet()) return "None"; - if (!isKey) return Utils.getButtonName(value); - if (modifiers == 0) return Utils.getKeyName(value); + if (key.getType() == InputConstants.Type.MOUSE) return key.getDisplayName().getString(); + if (modifiers.isEmpty()) return key.getDisplayName().getString(); StringBuilder label = new StringBuilder(); - if ((modifiers & GLFW_MOD_CONTROL) != 0) label.append("Ctrl + "); - if ((modifiers & GLFW_MOD_SUPER) != 0) label.append("Cmd + "); - if ((modifiers & GLFW_MOD_ALT) != 0) label.append("Alt + "); - if ((modifiers & GLFW_MOD_SHIFT) != 0) label.append("Shift + "); - if ((modifiers & GLFW_MOD_CAPS_LOCK) != 0) label.append("Caps Lock + "); - if ((modifiers & GLFW_MOD_NUM_LOCK) != 0) label.append("Num Lock + "); - label.append(Utils.getKeyName(value)); + if (modifiers.contains(Modifier.CONTROL)) label.append("Ctrl + "); + 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(); } @@ -154,12 +208,12 @@ public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Keybind keybind = (Keybind) o; - return isKey == keybind.isKey && value == keybind.value && modifiers == keybind.modifiers; + return key.equals(keybind.key) && modifiers.equals(keybind.modifiers); } @Override public int hashCode() { - return Objects.hash(isKey, value, modifiers); + return Objects.hash(key, modifiers); } // Serialization @@ -168,19 +222,52 @@ public int hashCode() { public CompoundTag toTag() { CompoundTag tag = new CompoundTag(); - tag.putBoolean("isKey", isKey); - tag.putInt("value", value); - tag.putInt("modifiers", modifiers); + tag.putString("key", key.getName()); + + ListTag modifiersTag = new ListTag(); + for (Modifier modifier : modifiers) { + modifiersTag.add(StringTag.valueOf(modifier.name())); + } + tag.put("modifiers", modifiersTag); return tag; } @Override public Keybind fromTag(CompoundTag tag) { - isKey = tag.getBooleanOr("isKey", false); - value = tag.getIntOr("value", 0); - modifiers = tag.getIntOr("modifiers", 0); + if (tag.contains("key")) { + // New format: key name + modifier enum names + try { + key = InputConstants.getKey(tag.getStringOr("key", "")); + } catch (IllegalArgumentException e) { + key = InputConstants.UNKNOWN; + } + + modifiers.clear(); + ListTag modifiersTag = tag.getListOrEmpty("modifiers"); + for (int i = 0; i < modifiersTag.size(); i++) { + try { + modifiers.add(Modifier.valueOf(modifiersTag.getStringOr(i, ""))); + } catch (IllegalArgumentException ignored) {} + } + } else { + // Legacy format: raw ints (GLFW) + boolean isKey = tag.getBooleanOr("isKey", true); + int value = tag.getIntOr("value", InputConstants.UNKNOWN.getValue()); + int mods = tag.getIntOr("modifiers", 0); + + set(isKey ? keyboard(value) : mouse(value), isKey ? Modifier.fromRawValue(mods) : Set.of()); + } return this; } + + private static InputConstants.Key keyboard(int key) { + return InputConstants.Type.KEYBOARD.getOrCreate(key); + } + + private static InputConstants.Key mouse(int button) { + return InputConstants.Type.MOUSE.getOrCreate(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 72b974aa74d..27c4a2b3dd5 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,18 @@ 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 org.lwjgl.glfw.GLFW; - -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 Input() { } @@ -45,7 +44,7 @@ public static boolean isPressed(KeyMapping bind) { public static boolean isKeyPressed(int key) { if (!GuiKeyEvents.canUseKeys) return false; - if (key == GLFW.GLFW_KEY_UNKNOWN) return false; + if (key == InputConstants.UNKNOWN.getValue()) return false; return key < keys.length && keys[key]; } @@ -54,19 +53,19 @@ 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) { - GLFW.glfwSetCursor(mc.getWindow().handle(), style.getGlfwCursor()); + style.select(); lastCursorStyle = style; } } public static int getModifier(int key) { return switch (key) { - case GLFW.GLFW_KEY_LEFT_SHIFT, GLFW.GLFW_KEY_RIGHT_SHIFT -> GLFW.GLFW_MOD_SHIFT; - case GLFW.GLFW_KEY_LEFT_CONTROL, GLFW.GLFW_KEY_RIGHT_CONTROL -> GLFW.GLFW_MOD_CONTROL; - case GLFW.GLFW_KEY_LEFT_ALT, GLFW.GLFW_KEY_RIGHT_ALT -> GLFW.GLFW_MOD_ALT; - case GLFW.GLFW_KEY_LEFT_SUPER, GLFW.GLFW_KEY_RIGHT_SUPER -> GLFW.GLFW_MOD_SUPER; + 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; default -> 0; }; } diff --git a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyAction.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyAction.java index 33533f23d5b..a3e121451bf 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyAction.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyAction.java @@ -5,7 +5,7 @@ package meteordevelopment.meteorclient.utils.misc.input; -import org.lwjgl.glfw.GLFW; +import com.mojang.blaze3d.platform.InputConstants; public enum KeyAction { Press, @@ -14,8 +14,8 @@ public enum KeyAction { public static KeyAction get(int action) { return switch (action) { - case GLFW.GLFW_PRESS -> Press; - case GLFW.GLFW_RELEASE -> Release; + case InputConstants.PRESS -> Press; + case InputConstants.RELEASE -> Release; default -> Repeat; }; } 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 337c213630f..979b516f8e0 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/input/KeyBinds.java @@ -8,13 +8,12 @@ import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.MeteorClient; import net.minecraft.client.KeyMapping; -import org.lwjgl.glfw.GLFW; 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, GLFW.GLFW_KEY_RIGHT_SHIFT, CATEGORY); - public static KeyMapping OPEN_COMMANDS = new KeyMapping("key.meteor-client.open-commands", InputConstants.Type.KEYSYM, GLFW.GLFW_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 d691c745cc1..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 org.lwjgl.glfw.GLFW; import static meteordevelopment.meteorclient.MeteorClient.mc; @@ -61,7 +61,7 @@ public boolean keyPressed(@NonNull KeyEvent input) { } } - if (input.key() == GLFW.GLFW_KEY_ESCAPE || mc.options.keyInventory.matches(input)) { + if (input.key() == InputConstants.KEY_ESCAPE || mc.options.keyInventory.matches(input)) { onClose(); return true; } 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..3792f817ad5 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,7 @@ 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.server.packs.resources.Resource; import net.minecraft.world.entity.Entity; import org.jspecify.annotations.NonNull; @@ -90,7 +91,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 +118,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 DynamicGpuDataStorage<>("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..55e371b7f63 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,11 @@ 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 org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; @@ -21,18 +22,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 DynamicGpuDataStorage<>("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 bc98170544f..5c783d1a024 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -1,23 +1,24 @@ 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.renderer.DynamicUniformStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorage; import org.joml.Vector4f; import org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; import static meteordevelopment.meteorclient.MeteorClient.mc; -import static org.lwjgl.glfw.GLFW.glfwGetTime; public abstract class PostProcessShader { protected final RenderPipeline pipeline; @@ -25,8 +26,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 +61,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) glfwGetTime() + (float) Blaze3D.getTime() ))) .sampler("u_Texture", framebuffer.getColorTextureView(), RenderSystem.getSamplerCache().getClampToEdge(FilterMode.NEAREST)); @@ -83,13 +84,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 DynamicGpuDataStorage<>("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/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.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 0ed52d2eb88..8982a7da4fd 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", @@ -160,6 +162,7 @@ "OptionsMixin", "PacketBundlingMixin", "ParticleEngineMixin", + "PipelineCacheAccessor", "PlayerAccessor", "PlayerInfoMixin", "PlayerMixin", From 451348c6c0db38bb396b9a6010384fd7442a6576 Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Fri, 21 Aug 2026 18:37:20 +0100 Subject: [PATCH 2/9] microfix --- .../meteorclient/mixin/AvatarRendererMixin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java index 1b9e6109683..29af12fc358 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/AvatarRendererMixin.java @@ -81,7 +81,7 @@ public AvatarRendererMixin(EntityRendererProvider.Context ctx, PlayerModel model @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, poseStack, renderType, light, OverlayTexture.NO_OVERLAY, uvMapping); + instance.submitModelPart(modelPart, poseStack, renderType, light, OverlayTexture.NO_OVERLAY, uvMapping, chams.handColor.get().getPacked(), 0); return false; } From a3f3c6d408713975dd1ccfee86d65fb8e5f6c5eb Mon Sep 17 00:00:00 2001 From: Wide_Cat Date: Thu, 3 Sep 2026 01:34:57 +0100 Subject: [PATCH 3/9] Update to 26.3-pre.1 Less rendering crashes, but it's all still super broken --- gradle/libs.versions.toml | 4 +- .../commands/commands/DropCommand.java | 8 +- .../meteorclient/mixin/LocalPlayerMixin.java | 7 -- .../mixin/MultiPlayerGameModeMixin.java | 6 + .../mixin/ShaderManagerMixin.java | 2 +- .../meteorclient/mixin/SkyRendererMixin.java | 2 +- .../meteorclient/renderer/MeshUniforms.java | 3 +- .../renderer/MeteorRenderPipelines.java | 116 +++++++++++------- .../renderer/MeteorVertexFormats.java | 6 +- .../systems/modules/render/HandView.java | 13 +- .../systems/modules/render/ItemPhysics.java | 7 +- .../utils/render/postprocess/ChamsShader.java | 3 +- .../render/postprocess/OutlineUniforms.java | 3 +- .../render/postprocess/PostProcessShader.java | 3 +- .../shaders/{blur.vert => blur.vsh} | 5 +- .../shaders/{blur_down.frag => blur_down.fsh} | 7 +- .../shaders/{blur_up.frag => blur_up.fsh} | 7 +- .../meteor-client/shaders/passthrough.frag | 12 -- .../meteor-client/shaders/passthrough.fsh | 13 ++ .../{passthrough.vert => passthrough.vsh} | 5 +- .../meteor-client/shaders/pos_color.frag | 9 -- .../meteor-client/shaders/pos_color.fsh | 10 ++ .../shaders/{pos_color.vert => pos_color.vsh} | 5 +- .../meteor-client/shaders/pos_tex_color.frag | 12 -- .../meteor-client/shaders/pos_tex_color.fsh | 13 ++ .../shaders/{text.vert => pos_tex_color.vsh} | 7 +- .../post-process/{base.vert => base.vsh} | 7 +- .../post-process/{image.frag => image.fsh} | 9 +- .../{outline.frag => outline.fsh} | 9 +- .../assets/meteor-client/shaders/text.frag | 12 -- .../assets/meteor-client/shaders/text.fsh | 13 ++ .../shaders/{pos_tex_color.vert => text.vsh} | 7 +- 32 files changed, 196 insertions(+), 149 deletions(-) rename src/main/resources/assets/meteor-client/shaders/{blur.vert => blur.vsh} (61%) rename src/main/resources/assets/meteor-client/shaders/{blur_down.frag => blur_down.fsh} (79%) rename src/main/resources/assets/meteor-client/shaders/{blur_up.frag => blur_up.fsh} (85%) delete mode 100644 src/main/resources/assets/meteor-client/shaders/passthrough.frag create mode 100644 src/main/resources/assets/meteor-client/shaders/passthrough.fsh rename src/main/resources/assets/meteor-client/shaders/{passthrough.vert => passthrough.vsh} (61%) delete mode 100644 src/main/resources/assets/meteor-client/shaders/pos_color.frag create mode 100644 src/main/resources/assets/meteor-client/shaders/pos_color.fsh rename src/main/resources/assets/meteor-client/shaders/{pos_color.vert => pos_color.vsh} (70%) delete mode 100644 src/main/resources/assets/meteor-client/shaders/pos_tex_color.frag create mode 100644 src/main/resources/assets/meteor-client/shaders/pos_tex_color.fsh rename src/main/resources/assets/meteor-client/shaders/{text.vert => pos_tex_color.vsh} (67%) rename src/main/resources/assets/meteor-client/shaders/post-process/{base.vert => base.vsh} (62%) rename src/main/resources/assets/meteor-client/shaders/post-process/{image.frag => image.fsh} (57%) rename src/main/resources/assets/meteor-client/shaders/post-process/{outline.frag => outline.fsh} (86%) delete mode 100644 src/main/resources/assets/meteor-client/shaders/text.frag create mode 100644 src/main/resources/assets/meteor-client/shaders/text.fsh rename src/main/resources/assets/meteor-client/shaders/{pos_tex_color.vert => text.vsh} (67%) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5522abc4893..0f922fa956b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,9 +1,9 @@ [versions] # Fabric (https://fabricmc.net/develop) jdk = "25" -minecraft = "26.3-snapshot-9" +minecraft = "26.3-pre-1" fabric-loader = "0.19.3" -fabric-api = "0.158.0+26.3" +fabric-api = "0.159.1+26.3" # Plugins # Loom (https://github.com/FabricMC/fabric-loom) 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/mixin/LocalPlayerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LocalPlayerMixin.java index 0ccb0017be8..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; @@ -50,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, CallbackInfo ci) { - if (MeteorClient.EVENT_BUS.post(DropItemsEvent.get(getMainHandItem())).isCancelled()) - ci.cancel(); - } - @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; 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/ShaderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java index d553a829a64..37097af5ba9 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java @@ -16,7 +16,7 @@ @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(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ShaderManager$CompilationCache;close()V")) + @Inject(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ShaderManager$PostChainCache;close()V")) private void meteor$reloadPipelines(CallbackInfo ci, @Local 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 608d61f418d..d59ad578379 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/SkyRendererMixin.java @@ -30,7 +30,7 @@ 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/DynamicGpuData;writeTransform(Lorg/joml/Matrix4f;)Lcom/mojang/renderpearl/api/buffers/GpuBufferSlice;")) diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java index a910f1faac3..d105bc63541 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshUniforms.java @@ -10,6 +10,7 @@ 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; @@ -23,7 +24,7 @@ public class MeshUniforms { private static final Data DATA = new Data(); - private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorage<>("Meteor - Mesh UBO", SIZE, GpuBuffer.USAGE_UNIFORM, 16); + private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Mesh UBO", SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { STORAGE.endFrame(); diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java index 5248cce5954..79cd02c698c 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java @@ -7,19 +7,24 @@ 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.mixin.PipelineCacheAccessor; +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<>(); @@ -38,9 +43,9 @@ 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")) + .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) + .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) @@ -50,9 +55,9 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED_LINES = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .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")) + .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) + .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) @@ -61,9 +66,9 @@ 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")) + .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) + .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) @@ -73,9 +78,9 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED_LINES_DEPTH = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .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")) + .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) + .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) @@ -87,8 +92,8 @@ 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")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -98,8 +103,8 @@ 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")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) .withColorTargetState(new ColorTargetState(BlendFunction.TRANSLUCENT)) .withCull(true) @@ -109,9 +114,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) @@ -121,9 +128,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) @@ -135,10 +144,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()) @@ -151,11 +160,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()) @@ -170,10 +179,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)) @@ -185,10 +194,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)) @@ -200,9 +209,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,19 +228,36 @@ public static void precompile(PipelineCache cache) { GpuDevice device = RenderSystem.getDevice(); ResourceManager resources = Minecraft.getInstance().getResourceManager(); - - for (RenderPipeline pipeline : PIPELINES) { - CompiledRenderPipeline newPipeline = device.compilePipeline(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); - pipelineAccessor.getCache().put(pipeline, newPipeline); + try (CompiledRenderPipeline newPipeline = pendingPipeline.join().finishCompile()) { + pipelineAccessor.getCache().put(pipeline, newPipeline); + } } } diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java index 48f7f91503f..80fad688eeb 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java @@ -15,18 +15,18 @@ public abstract class MeteorVertexFormats { // POS2: 2D position (x, y) public static final VertexFormat POS2 = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) .build(); // POS2_COLOR: 2D position + RGBA color (4 bytes, normalized) public static final VertexFormat POS2_COLOR = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) .addAttribute("Color", GpuFormat.RGBA8_UNORM) // 4 bytes (RGBA, 0-255) .build(); // POS2_TEXTURE_COLOR: 2D position + UV texture coords + RGBA color public static final VertexFormat POS2_TEXTURE_COLOR = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) .addAttribute("Texture", GpuFormat.RG32_FLOAT) // 2 floats (u, v) .addAttribute("Color", GpuFormat.RGBA8_UNORM) // 4 bytes (RGBA, 0-255) .build(); 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 484818ef6b5..4ab2dfdb685 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java @@ -15,6 +15,7 @@ import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.orbit.EventHandler; import net.minecraft.world.InteractionHand; +import org.joml.Matrix4f; import org.joml.Vector3d; public class HandView extends Module { @@ -178,6 +179,8 @@ public class HandView extends Module { .build() ); + private final Matrix4f matrix4f = new Matrix4f(); + public HandView() { super(Categories.Render, "hand-view", "Alters the way items are rendered in your hands."); } @@ -207,9 +210,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.mulPose(Axis.XP.rotateDegrees(this.matrix4f, (float) rotation.x)); + matrix.mulPose(Axis.YP.rotateDegrees(this.matrix4f, (float) rotation.y)); + matrix.mulPose(Axis.ZP.rotateDegrees(this.matrix4f, (float) rotation.z)); } private void scale(PoseStack matrix, Vector3d scale) { @@ -221,8 +224,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.mulPose(Axis.XP.rotateDegrees(this.matrix4f, mc.player.getXRot() - Rotations.serverPitch)); + matrix.mulPose(Axis.YP.rotateDegrees(this.matrix4f, 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 b2eb6cc0e5e..12b51b8658f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -23,6 +23,7 @@ import net.minecraft.client.resources.model.geometry.BakedQuad; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.item.ItemEntity; +import org.joml.Matrix4f; import org.joml.Vector3f; import org.joml.Vector3fc; @@ -43,6 +44,8 @@ public class ItemPhysics extends Module { private final RandomSource random = RandomSource.createThreadLocalInstance(); private boolean skipTransformation; + private final Matrix4f matrix4f = new Matrix4f(); + public ItemPhysics() { super(Categories.Render, "item-physics", "Applies physics to items on the ground."); } @@ -68,7 +71,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { offsetInWater(matrices, event.itemEntity); if (info.flat) { - matrices.mulPose(Axis.XP.rotationDegrees(90)); + matrices.mulPose(Axis.XP.rotateDegrees(matrix4f, 90)); matrices.translate(0, 0, info.offsetZ); } @@ -87,7 +90,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { float degrees = (random.nextFloat() * 2 - 1) * 90; matrices.translate(x, y, z); - matrices.mulPose(axis.rotationDegrees(degrees)); + matrices.mulPose(axis.rotateDegrees(matrix4f, degrees)); matrices.translate(-x, -y, -z); } 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 3792f817ad5..5e9e346dc66 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/ChamsShader.java @@ -22,6 +22,7 @@ import meteordevelopment.meteorclient.utils.render.color.Color; import meteordevelopment.orbit.EventHandler; 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; @@ -118,7 +119,7 @@ public boolean shouldDraw(Entity entity) { .putVec4() .get(); - private static final DynamicGpuDataStorage UNIFORM_STORAGE = new DynamicGpuDataStorage<>("Meteor - Image UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 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(); 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 55e371b7f63..dbca96e7a64 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/OutlineUniforms.java @@ -10,6 +10,7 @@ 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; @@ -22,7 +23,7 @@ public class OutlineUniforms { .putFloat() .get(); - private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorage<>("Meteor - Outline UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); + private static final DynamicGpuDataStorage STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Outline UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { STORAGE.endFrame(); 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 5c783d1a024..248e3a2d273 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -13,6 +13,7 @@ import meteordevelopment.meteorclient.MeteorClient; import meteordevelopment.meteorclient.renderer.MeshRenderer; import net.minecraft.client.renderer.DynamicGpuDataStorage; +import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; import org.joml.Vector4f; import org.jspecify.annotations.NonNull; @@ -85,7 +86,7 @@ public void onResized(int width, int height) { .get(); // todo what should usage be? not just here but everywhere else also - private static final DynamicGpuDataStorage UNIFORM_STORAGE = new DynamicGpuDataStorage<>("Meteor - Post UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); + private static final DynamicGpuDataStorage UNIFORM_STORAGE = new DynamicGpuDataStorageMapped<>("Meteor - Post UBO", UNIFORM_SIZE, GpuBuffer.USAGE_UNIFORM, 16); public static void flipFrame() { UNIFORM_STORAGE.endFrame(); diff --git a/src/main/resources/assets/meteor-client/shaders/blur.vert b/src/main/resources/assets/meteor-client/shaders/blur.vsh similarity index 61% rename from src/main/resources/assets/meteor-client/shaders/blur.vert rename to src/main/resources/assets/meteor-client/shaders/blur.vsh index 334da5f4825..6de00d66ac6 100644 --- a/src/main/resources/assets/meteor-client/shaders/blur.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/passthrough.vert b/src/main/resources/assets/meteor-client/shaders/passthrough.vsh similarity index 61% rename from src/main/resources/assets/meteor-client/shaders/passthrough.vert rename to src/main/resources/assets/meteor-client/shaders/passthrough.vsh index 334da5f4825..6de00d66ac6 100644 --- a/src/main/resources/assets/meteor-client/shaders/passthrough.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.vsh similarity index 70% rename from src/main/resources/assets/meteor-client/shaders/pos_color.vert rename to src/main/resources/assets/meteor-client/shaders/pos_color.vsh index a5cc401b772..b872a1604e7 100644 --- a/src/main/resources/assets/meteor-client/shaders/pos_color.vert +++ b/src/main/resources/assets/meteor-client/shaders/pos_color.vsh @@ -1,4 +1,5 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require layout (location = 0) in vec4 Position; layout (location = 1) in vec4 Color; @@ -8,7 +9,7 @@ layout (std140) uniform MeshData { mat4 u_ModelView; }; -out vec4 v_Color; +layout (location = 0) out vec4 v_Color; void main() { gl_Position = u_Proj * u_ModelView * Position; 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/text.vert b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh similarity index 67% rename from src/main/resources/assets/meteor-client/shaders/text.vert rename to src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh index 429facab50b..2e31ed23827 100644 --- a/src/main/resources/assets/meteor-client/shaders/text.vert +++ b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh @@ -1,4 +1,5 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require layout (location = 0) in vec4 Position; layout (location = 1) in vec2 Texture; @@ -9,8 +10,8 @@ layout (std140) uniform MeshData { mat4 u_ModelView; }; -out vec2 v_TexCoord; -out vec4 v_Color; +layout (location = 0) out vec2 v_TexCoord; +layout (location = 1) out vec4 v_Color; void main() { gl_Position = u_Proj * u_ModelView * Position; 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/pos_tex_color.vert b/src/main/resources/assets/meteor-client/shaders/text.vsh similarity index 67% rename from src/main/resources/assets/meteor-client/shaders/pos_tex_color.vert rename to src/main/resources/assets/meteor-client/shaders/text.vsh index 429facab50b..2e31ed23827 100644 --- a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vert +++ b/src/main/resources/assets/meteor-client/shaders/text.vsh @@ -1,4 +1,5 @@ -#version 330 core +#version 330 +#extension GL_ARB_separate_shader_objects : require layout (location = 0) in vec4 Position; layout (location = 1) in vec2 Texture; @@ -9,8 +10,8 @@ layout (std140) uniform MeshData { mat4 u_ModelView; }; -out vec2 v_TexCoord; -out vec4 v_Color; +layout (location = 0) out vec2 v_TexCoord; +layout (location = 1) out vec4 v_Color; void main() { gl_Position = u_Proj * u_ModelView * Position; From a64a4cf520d999361f514d23e0e040a9a10ca8ef Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Thu, 3 Sep 2026 16:28:44 +0200 Subject: [PATCH 4/9] Fix rendering --- .../mixin/PipelineCacheAccessor.java | 20 ------------ .../mixin/ShaderManagerMixin.java | 2 +- .../meteorclient/renderer/MeshRenderer.java | 31 ++++++++++++++----- .../renderer/MeteorRenderPipelines.java | 19 ++++++------ .../renderer/MeteorVertexFormats.java | 6 ++-- .../meteor-client/shaders/pos_color.vsh | 12 +++++-- .../meteor-client/shaders/pos_tex_color.vsh | 4 +-- .../assets/meteor-client/shaders/text.vsh | 4 +-- src/main/resources/meteor-client.mixins.json | 1 - 9 files changed, 51 insertions(+), 48 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java b/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java deleted file mode 100644 index 5876c6dfabb..00000000000 --- a/src/main/java/meteordevelopment/meteorclient/mixin/PipelineCacheAccessor.java +++ /dev/null @@ -1,20 +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.mojang.blaze3d.pipeline.PipelineCache; -import com.mojang.renderpearl.api.pipeline.CompiledRenderPipeline; -import com.mojang.renderpearl.api.pipeline.RenderPipeline; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.gen.Accessor; - -import java.util.Map; - -@Mixin(PipelineCache.class) -public interface PipelineCacheAccessor { - @Accessor("cache") - Map getCache(); -} diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java index 37097af5ba9..8af617f664e 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/ShaderManagerMixin.java @@ -17,7 +17,7 @@ @Mixin(ShaderManager.class) public abstract class ShaderManagerMixin { @Inject(method = "apply", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/ShaderManager$PostChainCache;close()V")) - private void meteor$reloadPipelines(CallbackInfo ci, @Local PipelineCache pipelineCache) { + private void meteor$reloadPipelines(CallbackInfo ci, @Local(ordinal = 0) PipelineCache pipelineCache) { MeteorRenderPipelines.precompile(pipelineCache); } } diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java index e91491b225d..6e9bf852654 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java @@ -147,7 +147,6 @@ public void end() { : (int) (indexBuffer != null ? indexBuffer.length() / indexType.bytes : -1); if (indexCount > 0) { - if (Utils.rendering3D || matrix != null) { RenderSystem.getModelViewStack().pushMatrix(); } @@ -165,8 +164,11 @@ 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); + + GpuBufferSlice vertexBuffer = mesh != null ? mesh.getVertexBuffer().slice() : Objects.requireNonNull(this.vertexBuffer); + GpuBufferSlice indexBuffer = mesh != null ? mesh.getIndexBuffer().slice() : Objects.requireNonNull(this.indexBuffer); + + int vertexOffset = getVertexOffset(vertexBuffer); int firstIndex = getFirstIndex(indexBuffer); GpuBufferSlice meshData = MeshUniforms.write(RenderUtils.projection, RenderSystem.getModelViewStack()); @@ -182,18 +184,23 @@ public void end() { pass.setUniform(entry.getKey(), entry.getValue()); } -// for (var entry : samplers.entrySet()) { -// pass.bindTexture(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); -// } + for (var entry : samplers.entrySet()) { + pass.setUniform(entry.getKey(), entry.getValue().textureView, entry.getValue().sampler); + } pass.setVertexBuffer(0, vertexBuffer); pass.setIndexBuffer(indexBuffer.buffer(), indexType); - pass.drawIndexed(indexCount, 1, firstIndex, 0, 0); + pass.drawIndexed(indexCount, 1, 0, 0, 0); } if (Utils.rendering3D || matrix != null) { RenderSystem.getModelViewStack().popMatrix(); } + + if (mesh != null) { + vertexBuffer.buffer().close(); + indexBuffer.buffer().close(); + } } colorAttachment = null; @@ -211,6 +218,16 @@ public void end() { taken = false; } + private int getVertexOffset(GpuBufferSlice vertexBuffer) { + var size = pipeline.getVertexFormatBinding(0).getVertexSize(); + + if (vertexBuffer.offset() % size != 0) { + throw new IllegalArgumentException("Vertex buffer offset must be aligned to " + size + " bytes."); + } + + return Math.toIntExact(vertexBuffer.offset() / size); + } + private int getFirstIndex(GpuBufferSlice indexBuffer) { if (indexBuffer.offset() % indexType.bytes != 0) { throw new IllegalArgumentException("Index buffer offset must be aligned to " + indexType.bytes + " bytes."); diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java index 79cd02c698c..9fc2935d31c 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorRenderPipelines.java @@ -7,10 +7,10 @@ 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.mixin.PipelineCacheAccessor; import meteordevelopment.meteorclient.utils.network.MeteorExecutor; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.ShaderManager; @@ -43,7 +43,7 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLocation(MeteorClient.identifier("pipeline/world_colored")) - .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) + .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -55,7 +55,7 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED_LINES = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLineSmooth() .withLocation(MeteorClient.identifier("pipeline/world_colored_lines")) - .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) + .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(CompareOp.ALWAYS_PASS, false)) @@ -66,7 +66,7 @@ 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, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) + .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(DepthStencilState.DEFAULT.depthTest(), false)) @@ -78,7 +78,7 @@ public abstract class MeteorRenderPipelines { public static final RenderPipeline WORLD_COLORED_LINES_DEPTH = add(new ExtendedRenderPipelineBuilder(MESH_UNIFORMS) .withLineSmooth() .withLocation(MeteorClient.identifier("pipeline/world_colored_lines_depth")) - .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) + .withVertexBinding(0, DefaultVertexFormat.POSITION_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) .withVertexShader(MeteorClient.identifier("shaders/pos_color.vsh")) .withFragmentShader(MeteorClient.identifier("shaders/pos_color.fsh")) .withDepthStencilState(new DepthStencilState(DepthStencilState.DEFAULT.depthTest(), false)) @@ -94,6 +94,7 @@ public abstract class MeteorRenderPipelines { .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.TRIANGLES) .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) @@ -105,6 +106,7 @@ public abstract class MeteorRenderPipelines { .withVertexBinding(0, MeteorVertexFormats.POS2_COLOR).withPrimitiveTopology(PrimitiveTopology.DEBUG_LINES) .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) @@ -224,8 +226,6 @@ private static RenderPipeline add(RenderPipeline pipeline) { } public static void precompile(PipelineCache cache) { - PipelineCacheAccessor pipelineAccessor = (PipelineCacheAccessor) cache; - GpuDevice device = RenderSystem.getDevice(); ResourceManager resources = Minecraft.getInstance().getResourceManager(); final Map includes = ShaderManager.listAllIncludes(resources); @@ -255,9 +255,8 @@ public void close() { for (RenderPipeline pipeline : PIPELINES) { CompletableFuture pendingPipeline = device.compilePipeline(pipeline, shaderSource, MeteorExecutor.executor); - try (CompiledRenderPipeline newPipeline = pendingPipeline.join().finishCompile()) { - pipelineAccessor.getCache().put(pipeline, newPipeline); - } + 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 80fad688eeb..48f7f91503f 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeteorVertexFormats.java @@ -15,18 +15,18 @@ public abstract class MeteorVertexFormats { // POS2: 2D position (x, y) public static final VertexFormat POS2 = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) .build(); // POS2_COLOR: 2D position + RGBA color (4 bytes, normalized) public static final VertexFormat POS2_COLOR = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) .addAttribute("Color", GpuFormat.RGBA8_UNORM) // 4 bytes (RGBA, 0-255) .build(); // POS2_TEXTURE_COLOR: 2D position + UV texture coords + RGBA color public static final VertexFormat POS2_TEXTURE_COLOR = VertexFormat.builder(STEP_RATE) - .addAttribute("Position", GpuFormat.RGBA32_FLOAT) // 2 floats (x, y) + .addAttribute("Position", GpuFormat.RG32_FLOAT) // 2 floats (x, y) .addAttribute("Texture", GpuFormat.RG32_FLOAT) // 2 floats (u, v) .addAttribute("Color", GpuFormat.RGBA8_UNORM) // 4 bytes (RGBA, 0-255) .build(); diff --git a/src/main/resources/assets/meteor-client/shaders/pos_color.vsh b/src/main/resources/assets/meteor-client/shaders/pos_color.vsh index b872a1604e7..77298e42dff 100644 --- a/src/main/resources/assets/meteor-client/shaders/pos_color.vsh +++ b/src/main/resources/assets/meteor-client/shaders/pos_color.vsh @@ -1,7 +1,15 @@ #version 330 #extension GL_ARB_separate_shader_objects : require -layout (location = 0) in vec4 Position; +#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 { @@ -12,7 +20,7 @@ layout (std140) uniform MeshData { layout (location = 0) out vec4 v_Color; void main() { - gl_Position = u_Proj * u_ModelView * Position; + 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.vsh b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh index 2e31ed23827..95ead1a0638 100644 --- a/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh +++ b/src/main/resources/assets/meteor-client/shaders/pos_tex_color.vsh @@ -1,7 +1,7 @@ #version 330 #extension GL_ARB_separate_shader_objects : require -layout (location = 0) in vec4 Position; +layout (location = 0) in vec2 Position; layout (location = 1) in vec2 Texture; layout (location = 2) in vec4 Color; @@ -14,7 +14,7 @@ layout (location = 0) out vec2 v_TexCoord; layout (location = 1) out vec4 v_Color; void main() { - gl_Position = u_Proj * u_ModelView * Position; + 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/text.vsh b/src/main/resources/assets/meteor-client/shaders/text.vsh index 2e31ed23827..95ead1a0638 100644 --- a/src/main/resources/assets/meteor-client/shaders/text.vsh +++ b/src/main/resources/assets/meteor-client/shaders/text.vsh @@ -1,7 +1,7 @@ #version 330 #extension GL_ARB_separate_shader_objects : require -layout (location = 0) in vec4 Position; +layout (location = 0) in vec2 Position; layout (location = 1) in vec2 Texture; layout (location = 2) in vec4 Color; @@ -14,7 +14,7 @@ layout (location = 0) out vec2 v_TexCoord; layout (location = 1) out vec4 v_Color; void main() { - gl_Position = u_Proj * u_ModelView * Position; + 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.mixins.json b/src/main/resources/meteor-client.mixins.json index 8982a7da4fd..f5523560625 100644 --- a/src/main/resources/meteor-client.mixins.json +++ b/src/main/resources/meteor-client.mixins.json @@ -162,7 +162,6 @@ "OptionsMixin", "PacketBundlingMixin", "ParticleEngineMixin", - "PipelineCacheAccessor", "PlayerAccessor", "PlayerInfoMixin", "PlayerMixin", From 7a0c4032dcdac91af3968ff8c96de5fb096eba3d Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Thu, 3 Sep 2026 16:31:34 +0200 Subject: [PATCH 5/9] Forgot about this --- .../meteorclient/renderer/MeshRenderer.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java index 6e9bf852654..8707ad9fda2 100644 --- a/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java +++ b/src/main/java/meteordevelopment/meteorclient/renderer/MeshRenderer.java @@ -165,10 +165,9 @@ public void end() { CommandEncoder encoder = RenderSystem.getDevice().createCommandEncoder(); - GpuBufferSlice vertexBuffer = mesh != null ? mesh.getVertexBuffer().slice() : Objects.requireNonNull(this.vertexBuffer); - GpuBufferSlice indexBuffer = mesh != null ? mesh.getIndexBuffer().slice() : Objects.requireNonNull(this.indexBuffer); + GpuBufferSlice vertexBuffer = mesh != null ? mesh.uploadVertexBuffer(encoder) : Objects.requireNonNull(this.vertexBuffer); + GpuBufferSlice indexBuffer = mesh != null ? mesh.uploadIndexBuffer(encoder) : Objects.requireNonNull(this.indexBuffer); - int vertexOffset = getVertexOffset(vertexBuffer); int firstIndex = getFirstIndex(indexBuffer); GpuBufferSlice meshData = MeshUniforms.write(RenderUtils.projection, RenderSystem.getModelViewStack()); @@ -190,17 +189,12 @@ public void end() { pass.setVertexBuffer(0, vertexBuffer); pass.setIndexBuffer(indexBuffer.buffer(), indexType); - pass.drawIndexed(indexCount, 1, 0, 0, 0); + pass.drawIndexed(indexCount, 1, firstIndex, 0, 0); } if (Utils.rendering3D || matrix != null) { RenderSystem.getModelViewStack().popMatrix(); } - - if (mesh != null) { - vertexBuffer.buffer().close(); - indexBuffer.buffer().close(); - } } colorAttachment = null; @@ -218,16 +212,6 @@ public void end() { taken = false; } - private int getVertexOffset(GpuBufferSlice vertexBuffer) { - var size = pipeline.getVertexFormatBinding(0).getVertexSize(); - - if (vertexBuffer.offset() % size != 0) { - throw new IllegalArgumentException("Vertex buffer offset must be aligned to " + size + " bytes."); - } - - return Math.toIntExact(vertexBuffer.offset() / size); - } - private int getFirstIndex(GpuBufferSlice indexBuffer) { if (indexBuffer.offset() % indexType.bytes != 0) { throw new IllegalArgumentException("Index buffer offset must be aligned to " + indexType.bytes + " bytes."); From 97590b0bd51bf063cae14adca38427c99fd90337 Mon Sep 17 00:00:00 2001 From: Dek Date: Wed, 7 Oct 2026 16:58:28 -0300 Subject: [PATCH 6/9] Fixed entity shaders running LevelRenderer#executeOutline outside the main pass --- .../meteorclient/mixin/LevelRendererMixin.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java index d48a6a501e9..2748587f6b5 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/LevelRendererMixin.java @@ -9,8 +9,10 @@ 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; @@ -39,6 +41,8 @@ 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; @@ -123,8 +127,14 @@ private void draw(LevelRenderState worldState, PoseStack matrices, EntityShader meteor$pushEntityOutlineFramebuffer(shader.framebuffer); try { - try (var frame = renderDispatcher.prepareFrame(outlineRenderCommandQueue)) { - executeOutline(frame); + // 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(); @@ -160,9 +170,6 @@ private void onResize(int width, int height, CallbackInfo ci) { @Final private RenderBuffers renderBuffers; - @Shadow - protected abstract void executeOutline(FeatureRenderDispatcher.PreparedFrame featureFrame); - @Unique private Stack framebufferStack; From c95af3291feba04d6846d12c53014c20f480574a Mon Sep 17 00:00:00 2001 From: Dek Date: Wed, 7 Oct 2026 17:04:43 -0300 Subject: [PATCH 7/9] Fixed HandView and ItemPhysics rotations accumulating every frame and text boxes never starting SDL text input --- .../meteorclient/gui/widgets/input/WTextBox.java | 3 +++ .../systems/modules/render/HandView.java | 13 +++++-------- .../systems/modules/render/ItemPhysics.java | 7 ++----- 3 files changed, 10 insertions(+), 13 deletions(-) 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 c0ee3a49700..5740b65fe5c 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/widgets/input/WTextBox.java @@ -718,6 +718,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/systems/modules/render/HandView.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java index 4ab2dfdb685..dcbfd4f783f 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/HandView.java @@ -15,7 +15,6 @@ import meteordevelopment.meteorclient.utils.player.Rotations; import meteordevelopment.orbit.EventHandler; import net.minecraft.world.InteractionHand; -import org.joml.Matrix4f; import org.joml.Vector3d; public class HandView extends Module { @@ -179,8 +178,6 @@ public class HandView extends Module { .build() ); - private final Matrix4f matrix4f = new Matrix4f(); - public HandView() { super(Categories.Render, "hand-view", "Alters the way items are rendered in your hands."); } @@ -210,9 +207,9 @@ private void onRenderArm(ArmRenderEvent event) { } private void rotate(PoseStack matrix, Vector3d rotation) { - matrix.mulPose(Axis.XP.rotateDegrees(this.matrix4f, (float) rotation.x)); - matrix.mulPose(Axis.YP.rotateDegrees(this.matrix4f, (float) rotation.y)); - matrix.mulPose(Axis.ZP.rotateDegrees(this.matrix4f, (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) { @@ -224,8 +221,8 @@ private void translate(PoseStack matrix, Vector3d translation) { } private void applyServerRotations(PoseStack matrix) { - matrix.mulPose(Axis.XP.rotateDegrees(this.matrix4f, mc.player.getXRot() - Rotations.serverPitch)); - matrix.mulPose(Axis.YP.rotateDegrees(this.matrix4f, 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 12b51b8658f..6f899a466fe 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/ItemPhysics.java @@ -23,7 +23,6 @@ import net.minecraft.client.resources.model.geometry.BakedQuad; import net.minecraft.util.RandomSource; import net.minecraft.world.entity.item.ItemEntity; -import org.joml.Matrix4f; import org.joml.Vector3f; import org.joml.Vector3fc; @@ -44,8 +43,6 @@ public class ItemPhysics extends Module { private final RandomSource random = RandomSource.createThreadLocalInstance(); private boolean skipTransformation; - private final Matrix4f matrix4f = new Matrix4f(); - public ItemPhysics() { super(Categories.Render, "item-physics", "Applies physics to items on the ground."); } @@ -71,7 +68,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { offsetInWater(matrices, event.itemEntity); if (info.flat) { - matrices.mulPose(Axis.XP.rotateDegrees(matrix4f, 90)); + matrices.rotateDegrees(Axis.XP, 90); matrices.translate(0, 0, info.offsetZ); } @@ -90,7 +87,7 @@ private void onRenderItemEntity(RenderItemEntityEvent event) { float degrees = (random.nextFloat() * 2 - 1) * 90; matrices.translate(x, y, z); - matrices.mulPose(axis.rotateDegrees(matrix4f, degrees)); + matrices.rotateDegrees(axis, degrees); matrices.translate(-x, -y, -z); } From dd5de9efa7b7132270764dfa507074d44045d9a3 Mon Sep 17 00:00:00 2001 From: Dek Date: Wed, 7 Oct 2026 17:15:35 -0300 Subject: [PATCH 8/9] Fixed item tooltips with Meteor tooltip data crashing: the List overload was no longer hooked --- .../mixin/GuiGraphicsExtractorMixin.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java index d5c7469ec0c..6611fdbe50d 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/GuiGraphicsExtractorMixin.java @@ -8,14 +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.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; -import net.minecraft.resources.Identifier; -import net.minecraft.util.FormattedCharSequence; 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; @@ -27,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;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(Font font, List tooltip, Optional component, ClientTooltipPositioner positioner, int xo, int yo, boolean replaceExisting, @Nullable Identifier style, CallbackInfo ci, @Local(name = "components") List components) { - if (component.isPresent() && component.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;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")) + @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; From c951120d4811f5a440cd48279f5fbe1f44f9cb6a Mon Sep 17 00:00:00 2001 From: MineGame159 Date: Sat, 10 Oct 2026 16:13:31 +0200 Subject: [PATCH 9/9] Update to 26.3 --- gradle/libs.versions.toml | 18 ++++++++-------- gradle/wrapper/gradle-wrapper.properties | 7 ++----- .../commands/commands/NotebotCommand.java | 5 +++-- .../gui/screens/CommitsScreen.java | 11 +++++----- .../meteorclient/mixin/ClientLevelMixin.java | 4 ++-- .../viafabricplus/GeneralSettingsMixin.java | 21 ------------------- .../systems/accounts/MicrosoftLogin.java | 5 +++-- .../hud/elements/keyboard/KeyboardHud.java | 15 ++++++------- .../systems/modules/misc/DiscordPresence.java | 5 +++-- .../systems/modules/misc/swarm/Swarm.java | 6 ++++-- .../meteorclient/utils/misc/Keybind.java | 6 +++--- .../utils/misc/input/KeyBinds.java | 4 ++-- .../render/postprocess/PostProcessShader.java | 2 +- .../meteor-client-viafabricplus.mixins.json | 1 - 14 files changed, 46 insertions(+), 64 deletions(-) delete mode 100644 src/main/java/meteordevelopment/meteorclient/mixin/viafabricplus/GeneralSettingsMixin.java diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0eaa256716f..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.3-pre-1" -fabric-loader = "0.19.3" -fabric-api = "0.159.1+26.3" +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/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/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/mixin/ClientLevelMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/ClientLevelMixin.java index 9f0135be996..78d16a1c38a 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 = "addBreakingBlockEffects", at = @At("HEAD"), cancellable = true) + private void onAddBlockBreakingParticles(BlockPos pos, Direction direction, boolean playSound, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noParticle(ParticleTypes.BLOCK)) ci.cancel(); } 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/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/hud/elements/keyboard/KeyboardHud.java b/src/main/java/meteordevelopment/meteorclient/systems/hud/elements/keyboard/KeyboardHud.java index 3ecb8f757fd..82124b222e1 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 @@ -38,6 +38,7 @@ import net.minecraft.nbt.ListTag; import net.minecraft.nbt.Tag; import net.minecraft.util.Mth; +import org.lwjgl.sdl.SDLKeycode; import java.util.ArrayList; import java.util.Iterator; @@ -380,7 +381,7 @@ private void buildAnsiLayout(LayoutContext l) { double xPos = 0; 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(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(KEY_LALT), xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; @@ -388,9 +389,9 @@ private void buildAnsiLayout(LayoutContext l) { xPos += l.px(KeyDimensions.SPACEBAR) + l.keyGap; 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(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(KEY_MENU), xPos, row5, KeyDimensions.MENU)); + keys.add(l.key(Keybind.fromKey(SDLKeycode.SDLK_MENU), xPos, row5, KeyDimensions.MENU)); xPos += l.px(KeyDimensions.MENU) + l.keyGap; 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)); @@ -451,7 +452,7 @@ private void buildIsoLayout(LayoutContext l) { // Row 4: LShift, ISO \| key, ZXCV..., RShift, Up 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(KEY_WORLD_2), lShiftEnd, row4)); + //keys.add(l.key(Keybind.fromKey(KEY_WORLD_2), lShiftEnd, row4)); TODO: wtf is WORLD_2 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++) @@ -465,7 +466,7 @@ private void buildIsoLayout(LayoutContext l) { double xPos = 0; 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(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(KEY_LALT), xPos, row5, KeyDimensions.ALT)); xPos += l.px(KeyDimensions.ALT) + l.keyGap; @@ -473,9 +474,9 @@ private void buildIsoLayout(LayoutContext l) { xPos += l.px(KeyDimensions.SPACEBAR) + l.keyGap; 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(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(KEY_MEN), xPos, row5, KeyDimensions.MENU)); + keys.add(l.key(Keybind.fromKey(SDLKeycode.SDLK_MENU), xPos, row5, KeyDimensions.MENU)); xPos += l.px(KeyDimensions.MENU) + l.keyGap; 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)); 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/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/utils/misc/Keybind.java b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java index 4141ecfe423..662f05f05a8 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/misc/Keybind.java @@ -36,7 +36,7 @@ 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); @@ -180,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_LALT && key.getValue() <= InputConstants.KEY_RGUI; } @Override @@ -266,7 +266,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/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/render/postprocess/PostProcessShader.java b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java index e7bfaf03638..43029b13e51 100644 --- a/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java +++ b/src/main/java/meteordevelopment/meteorclient/utils/render/postprocess/PostProcessShader.java @@ -12,9 +12,9 @@ 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.DynamicGpuDataStorage; import net.minecraft.client.renderer.DynamicGpuDataStorageMapped; -import org.joml.Vector4f; import org.jspecify.annotations.NonNull; import java.nio.ByteBuffer; 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