diff options
| -rw-r--r-- | build.gradle.kts | 4 | ||||
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/Frank.java | 12 | ||||
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/FurnaceProgressPercentGetter.java | 12 | ||||
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/config/ConfigScreen.java | 1 | ||||
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/mixin/AbstractFurnaceScreenHandlerMixin.java | 38 | ||||
| -rw-r--r-- | src/main/resources/fabric.mod.json | 10 | ||||
| -rw-r--r-- | src/main/resources/frank.mixins.json | 12 |
7 files changed, 79 insertions, 10 deletions
diff --git a/build.gradle.kts b/build.gradle.kts index 032649f..bdae5b0 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 = "1.0.0+$minecraftVersion" group = "net.inyourwalls" @@ -14,7 +14,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 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/config/ConfigScreen.java b/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java index 211dee5..fa2f743 100644 --- a/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java +++ b/src/main/java/net/inyourwalls/frank/config/ConfigScreen.java @@ -104,6 +104,7 @@ public class ConfigScreen extends Screen { @Override public void render(DrawContext context, int mouseX, int mouseY, float delta) { + super.renderBackground(context); super.render(context, mouseX, mouseY, delta); context.drawCenteredTextWithShadow(this.textRenderer, Text.translatable("ui.frank.config"), this.width / 2, 5, 0xffffff); 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 e02b2b5..0a46f48 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -21,10 +21,13 @@ "net.inyourwalls.frank.ModMenuIntegration" ] }, + "mixins": [ + "frank.mixins.json" + ], "depends": { "fabricloader": ">=0.14.22", - "fabric-screen-api-v1": ">=0.90.4+1.20.2", - "minecraft": "~1.20.2", + "minecraft": "1.20.1", + "fabric-screen-api-v1": ">=0.90.4+1.20.1", "java": ">=17" }, "suggests": {}, @@ -33,6 +36,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 + } +} |
