aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle.kts4
-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
6 files changed, 76 insertions, 8 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index b97f98a..69a6ec6 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -3,7 +3,7 @@ plugins {
id("fabric-loom") version "1.4-SNAPSHOT"
}
-val minecraftVersion = "1.20.2"
+val minecraftVersion = "1.20.1"
version = "0.1.1+$minecraftVersion"
group = "net.inyourwalls"
@@ -13,7 +13,7 @@ repositories {
dependencies {
// Fabric/Minecraft dependencies.
- val yarnBuild = "4"
+ val yarnBuild = "10"
minecraft("com.mojang:minecraft:$minecraftVersion")
mappings("net.fabricmc:yarn:$minecraftVersion+build.$yarnBuild:v2")
modImplementation("net.fabricmc:fabric-loader:0.14.23")
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
+ }
+}