aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
-rw-r--r--src/main/resources/fabric.mod.json10
-rw-r--r--src/main/resources/frank.mixins.json12
5 files changed, 74 insertions, 6 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);
+ }
+}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 5c676c5..047001e 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -18,10 +18,13 @@
"net.inyourwalls.frank.Frank"
]
},
+ "mixins": [
+ "frank.mixins.json"
+ ],
"depends": {
"fabricloader": ">=0.14.22",
- "fabric-api": ">=0.90.4+1.20.2",
- "minecraft": "~1.20.2",
+ "fabric-api": ">=0.90.4+1.20.1",
+ "minecraft": "1.20.1",
"java": ">=17"
},
"suggests": {},
@@ -30,6 +33,9 @@
"links": {
"frank.matrix": "https://matrix.to/#/#mod-support:inyourwalls.net"
}
+ },
+ "loom:injected_interfaces": {
+ "net/minecraft/class_1720": ["net/inyourwalls/frank/FurnaceProgressPercentGetter"]
}
}
}
diff --git a/src/main/resources/frank.mixins.json b/src/main/resources/frank.mixins.json
new file mode 100644
index 0000000..bb4ebd0
--- /dev/null
+++ b/src/main/resources/frank.mixins.json
@@ -0,0 +1,12 @@
+{
+ "required": true,
+ "minVersion": "0.8",
+ "package": "net.inyourwalls.frank.mixin",
+ "compatibilityLevel": "JAVA_17",
+ "client": [
+ "AbstractFurnaceScreenHandlerMixin"
+ ],
+ "injectors": {
+ "defaultRequire": 1
+ }
+}