diff options
Diffstat (limited to 'src/main/java')
3 files changed, 54 insertions, 4 deletions
diff --git a/src/main/java/net/inyourwalls/frank/Frank.java b/src/main/java/net/inyourwalls/frank/Frank.java index 4b8fc08..3ac8f09 100644 --- a/src/main/java/net/inyourwalls/frank/Frank.java +++ b/src/main/java/net/inyourwalls/frank/Frank.java @@ -34,9 +34,9 @@ public class Frank implements ClientModInitializer { drawContext, client.textRenderer, handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), - handler.getCookProgress(), + handler.getCookProgressPercent(), handler.getSlot(FUEL_SLOT_INDEX).getStack(), - handler.getFuelProgress(), + handler.getFuelProgressPercent(), speedMultiplier ); }); @@ -52,9 +52,9 @@ public class Frank implements ClientModInitializer { AbstractFurnaceScreen<?> screen, DrawContext context, TextRenderer renderer, - int itemsInProgress, + int itemsInProgress, float cookProgress, - ItemStack fuel, + ItemStack fuel, float fuelProgress, int speedMultiplier ) { diff --git a/src/main/java/net/inyourwalls/frank/FurnaceProgressPercentGetter.java b/src/main/java/net/inyourwalls/frank/FurnaceProgressPercentGetter.java new file mode 100644 index 0000000..2da666e --- /dev/null +++ b/src/main/java/net/inyourwalls/frank/FurnaceProgressPercentGetter.java @@ -0,0 +1,12 @@ +// FurnaceProgressPercentGetter: Gets furnace progress as a percentage. +package net.inyourwalls.frank; + +public interface FurnaceProgressPercentGetter { + default float getCookProgressPercent() { + return 0.0f; + } + + default float getFuelProgressPercent() { + return 0.0f; + } +} diff --git a/src/main/java/net/inyourwalls/frank/mixin/AbstractFurnaceScreenHandlerMixin.java b/src/main/java/net/inyourwalls/frank/mixin/AbstractFurnaceScreenHandlerMixin.java new file mode 100644 index 0000000..e705c96 --- /dev/null +++ b/src/main/java/net/inyourwalls/frank/mixin/AbstractFurnaceScreenHandlerMixin.java @@ -0,0 +1,38 @@ +// AbstractFurnaceScreenHandlerMixin: Implements percentage progress getters. +package net.inyourwalls.frank.mixin; + +import net.inyourwalls.frank.FurnaceProgressPercentGetter; +import net.minecraft.screen.AbstractFurnaceScreenHandler; +import net.minecraft.screen.PropertyDelegate; +import net.minecraft.util.math.MathHelper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +/* +* This basically mimics the interface the class itself exposes in 1.20.2 +* onwards. Mojang doesn't appear to have changed the actual values the client +* and server share. +*/ +@Mixin(AbstractFurnaceScreenHandler.class) +public abstract class AbstractFurnaceScreenHandlerMixin implements FurnaceProgressPercentGetter { + @Shadow + private PropertyDelegate propertyDelegate; + + @Override + public float getCookProgressPercent() { + int i = this.propertyDelegate.get(2); + int j = this.propertyDelegate.get(3); + if (i == 0 || j == 0) return 0.0f; + + return MathHelper.clamp((float) i / (float) j, 0.0f, 1.0f); + } + + @Override + public float getFuelProgressPercent() { + int i = this.propertyDelegate.get(0); + int j = this.propertyDelegate.get(1); + if (j == 0) j = 200; + + return MathHelper.clamp((float) i / (float) j, 0.0f, 1.0f); + } +} |
