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 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() {
@@ -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.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
@@ -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;
}
}
}
@@ -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 {
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);
}
}
@@ -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<Effect> 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"));
}
}
@@ -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();
@@ -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()) {
@@ -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();
@@ -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) {