diff options
| author | inyourwalls <inyourwalls@tutanota.com> | 2024-01-25 11:38:14 -0500 |
|---|---|---|
| committer | inyourwalls <inyourwalls@tutanota.com> | 2024-01-25 11:38:14 -0500 |
| commit | deaa3a3ebc428d92523e6a9d8251fd7d09b489e8 (patch) | |
| tree | 261cf4721fca8e7a05c514b0aa66aedc175a17be | |
| parent | 30d311bae4214d12e83651e622d6d1f6aee99a63 (diff) | |
make it work like 1.20.2 on 1.20.1
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 + } +} |
