diff options
Diffstat (limited to 'src/main/java')
3 files changed, 56 insertions, 6 deletions
diff --git a/src/main/java/net/inyourwalls/frank/Frank.java b/src/main/java/net/inyourwalls/frank/Frank.java index 0aebd73..8418dc4 100644 --- a/src/main/java/net/inyourwalls/frank/Frank.java +++ b/src/main/java/net/inyourwalls/frank/Frank.java @@ -55,7 +55,7 @@ public class Frank implements ClientModInitializer { config.getTextColour(), handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), speedMultiplier, - handler.getCookProgress() + handler.getCookProgressPercent() ); renderItemsSmeltable( drawContext, @@ -64,7 +64,7 @@ public class Frank implements ClientModInitializer { y + 10, config.getTextColour(), handler.getSlot(FUEL_SLOT_INDEX).getStack(), - handler.getFuelProgress() + handler.getFuelProgressPercent() ); break; } @@ -78,7 +78,7 @@ public class Frank implements ClientModInitializer { config.getTextColour(), handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), speedMultiplier, - handler.getCookProgress() + handler.getCookProgressPercent() ); break; } @@ -91,7 +91,7 @@ public class Frank implements ClientModInitializer { y, config.getTextColour(), handler.getSlot(FUEL_SLOT_INDEX).getStack(), - handler.getFuelProgress() + handler.getFuelProgressPercent() ); renderTimeLeft( drawContext, @@ -101,7 +101,7 @@ public class Frank implements ClientModInitializer { config.getTextColour(), handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), speedMultiplier, - handler.getCookProgress() + handler.getCookProgressPercent() ); break; } @@ -114,7 +114,7 @@ public class Frank implements ClientModInitializer { y, config.getTextColour(), handler.getSlot(FUEL_SLOT_INDEX).getStack(), - handler.getFuelProgress() + handler.getFuelProgressPercent() ); break; } 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); + } +} |
