diff options
| author | inyourwalls <inyourwalls@tutanota.com> | 2023-11-07 22:35:09 -0500 |
|---|---|---|
| committer | inyourwalls <inyourwalls@tutanota.com> | 2023-11-07 22:35:09 -0500 |
| commit | a703b62894af662efc3238423f5b6f99c76b1cc4 (patch) | |
| tree | 8cd5af83cd898fd6112181893cff626eee267f46 | |
| parent | ad36711caa30a934a61b2d95ad8f898a6690d257 (diff) | |
make it a little less bad, add support for blast furnace and smoker
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/Frank.java | 104 |
1 files changed, 74 insertions, 30 deletions
diff --git a/src/main/java/net/inyourwalls/frank/Frank.java b/src/main/java/net/inyourwalls/frank/Frank.java index 805d2c4..825ddfa 100644 --- a/src/main/java/net/inyourwalls/frank/Frank.java +++ b/src/main/java/net/inyourwalls/frank/Frank.java @@ -4,8 +4,16 @@ package net.inyourwalls.frank; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents; import net.fabricmc.fabric.api.registry.FuelRegistry; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screen.ingame.BlastFurnaceScreen; import net.minecraft.client.gui.screen.ingame.FurnaceScreen; +import net.minecraft.client.gui.screen.ingame.SmokerScreen; import net.minecraft.item.ItemStack; +import net.minecraft.screen.BlastFurnaceScreenHandler; +import net.minecraft.screen.FurnaceScreenHandler; +import net.minecraft.screen.SmokerScreenHandler; import net.minecraft.text.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,47 +23,83 @@ public class Frank implements ClientModInitializer { private static final int CRAFTING_SLOT_INDEX = 0; private static final int FUEL_SLOT_INDEX = 1; + private static final int WHITE = 0xffffff; @Override public void onInitializeClient() { ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (screen instanceof FurnaceScreen furnace) { - // Determine where to draw the information. - int infoX = screen.width / 2 + 90; - int infoY = screen.height / 2 - 80; - ScreenEvents.afterRender(screen).register((_s, drawContext, mouseX, mouseY, tickDelta) -> { - int itemsInProgress = furnace.getScreenHandler().getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(); - int secondsLeft = itemsInProgress * 10 - (int)(furnace.getScreenHandler().getCookProgress() * 10); - - ItemStack fuel = furnace.getScreenHandler().getSlot(FUEL_SLOT_INDEX).getStack(); - int fuelItemCount = fuel.getCount(); - Integer fuelTicks = FuelRegistry.INSTANCE.get(fuel.getItem()); - if (fuelTicks == null) fuelTicks = 0; // Avoid null pointer exception because Java is terrible. - int itemsSmeltable = ((fuelTicks / 10) * fuelItemCount) / 20; - - drawContext.drawTextWithShadow( - client.textRenderer, - Text.literal("ui.frank.time_left: " + secondsLeft), - infoX, - infoY, - 0xffffff); - drawContext.drawTextWithShadow(client.textRenderer, Text.literal("smeltable: " + itemsSmeltable), infoX, infoY + 10, 0xffffff); - drawContext.drawTextWithShadow(client.textRenderer, - Text.literal("fuelProgress: " + furnace.getScreenHandler().getFuelProgress()), - infoX, - infoY + 20, - 0xffffff + FurnaceScreenHandler handler = furnace.getScreenHandler(); + renderInfoLines( + screen, + drawContext, + client.textRenderer, + handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), + handler.getCookProgress(), + handler.getSlot(FUEL_SLOT_INDEX).getStack(), + 1 ); - drawContext.drawTextWithShadow(client.textRenderer, - Text.literal("cookProgress: " + furnace.getScreenHandler().getCookProgress()), - infoX, - infoY + 30, - 0xffffff + }); + } else if (screen instanceof BlastFurnaceScreen furnace) { + ScreenEvents.afterRender(screen).register((_s, drawContext, mouseX, mouseY, tickDelta) -> { + BlastFurnaceScreenHandler handler = furnace.getScreenHandler(); + renderInfoLines( + screen, + drawContext, + client.textRenderer, + handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), + handler.getCookProgress(), + handler.getSlot(FUEL_SLOT_INDEX).getStack(), + 2 + ); + }); + } else if (screen instanceof SmokerScreen furnace) { + ScreenEvents.afterRender(screen).register((_s, drawContext, mouseX, mouseY, tickDelta) -> { + SmokerScreenHandler handler = furnace.getScreenHandler(); + renderInfoLines( + screen, + drawContext, + client.textRenderer, + handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), + handler.getCookProgress(), + handler.getSlot(FUEL_SLOT_INDEX).getStack(), + 2 ); }); } }); LOGGER.info("Screen events registered."); } + + /** + * Renders the info lines on the given screen. + */ + private void renderInfoLines( + Screen screen, + DrawContext context, + TextRenderer renderer, + int itemsInProgress, + float cookProgress, + ItemStack fuel, + int speedMultiplier + ) { + // Determine where to start drawnig the information. + int infoX = screen.width / 2 + 90; + int infoY = screen.height / 2 - 80; + + int secondsLeft = itemsInProgress * (10 / speedMultiplier) - (int)(cookProgress * 10); + int minutesLeft = secondsLeft / 60; + secondsLeft = secondsLeft % 60; + + int fuelCount = fuel.getCount(); + Integer fuelTicks = FuelRegistry.INSTANCE.get(fuel.getItem()); + // Avoid null pointer exception because Java is terrible. + if (fuelTicks == null) fuelTicks = 0; + int itemsSmeltable = ((fuelTicks / 10) * fuelCount) / 20; + + context.drawTextWithShadow(renderer, Text.translatable("ui.frank.time_left", minutesLeft, secondsLeft), infoX, infoY, WHITE); + context.drawTextWithShadow(renderer, Text.translatable("ui.frank.smeltable", itemsSmeltable), infoX, infoY + 10, WHITE); + } } + |
