Improved implementation of ref

This commit is contained in:
2026-03-08 01:23:26 +01:00
parent 216b1707ae
commit 66e4a12819
13 changed files with 112 additions and 89 deletions
+1 -1
Submodule common updated: d47360ecd7...7eb705d802
@@ -3,31 +3,20 @@ package org.saturnclient.impl;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import org.lwjgl.glfw.GLFW; 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.asset.IdentifierRef;
import org.saturnclient.common.ref.game.MinecraftClientRef; import org.saturnclient.common.ref.game.MinecraftClientRef;
import org.saturnclient.cosmetics.cloak.utils.IdentifierUtils; import org.saturnclient.cosmetics.cloak.utils.IdentifierUtils;
import org.saturnclient.saturnclient.SaturnClient; 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; import net.minecraft.util.Identifier;
public class SaturnClientProvider extends MinecraftProvider { public class SaturnClientProvider implements SaturnProvider {
@Override @Override
public MinecraftClientRef getClient() { public MinecraftClientRef getClient() {
return (MinecraftClientRef) SaturnClient.client; return (MinecraftClientRef) SaturnClient.client;
} }
@Override
public Object createIdentifier(String namespace, String path) {
return Identifier.of(namespace, path);
}
@Override @Override
public boolean isKeyPressed(int key) { public boolean isKeyPressed(int key) {
return GLFW.glfwGetKey(SaturnClient.client.getWindow().getHandle(), key) == GLFW.GLFW_PRESS return GLFW.glfwGetKey(SaturnClient.client.getWindow().getHandle(), key) == GLFW.GLFW_PRESS
@@ -41,7 +30,7 @@ public class SaturnClientProvider extends MinecraftProvider {
@Override @Override
public void registerBufferedImageTexture(IdentifierRef i, BufferedImage bi) { public void registerBufferedImageTexture(IdentifierRef i, BufferedImage bi) {
IdentifierUtils.registerBufferedImageTextureFast((Identifier) i.inner, bi); IdentifierUtils.registerBufferedImageTextureFast((Identifier) (Object) i, bi);
} }
@Override @Override
@@ -49,29 +38,7 @@ public class SaturnClientProvider extends MinecraftProvider {
return GLFW.glfwGetKeyName(key, GLFW.glfwGetKeyScancode(key)); 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 @Override
public void stop() { public void stop() {
@@ -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 {
}
@@ -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();
}
@@ -2,7 +2,7 @@ package org.saturnclient.impl.mixins;
import org.joml.Quaternionf; import org.joml.Quaternionf;
import org.saturnclient.common.ref.render.MatrixStackRef; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.asm.mixin.gen.Invoker;
@@ -43,13 +43,13 @@ public abstract class MatrixStackMixin implements MatrixStackRef {
public abstract void loadIdentity(); public abstract void loadIdentity();
@Override @Override
public void multiply(SaturnQuaternionf quaternion) { public void multiply(QuaternionfRef quaternion) {
this.multiply((Quaternionf) quaternion.inner); this.multiply((Quaternionf) quaternion);
} }
@Override @Override
public void multiply(SaturnQuaternionf quaternion, float originX, float originY, float originZ) { public void multiply(QuaternionfRef quaternion, float originX, float originY, float originZ) {
this.multiply((Quaternionf) quaternion.inner, originX, originY, originZ); this.multiply((Quaternionf) quaternion, originX, originY, originZ);
} }
@Override @Override
@@ -6,10 +6,17 @@ import java.io.InputStream;
import org.saturnclient.common.ref.asset.IdentifierRef; import org.saturnclient.common.ref.asset.IdentifierRef;
import org.saturnclient.common.ref.game.MinecraftClientRef; import org.saturnclient.common.ref.game.MinecraftClientRef;
import org.saturnclient.common.ref.render.WindowRef; 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.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
import net.minecraft.client.MinecraftClient; 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.client.util.Window;
import net.minecraft.resource.ReloadableResourceManagerImpl; import net.minecraft.resource.ReloadableResourceManagerImpl;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
@@ -33,7 +40,7 @@ public class MinecraftClientMixin implements MinecraftClientRef {
@Override @Override
public InputStream getResource(IdentifierRef identifier) { public InputStream getResource(IdentifierRef identifier) {
try { try {
return resourceManager.getResource((Identifier) identifier.inner).get().getInputStream(); return resourceManager.getResource((Identifier) (Object) identifier).get().getInputStream();
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
@@ -43,4 +50,28 @@ public class MinecraftClientMixin implements MinecraftClientRef {
public WindowRef getWindow() { public WindowRef getWindow() {
return (WindowRef) (Object) this.window; 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;
}
}
} }
@@ -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 {
}
@@ -10,74 +10,59 @@ import net.minecraft.item.Items;
public class ArmorDisplayFabric implements ArmorDisplayInterface { public class ArmorDisplayFabric implements ArmorDisplayInterface {
private ItemStack get(EquipmentSlot slot) { private ItemStackRef get(EquipmentSlot slot) {
return MinecraftClient.getInstance().player.getEquippedStack(slot); return (ItemStackRef) (Object) MinecraftClient.getInstance().player.getEquippedStack(slot);
} }
@Override @Override
public ItemStackRef getMainHand() { public ItemStackRef getMainHand() {
return new ItemStackRef(get(EquipmentSlot.MAINHAND)); return get(EquipmentSlot.MAINHAND);
} }
@Override @Override
public ItemStackRef getHelmet() { public ItemStackRef getHelmet() {
return new ItemStackRef(get(EquipmentSlot.HEAD)); return get(EquipmentSlot.HEAD);
} }
@Override @Override
public ItemStackRef getChestplate() { public ItemStackRef getChestplate() {
return new ItemStackRef(get(EquipmentSlot.CHEST)); return get(EquipmentSlot.CHEST);
} }
@Override @Override
public ItemStackRef getLeggings() { public ItemStackRef getLeggings() {
return new ItemStackRef(get(EquipmentSlot.LEGS)); return get(EquipmentSlot.LEGS);
} }
@Override @Override
public ItemStackRef getBoots() { public ItemStackRef getBoots() {
return new ItemStackRef(get(EquipmentSlot.FEET)); return 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();
} }
// Dummy items // Dummy items
@Override @Override
public ItemStackRef getDummyMainHand() { public ItemStackRef getDummyMainHand() {
return new ItemStackRef(new ItemStack(Items.DIAMOND_SWORD)); return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_SWORD);
} }
@Override @Override
public ItemStackRef getDummyHelmet() { public ItemStackRef getDummyHelmet() {
return new ItemStackRef(new ItemStack(Items.DIAMOND_HELMET)); return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_HELMET);
} }
@Override @Override
public ItemStackRef getDummyChestplate() { public ItemStackRef getDummyChestplate() {
return new ItemStackRef(new ItemStack(Items.DIAMOND_CHESTPLATE)); return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_CHESTPLATE);
} }
@Override @Override
public ItemStackRef getDummyLeggings() { public ItemStackRef getDummyLeggings() {
return new ItemStackRef(new ItemStack(Items.DIAMOND_LEGGINGS)); return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_LEGGINGS);
} }
@Override @Override
public ItemStackRef getDummyBoots() { public ItemStackRef getDummyBoots() {
return new ItemStackRef(new ItemStack(Items.DIAMOND_BOOTS)); return (ItemStackRef) (Object) new ItemStack(Items.DIAMOND_BOOTS);
} }
} }
@@ -21,7 +21,7 @@ public class StatusEffectsFabric implements StatusEffectsInterface {
return mc.player.getStatusEffects().stream() return mc.player.getStatusEffects().stream()
.filter(StatusEffectInstance::shouldShowIcon) .filter(StatusEffectInstance::shouldShowIcon)
.map(se -> new Effect( .map(se -> new Effect(
new SpriteRef(manager.getSprite(se.getEffectType())), (SpriteRef) manager.getSprite(se.getEffectType()),
se.getDuration() / 20, se.getDuration() / 20,
se.isInfinite(), se.isInfinite(),
se.shouldShowIcon(), se.shouldShowIcon(),
@@ -32,7 +32,7 @@ public class StatusEffectsFabric implements StatusEffectsInterface {
@Override @Override
public List<Effect> getDummyEffects() { public List<Effect> getDummyEffects() {
return Arrays.asList( return Arrays.asList(
new Effect(new SpriteRef(null), 600, false, true, "Infinite"), new Effect(null, 600, false, true, "Infinite"),
new Effect(new SpriteRef(null), 600, false, true, "Infinite")); new Effect(null, 600, false, true, "Infinite"));
} }
} }
@@ -9,8 +9,8 @@ import org.saturnclient.client.ServiceClient;
import org.saturnclient.cosmetics.Emotes; import org.saturnclient.cosmetics.Emotes;
import org.saturnclient.cosmetics.Hats; import org.saturnclient.cosmetics.Hats;
import org.saturnclient.cosmetics.cloak.Cloaks; import org.saturnclient.cosmetics.cloak.Cloaks;
import org.saturnclient.common.MinecraftProvider;
import org.saturnclient.common.bindings.SaturnClientBindings; import org.saturnclient.common.bindings.SaturnClientBindings;
import org.saturnclient.common.provider.Providers;
import org.saturnclient.impl.FabricModuleProvider; import org.saturnclient.impl.FabricModuleProvider;
import org.saturnclient.impl.SaturnClientProvider; import org.saturnclient.impl.SaturnClientProvider;
import org.saturnclient.modules.ModManager; import org.saturnclient.modules.ModManager;
@@ -41,7 +41,7 @@ public class SaturnClient implements ModInitializer {
LOGGER.info("Initializing " + MOD_ID); LOGGER.info("Initializing " + MOD_ID);
client = MinecraftClient.getInstance(); client = MinecraftClient.getInstance();
MinecraftProvider.PROVIDER = new SaturnClientProvider(); Providers.saturn = new SaturnClientProvider();
ElementRenderer.INSTANCE = new ElementRendererImpl(); ElementRenderer.INSTANCE = new ElementRendererImpl();
@@ -7,7 +7,7 @@ import net.minecraft.client.util.InputUtil;
import org.saturnclient.config.Config; import org.saturnclient.config.Config;
import org.saturnclient.client.ServiceClient; import org.saturnclient.client.ServiceClient;
import org.saturnclient.common.MinecraftProvider; import org.saturnclient.common.provider.Providers;
import org.saturnclient.saturnclient.SaturnClient; import org.saturnclient.saturnclient.SaturnClient;
import org.saturnclient.ui.screens.EmoteWheel; import org.saturnclient.ui.screens.EmoteWheel;
import org.saturnclient.ui.screens.ShiftMenu; import org.saturnclient.ui.screens.ShiftMenu;
@@ -37,12 +37,12 @@ public class KeyInputHandler {
// Register the event handler for the main menu key // Register the event handler for the main menu key
ClientTickEvents.END_CLIENT_TICK.register(client -> { ClientTickEvents.END_CLIENT_TICK.register(client -> {
if (mainMenuKeyBinding.wasPressed()) { if (mainMenuKeyBinding.wasPressed()) {
MinecraftProvider.PROVIDER.setScreen(new ShiftMenu()); Providers.saturn.getClient().setScreen(new ShiftMenu());
} }
if (Config.openEmoteWheel.wasKeyPressed() && client.currentScreen == null if (Config.openEmoteWheel.wasKeyPressed() && client.currentScreen == null
&& !InputUtil.isKeyPressed(client.getWindow().getHandle(), GLFW.GLFW_KEY_F3)) { && !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()) { if (SaturnClient.client.player != null && SaturnClient.client.player.isSneaking()) {
@@ -3,7 +3,7 @@ package org.saturnclient.ui;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.joml.Quaternionf; import org.joml.Quaternionf;
import org.joml.Vector3f; 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.saturnclient.SaturnClient;
import org.saturnclient.ui.components.SkinPreview.EntityDrawer; 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().translate((double) x, (double) y, 50.0);
renderScope.getMatrixStack().scale(size, size, -size); renderScope.getMatrixStack().scale(size, size, -size);
renderScope.getMatrixStack().translate(vector3f.x, vector3f.y, vector3f.z); renderScope.getMatrixStack().translate(vector3f.x, vector3f.y, vector3f.z);
renderScope.getMatrixStack().multiply(new SaturnQuaternionf(quaternionf)); renderScope.getMatrixStack().multiply((QuaternionfRef) quaternionf);
renderScope.draw(); renderScope.draw();
DiffuseLighting.method_34742(); DiffuseLighting.method_34742();
EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher(); EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher();
@@ -10,7 +10,7 @@ import org.joml.Matrix4f;
import com.mojang.blaze3d.systems.RenderSystem; 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.IdentifierRef;
import org.saturnclient.common.ref.asset.SpriteRef; import org.saturnclient.common.ref.asset.SpriteRef;
import org.saturnclient.common.ref.game.ItemStackRef; 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, public void drawTexture(IdentifierRef sprite, int x, int y, float u, float v, int width, int height,
int regionWidth, int regionWidth,
int regionHeight, int textureWidth, int textureHeight, int color) { 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, (u + (float) regionWidth) / (float) textureWidth, (v + 0.0F) / (float) textureHeight,
(v + (float) regionHeight) / (float) textureHeight, color); (v + (float) regionHeight) / (float) textureHeight, color);
} }
@@ -269,9 +270,9 @@ public class RenderScopeImpl implements RenderScope {
float v2, int color) { float v2, int color) {
if (sprite.toString().endsWith(".svg")) { if (sprite.toString().endsWith(".svg")) {
sprite = (Identifier) SvgTexture.getSvg(MinecraftProvider.PROVIDER.getClient(), sprite = (Identifier) (Object) SvgTexture.getSvg(Providers.saturn.getClient(),
new IdentifierRef(sprite), (IdentifierRef) (Object) sprite,
(x2 - x1) * 2, (y2 - y1) * 2).inner; (x2 - x1) * 2, (y2 - y1) * 2);
} }
if (color == 0) if (color == 0)
@@ -382,7 +383,7 @@ public class RenderScopeImpl implements RenderScope {
@Override @Override
public void drawItem(ItemStackRef stack, int x, int y, int seed, int z) { 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 @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, private void drawItem(@Nullable LivingEntity entity, @Nullable World world, ItemStackRef stack, int x, int y,
int seed) { 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, 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 @Override
public void drawSpriteStretched(SpriteRef saturnSprite, int x, int y, int width, int height, int color) { 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) if (color == 0)
return; return;
if (width != 0 && height != 0) { if (width != 0 && height != 0) {