diff --git a/common b/common index edb37d0..4054a8b 160000 --- a/common +++ b/common @@ -1 +1 @@ -Subproject commit edb37d030738f74a78e850c53b1e21e4a017b06a +Subproject commit 4054a8bec6a2be63677dfea05c33bb3955c580c4 diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/StatusEffectMixin.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/StatusEffectMixin.java new file mode 100644 index 0000000..a164eae --- /dev/null +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/mixins/StatusEffectMixin.java @@ -0,0 +1,44 @@ +package org.saturnclient.impl.mixins; + +import org.saturnclient.common.ref.asset.SpriteRef; +import org.saturnclient.common.ref.game.EffectRef; +import org.saturnclient.saturnclient.SaturnClient; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import net.minecraft.entity.effect.StatusEffect; +import net.minecraft.entity.effect.StatusEffectInstance; +import net.minecraft.registry.entry.RegistryEntry; + +@Mixin(StatusEffectInstance.class) +public abstract class StatusEffectMixin implements EffectRef { + + @Shadow + public abstract boolean shouldShowIcon(); + + @Shadow + public abstract boolean isInfinite(); + + @Shadow + public abstract int getDuration(); + + @Shadow + public abstract RegistryEntry getEffectType(); + + @Override + public SpriteRef getIcon() { + return (SpriteRef) SaturnClient.client + .getStatusEffectSpriteManager() + .getSprite(getEffectType()); + } + + @Override + public String getInfiniteText() { + return "∞"; + } + + @Override + public int getDurationSeconds() { + return getDuration() / 20; // ticks → seconds + } +} \ No newline at end of file diff --git a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/player/PlayerModuleFabric.java b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/player/PlayerModuleFabric.java index f6442fd..3b1bf6b 100644 --- a/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/player/PlayerModuleFabric.java +++ b/versions/1.21.4/src/main/java/org/saturnclient/impl/modules/player/PlayerModuleFabric.java @@ -9,10 +9,8 @@ import net.minecraft.registry.Registries; import net.minecraft.util.Identifier; import org.saturnclient.common.module.PlayerModule; -import org.saturnclient.common.ref.asset.SpriteRef; +import org.saturnclient.common.ref.game.EffectRef; import org.saturnclient.common.ref.game.ItemStackRef; -import org.saturnclient.feature.features.StatusEffectsFeature; -import org.saturnclient.saturnclient.SaturnClient; import java.util.ArrayList; import java.util.Collections; @@ -222,27 +220,27 @@ public class PlayerModuleFabric implements PlayerModule { // --------------------------------------------------------------- @Override - public List getActiveEffects() { + public List getActiveEffects() { if (!hasPlayer()) return Collections.emptyList(); var effects = player().getActiveStatusEffects().values(); - List result = new ArrayList<>(effects.size()); + List result = new ArrayList<>(effects.size()); for (StatusEffectInstance instance : effects) { - result.add(new FabricEffectView(instance)); + result.add((EffectRef) instance); } return result; } @Override - public List getDummyEffects() { + public List getDummyEffects() { return List.of( - new FabricEffectView(new StatusEffectInstance( - Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("speed")).get(), 12000, 2)), - new FabricEffectView(new StatusEffectInstance( - Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("strength")).get(), 12000, 2)), - new FabricEffectView(new StatusEffectInstance( - Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("fire_resistance")).get(), 12000, 2))); + (EffectRef) new StatusEffectInstance( + Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("speed")).get(), 12000, 2), + (EffectRef) new StatusEffectInstance( + Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("strength")).get(), 12000, 2), + (EffectRef) new StatusEffectInstance( + Registries.STATUS_EFFECT.getEntry(Identifier.ofVanilla("fire_resistance")).get(), 12000, 2)); } // --------------------------------------------------------------- @@ -252,51 +250,4 @@ public class PlayerModuleFabric implements PlayerModule { private static ItemStackRef wrap(ItemStack stack) { return (ItemStackRef) (Object) stack; } - - // --------------------------------------------------------------- - // Inner — EffectView adapter - // --------------------------------------------------------------- - - /** - * Bridges a Fabric {@link StatusEffectInstance} to the - * platform-neutral {@link StatusEffectsFeature.EffectView}. - */ - public static final class FabricEffectView implements StatusEffectsFeature.EffectView { - - private final StatusEffectInstance instance; - - public FabricEffectView(StatusEffectInstance instance) { - this.instance = instance; - } - - @Override - public boolean shouldShowIcon() { - return instance.shouldShowIcon(); - } - - /** - * Returns the Minecraft sprite identifier for this effect's icon. - * The platform-specific renderer knows how to draw a - * {@link net.minecraft.util.Identifier}. - */ - @Override - public SpriteRef getIcon() { - return (SpriteRef) SaturnClient.client.getStatusEffectSpriteManager().getSprite(instance.getEffectType()); - } - - @Override - public boolean isInfinite() { - return instance.isInfinite(); - } - - @Override - public String getInfiniteText() { - return "∞"; - } - - @Override - public int getDurationSeconds() { - return instance.getDuration() / 20; // ticks → seconds - } - } } diff --git a/versions/1.21.4/src/main/resources/impl.mixins.json b/versions/1.21.4/src/main/resources/impl.mixins.json index 15e322f..094792b 100644 --- a/versions/1.21.4/src/main/resources/impl.mixins.json +++ b/versions/1.21.4/src/main/resources/impl.mixins.json @@ -11,7 +11,8 @@ "QuaternionfMixin", "WindowMixin", "TextMixin", - "SpriteMixin" + "SpriteMixin", + "StatusEffectMixin" ], "injectors": { "defaultRequire": 1