From 66e4a12819c62162e2b2a1bb1f7deff241a0fa37 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sun, 8 Mar 2026 01:23:26 +0100 Subject: [PATCH] Improved implementation of ref --- common | 2 +- .../impl/SaturnClientProvider.java | 41 ++----------------- .../impl/mixins/IdentifierMixin.java | 10 +++++ .../impl/mixins/ItemStackMixin.java | 19 +++++++++ .../impl/mixins/MatrixStackMixin.java | 10 ++--- .../impl/mixins/MinecraftClientMixin.java | 33 ++++++++++++++- .../impl/mixins/QuaternionfMixin.java | 10 +++++ .../impl/modules/ArmorDisplayFabric.java | 39 ++++++------------ .../impl/modules/StatusEffectsFabric.java | 6 +-- .../saturnclient/SaturnClient.java | 4 +- .../saturnclient/event/KeyInputHandler.java | 6 +-- .../org/saturnclient/ui/EntityDrawerImpl.java | 4 +- .../org/saturnclient/ui/RenderScopeImpl.java | 17 ++++---- 13 files changed, 112 insertions(+), 89 deletions(-) create mode 100644 versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/IdentifierMixin.java create mode 100644 versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/ItemStackMixin.java create mode 100644 versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/QuaternionfMixin.java diff --git a/common b/common index d47360e..7eb705d 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit d47360ecd7a60374e8ea091560831e07fe6be204 +Subproject commit 7eb705d80206a286152f21404462ff33f5bb371c diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/SaturnClientProvider.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/SaturnClientProvider.java index 92ad718..95a912b 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/SaturnClientProvider.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/SaturnClientProvider.java @@ -3,31 +3,20 @@ package org.saturnclient.impl; import java.awt.image.BufferedImage; import org.lwjgl.glfw.GLFW; -import org.saturnclient.common.MinecraftProvider; +import org.saturnclient.common.provider.SaturnProvider; import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.common.ref.game.MinecraftClientRef; import org.saturnclient.cosmetics.cloak.utils.IdentifierUtils; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.ui.SaturnScreen; -import org.saturnclient.ui.SaturnScreenFabric; -import org.saturnclient.ui.screens.TitleMenu; -import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; -import net.minecraft.client.gui.screen.option.OptionsScreen; -import net.minecraft.client.gui.screen.world.SelectWorldScreen; import net.minecraft.util.Identifier; -public class SaturnClientProvider extends MinecraftProvider { +public class SaturnClientProvider implements SaturnProvider { @Override public MinecraftClientRef getClient() { return (MinecraftClientRef) SaturnClient.client; } - @Override - public Object createIdentifier(String namespace, String path) { - return Identifier.of(namespace, path); - } - @Override public boolean isKeyPressed(int key) { return GLFW.glfwGetKey(SaturnClient.client.getWindow().getHandle(), key) == GLFW.GLFW_PRESS @@ -41,7 +30,7 @@ public class SaturnClientProvider extends MinecraftProvider { @Override public void registerBufferedImageTexture(IdentifierRef i, BufferedImage bi) { - IdentifierUtils.registerBufferedImageTextureFast((Identifier) i.inner, bi); + IdentifierUtils.registerBufferedImageTextureFast((Identifier) (Object) i, bi); } @Override @@ -49,29 +38,7 @@ public class SaturnClientProvider extends MinecraftProvider { return GLFW.glfwGetKeyName(key, GLFW.glfwGetKeyScancode(key)); } - @Override - public void setScreen(SaturnScreen screen) { - SaturnClient.client.setScreen(new SaturnScreenFabric(screen)); - } - - @Override - public void setScreen(MinecraftScreen screen) { - SaturnScreenFabric exitTarget = new SaturnScreenFabric(new TitleMenu()); - - switch (screen) { - case SelectWorld: - SaturnClient.client.setScreen(new SelectWorldScreen(exitTarget)); - break; - - case Multiplayer: - SaturnClient.client.setScreen(new MultiplayerScreen(exitTarget)); - break; - - case Options: - SaturnClient.client.setScreen(new OptionsScreen(exitTarget, SaturnClient.client.options)); - break; - } - } + @Override public void stop() { diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/IdentifierMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/IdentifierMixin.java new file mode 100644 index 0000000..c7ed64c --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/IdentifierMixin.java @@ -0,0 +1,10 @@ +package org.saturnclient.impl.mixins; + +import org.saturnclient.common.ref.asset.IdentifierRef; +import org.spongepowered.asm.mixin.Mixin; + +import net.minecraft.client.util.Window; + +@Mixin(Window.class) +public abstract class IdentifierMixin implements IdentifierRef { +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/ItemStackMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/ItemStackMixin.java new file mode 100644 index 0000000..9a69341 --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/ItemStackMixin.java @@ -0,0 +1,19 @@ +package org.saturnclient.impl.mixins; + +import org.saturnclient.common.ref.game.ItemStackRef; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.item.ItemStack; + +@Mixin(ItemStack.class) +public abstract class ItemStackMixin implements ItemStackRef { + @Shadow + public abstract boolean isEmpty(); + + @Shadow + public abstract int getMaxDamage(); + + @Shadow + public abstract int getDamage(); +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java index 8e914c5..d8e88a4 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MatrixStackMixin.java @@ -2,7 +2,7 @@ package org.saturnclient.impl.mixins; import org.joml.Quaternionf; import org.saturnclient.common.ref.render.MatrixStackRef; -import org.saturnclient.common.ref.render.SaturnQuaternionf; +import org.saturnclient.common.ref.render.QuaternionfRef; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.gen.Invoker; @@ -43,13 +43,13 @@ public abstract class MatrixStackMixin implements MatrixStackRef { public abstract void loadIdentity(); @Override - public void multiply(SaturnQuaternionf quaternion) { - this.multiply((Quaternionf) quaternion.inner); + public void multiply(QuaternionfRef quaternion) { + this.multiply((Quaternionf) quaternion); } @Override - public void multiply(SaturnQuaternionf quaternion, float originX, float originY, float originZ) { - this.multiply((Quaternionf) quaternion.inner, originX, originY, originZ); + public void multiply(QuaternionfRef quaternion, float originX, float originY, float originZ) { + this.multiply((Quaternionf) quaternion, originX, originY, originZ); } @Override diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MinecraftClientMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MinecraftClientMixin.java index 0b9f868..f871430 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MinecraftClientMixin.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/MinecraftClientMixin.java @@ -6,10 +6,17 @@ import java.io.InputStream; import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.common.ref.game.MinecraftClientRef; import org.saturnclient.common.ref.render.WindowRef; +import org.saturnclient.saturnclient.SaturnClient; +import org.saturnclient.ui.SaturnScreen; +import org.saturnclient.ui.SaturnScreenFabric; +import org.saturnclient.ui.screens.TitleMenu; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; +import net.minecraft.client.gui.screen.option.OptionsScreen; +import net.minecraft.client.gui.screen.world.SelectWorldScreen; import net.minecraft.client.util.Window; import net.minecraft.resource.ReloadableResourceManagerImpl; import net.minecraft.util.Identifier; @@ -33,7 +40,7 @@ public class MinecraftClientMixin implements MinecraftClientRef { @Override public InputStream getResource(IdentifierRef identifier) { try { - return resourceManager.getResource((Identifier) identifier.inner).get().getInputStream(); + return resourceManager.getResource((Identifier) (Object) identifier).get().getInputStream(); } catch (Exception e) { return null; } @@ -43,4 +50,28 @@ public class MinecraftClientMixin implements MinecraftClientRef { public WindowRef getWindow() { return (WindowRef) (Object) this.window; } + + @Override + public void setScreen(SaturnScreen screen) { + SaturnClient.client.setScreen(new SaturnScreenFabric(screen)); + } + + @Override + public void setScreen(MinecraftScreen screen) { + SaturnScreenFabric exitTarget = new SaturnScreenFabric(new TitleMenu()); + + switch (screen) { + case SelectWorld: + SaturnClient.client.setScreen(new SelectWorldScreen(exitTarget)); + break; + + case Multiplayer: + SaturnClient.client.setScreen(new MultiplayerScreen(exitTarget)); + break; + + case Options: + SaturnClient.client.setScreen(new OptionsScreen(exitTarget, SaturnClient.client.options)); + break; + } + } } diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/QuaternionfMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/QuaternionfMixin.java new file mode 100644 index 0000000..b2a4d97 --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/QuaternionfMixin.java @@ -0,0 +1,10 @@ +package org.saturnclient.impl.mixins; + +import org.saturnclient.common.ref.render.QuaternionfRef; +import org.spongepowered.asm.mixin.Mixin; + +import net.minecraft.item.ItemStack; + +@Mixin(ItemStack.class) +public abstract class QuaternionfMixin implements QuaternionfRef { +} diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java index ddc9a32..4e0d386 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/ArmorDisplayFabric.java @@ -10,74 +10,59 @@ import net.minecraft.item.Items; public class ArmorDisplayFabric implements ArmorDisplayInterface { - private ItemStack get(EquipmentSlot slot) { - return MinecraftClient.getInstance().player.getEquippedStack(slot); + private ItemStackRef get(EquipmentSlot slot) { + return (ItemStackRef) (Object) MinecraftClient.getInstance().player.getEquippedStack(slot); } @Override public ItemStackRef getMainHand() { - return new ItemStackRef(get(EquipmentSlot.MAINHAND)); + return get(EquipmentSlot.MAINHAND); } @Override public ItemStackRef getHelmet() { - return new ItemStackRef(get(EquipmentSlot.HEAD)); + return get(EquipmentSlot.HEAD); } @Override public ItemStackRef getChestplate() { - return new ItemStackRef(get(EquipmentSlot.CHEST)); + return get(EquipmentSlot.CHEST); } @Override public ItemStackRef getLeggings() { - return new ItemStackRef(get(EquipmentSlot.LEGS)); + return get(EquipmentSlot.LEGS); } @Override public ItemStackRef getBoots() { - return new ItemStackRef(get(EquipmentSlot.FEET)); - } - - @Override - public boolean isEmpty(ItemStackRef stack) { - return ((ItemStack) stack.get()).isEmpty(); - } - - @Override - public int getMaxDamage(ItemStackRef stack) { - return ((ItemStack) stack.get()).getMaxDamage(); - } - - @Override - public int getDamage(ItemStackRef stack) { - return ((ItemStack) stack.get()).getDamage(); + return get(EquipmentSlot.FEET); } // Dummy items @Override public ItemStackRef getDummyMainHand() { - return new ItemStackRef(new ItemStack(Items.DIAMOND_SWORD)); + return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_SWORD); } @Override public ItemStackRef getDummyHelmet() { - return new ItemStackRef(new ItemStack(Items.DIAMOND_HELMET)); + return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_HELMET); } @Override public ItemStackRef getDummyChestplate() { - return new ItemStackRef(new ItemStack(Items.DIAMOND_CHESTPLATE)); + return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_CHESTPLATE); } @Override public ItemStackRef getDummyLeggings() { - return new ItemStackRef(new ItemStack(Items.DIAMOND_LEGGINGS)); + return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_LEGGINGS); } @Override public ItemStackRef getDummyBoots() { - return new ItemStackRef(new ItemStack(Items.DIAMOND_BOOTS)); + return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_BOOTS); } } \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java index a353a05..aedcdaa 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/StatusEffectsFabric.java @@ -21,7 +21,7 @@ public class StatusEffectsFabric implements StatusEffectsInterface { return mc.player.getStatusEffects().stream() .filter(StatusEffectInstance::shouldShowIcon) .map(se -> new Effect( - new SpriteRef(manager.getSprite(se.getEffectType())), + (SpriteRef) manager.getSprite(se.getEffectType()), se.getDuration() / 20, se.isInfinite(), se.shouldShowIcon(), @@ -32,7 +32,7 @@ public class StatusEffectsFabric implements StatusEffectsInterface { @Override public List getDummyEffects() { return Arrays.asList( - new Effect(new SpriteRef(null), 600, false, true, "Infinite"), - new Effect(new SpriteRef(null), 600, false, true, "Infinite")); + new Effect(null, 600, false, true, "Infinite"), + new Effect(null, 600, false, true, "Infinite")); } } \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java index 727b45c..742b1fa 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/SaturnClient.java @@ -9,8 +9,8 @@ import org.saturnclient.client.ServiceClient; import org.saturnclient.cosmetics.Emotes; import org.saturnclient.cosmetics.Hats; import org.saturnclient.cosmetics.cloak.Cloaks; -import org.saturnclient.common.MinecraftProvider; import org.saturnclient.common.bindings.SaturnClientBindings; +import org.saturnclient.common.provider.Providers; import org.saturnclient.impl.FabricModuleProvider; import org.saturnclient.impl.SaturnClientProvider; import org.saturnclient.modules.ModManager; @@ -41,7 +41,7 @@ public class SaturnClient implements ModInitializer { LOGGER.info("Initializing " + MOD_ID); client = MinecraftClient.getInstance(); - MinecraftProvider.PROVIDER = new SaturnClientProvider(); + Providers.saturn = new SaturnClientProvider(); ElementRenderer.INSTANCE = new ElementRendererImpl(); diff --git a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java index 3186db6..0c44972 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java @@ -7,7 +7,7 @@ import net.minecraft.client.util.InputUtil; import org.saturnclient.config.Config; import org.saturnclient.client.ServiceClient; -import org.saturnclient.common.MinecraftProvider; +import org.saturnclient.common.provider.Providers; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.ui.screens.EmoteWheel; import org.saturnclient.ui.screens.ShiftMenu; @@ -37,12 +37,12 @@ public class KeyInputHandler { // Register the event handler for the main menu key ClientTickEvents.END_CLIENT_TICK.register(client -> { if (mainMenuKeyBinding.wasPressed()) { - MinecraftProvider.PROVIDER.setScreen(new ShiftMenu()); + Providers.saturn.getClient().setScreen(new ShiftMenu()); } if (Config.openEmoteWheel.wasKeyPressed() && client.currentScreen == null && !InputUtil.isKeyPressed(client.getWindow().getHandle(), GLFW.GLFW_KEY_F3)) { - MinecraftProvider.PROVIDER.setScreen(new EmoteWheel()); + Providers.saturn.getClient().setScreen(new EmoteWheel()); } if (SaturnClient.client.player != null && SaturnClient.client.player.isSneaking()) { diff --git a/versions/1.21.4/src/main/java/org/saturnclient/ui/EntityDrawerImpl.java b/versions/1.21.4/src/main/java/org/saturnclient/ui/EntityDrawerImpl.java index 50b2139..b57eb22 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/ui/EntityDrawerImpl.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/ui/EntityDrawerImpl.java @@ -3,7 +3,7 @@ package org.saturnclient.ui; import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; import org.joml.Vector3f; -import org.saturnclient.common.ref.render.SaturnQuaternionf; +import org.saturnclient.common.ref.render.QuaternionfRef; import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.ui.components.SkinPreview.EntityDrawer; @@ -53,7 +53,7 @@ public class EntityDrawerImpl implements EntityDrawer { renderScope.getMatrixStack().translate((double) x, (double) y, 50.0); renderScope.getMatrixStack().scale(size, size, -size); renderScope.getMatrixStack().translate(vector3f.x, vector3f.y, vector3f.z); - renderScope.getMatrixStack().multiply(new SaturnQuaternionf(quaternionf)); + renderScope.getMatrixStack().multiply((QuaternionfRef) quaternionf); renderScope.draw(); DiffuseLighting.method_34742(); EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher(); diff --git a/versions/1.21.4/src/main/java/org/saturnclient/ui/RenderScopeImpl.java b/versions/1.21.4/src/main/java/org/saturnclient/ui/RenderScopeImpl.java index aafeb1b..361bbfe 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/ui/RenderScopeImpl.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/ui/RenderScopeImpl.java @@ -10,7 +10,7 @@ import org.joml.Matrix4f; import com.mojang.blaze3d.systems.RenderSystem; -import org.saturnclient.common.MinecraftProvider; +import org.saturnclient.common.provider.Providers; import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.common.ref.asset.SpriteRef; import org.saturnclient.common.ref.game.ItemStackRef; @@ -238,7 +238,8 @@ public class RenderScopeImpl implements RenderScope { public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height, int regionWidth, int regionHeight, int textureWidth, int textureHeight, int color) { - this.drawTexturedQuad((Identifier) sprite.inner, x, x + width, y, y + height, (u + 0.0F) / (float) textureWidth, + this.drawTexturedQuad((Identifier) (Object) sprite, x, x + width, y, y + height, + (u + 0.0F) / (float) textureWidth, (u + (float) regionWidth) / (float) textureWidth, (v + 0.0F) / (float) textureHeight, (v + (float) regionHeight) / (float) textureHeight, color); } @@ -269,9 +270,9 @@ public class RenderScopeImpl implements RenderScope { float v2, int color) { if (sprite.toString().endsWith(".svg")) { - sprite = (Identifier) SvgTexture.getSvg(MinecraftProvider.PROVIDER.getClient(), - new IdentifierRef(sprite), - (x2 - x1) * 2, (y2 - y1) * 2).inner; + sprite = (Identifier) (Object) SvgTexture.getSvg(Providers.saturn.getClient(), + (IdentifierRef) (Object) sprite, + (x2 - x1) * 2, (y2 - y1) * 2); } if (color == 0) @@ -382,7 +383,7 @@ public class RenderScopeImpl implements RenderScope { @Override public void drawItem(ItemStackRef stack, int x, int y, int seed, int z) { - this.drawItem(SaturnClient.client.player, SaturnClient.client.world, (ItemStack) stack.inner, x, y, seed, z); + this.drawItem(SaturnClient.client.player, SaturnClient.client.world, (ItemStack) (Object) stack, x, y, seed, z); } @Override @@ -397,7 +398,7 @@ public class RenderScopeImpl implements RenderScope { private void drawItem(@Nullable LivingEntity entity, @Nullable World world, ItemStackRef stack, int x, int y, int seed) { - this.drawItem(entity, world, (ItemStack) stack.inner, x, y, seed, 0); + this.drawItem(entity, world, (ItemStack) (Object) stack, x, y, seed, 0); } private void drawItem(@Nullable LivingEntity entity, @Nullable World world, ItemStack stack, int x, int y, int seed, @@ -448,7 +449,7 @@ public class RenderScopeImpl implements RenderScope { @Override public void drawSpriteStretched(SpriteRef saturnSprite, int x, int y, int width, int height, int color) { - Sprite sprite = (Sprite) saturnSprite.inner; + Sprite sprite = (Sprite) saturnSprite; if (color == 0) return; if (width != 0 && height != 0) {