aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/net/inyourwalls/frank/Frank.java8
-rw-r--r--src/main/java/net/inyourwalls/frank/FurnaceProgressPercentGetter.java12
-rw-r--r--src/main/java/net/inyourwalls/frank/mixin/AbstractFurnaceScreenHandlerMixin.java38
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);
+ }
+}