aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinyourwalls <inyourwalls@tutanota.com>2024-01-25 11:38:14 -0500
committerinyourwalls <inyourwalls@tutanota.com>2024-01-25 11:38:14 -0500
commitdeaa3a3ebc428d92523e6a9d8251fd7d09b489e8 (patch)
tree261cf4721fca8e7a05c514b0aa66aedc175a17be
parent30d311bae4214d12e83651e622d6d1f6aee99a63 (diff)
make it work like 1.20.2 on 1.20.1
-rw-r--r--src/main/java/net/inyourwalls/frank/Frank.java12
-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.json8
-rw-r--r--src/main/resources/frank.mixins.json12
5 files changed, 75 insertions, 7 deletions
diff --git a/src/main/java/net/inyourwalls/frank/Frank.java b/src/main/java/net/inyourwalls/frank/Frank.java
index bf33670..1a0451a 100644
--- a/src/main/java/net/inyourwalls/frank/Frank.java
+++ b/src/main/java/net/inyourwalls/frank/Frank.java
@@ -35,9 +35,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
);
});
@@ -54,11 +54,9 @@ public class Frank implements ClientModInitializer {
DrawContext context,
TextRenderer renderer,
int itemsInProgress,
- // ranges from 0..24, updates whenever the progress arrow updates.
- int cookProgress,
+ float cookProgress,
ItemStack fuel,
- // ranges from 0..12, updates whenever the fuel flame texture drops.
- int fuelProgress,
+ float fuelProgress,
int speedMultiplier
) {
// Determine where to start drawing the information.
@@ -74,7 +72,7 @@ public class Frank implements ClientModInitializer {
Integer fuelTicks = FuelRegistry.INSTANCE.get(fuel.getItem());
// Avoid null pointer exception because Java is terrible.
if (fuelTicks == null) fuelTicks = 0;
- int burningFuel = (int)((float)(fuelTicks / 10) * (fuelProgress / 12));
+ int burningFuel = (int)((float)(fuelTicks / 10) * fuelProgress);
int itemsSmeltable = (((fuelTicks / 10) * fuelCount) / 20) + (burningFuel / 20);
context.drawTextWithShadow(renderer, Text.translatable("ui.frank.time_left", minutesLeft, secondsLeft), infoX, infoY, WHITE);
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 6969155..255a414 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -18,11 +18,19 @@
"net.inyourwalls.frank.Frank"
]
},
+ "mixins": [
+ "frank.mixins.json"
+ ],
"depends": {
"fabricloader": ">=0.14.22",
"fabric-api": ">=0.90.4+1.20.1",
"minecraft": "1.20.1",
"java": ">=17"
},
+ "custom": {
+ "loom:injected_interfaces": {
+ "net/minecraft/class_1720": ["net/inyourwalls/frank/FurnaceProgressPercentGetter"]
+ }
+ },
"suggests": {}
}
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
+ }
+}