diff options
| author | inyourwalls <inyourwalls@tutanota.com> | 2024-01-27 00:16:16 -0500 |
|---|---|---|
| committer | inyourwalls <inyourwalls@tutanota.com> | 2024-01-27 00:16:16 -0500 |
| commit | d61bebc891726fec527deda01e26f784057cb383 (patch) | |
| tree | 56c9659bfc6057bfb9af0fdc5a1f27a1dbd13081 | |
| parent | 9590d69e89c2d966fe80501ce4f754da85bc1ac5 (diff) | |
rewrite rendering stuff to support line ordering
| -rw-r--r-- | src/main/java/net/inyourwalls/frank/Frank.java | 104 |
1 files changed, 61 insertions, 43 deletions
diff --git a/src/main/java/net/inyourwalls/frank/Frank.java b/src/main/java/net/inyourwalls/frank/Frank.java index 7583978..45554f3 100644 --- a/src/main/java/net/inyourwalls/frank/Frank.java +++ b/src/main/java/net/inyourwalls/frank/Frank.java @@ -25,72 +25,90 @@ public class Frank implements ClientModInitializer { @Override public void onInitializeClient() { FrankConfig config = new FrankConfig(); + config.setTextColour(0xff7aff); + config.setActiveInfoLines(FrankConfig.InfoLine.SMELTABLE, FrankConfig.InfoLine.TIME_LEFT); ScreenEvents.AFTER_INIT.register((client, screen, scaledWidth, scaledHeight) -> { if (screen instanceof AbstractFurnaceScreen furnace) { AbstractFurnaceScreenHandler handler = (AbstractFurnaceScreenHandler) furnace.getScreenHandler(); - // Add our text lines. - for (FrankConfig.InfoLine infoLine : config.getActiveInfoLines()) { - - } - int speedMultiplier = (handler instanceof BlastFurnaceScreenHandler || handler instanceof SmokerScreenHandler) ? 2 : 1; ScreenEvents.afterRender(screen).register((_s, drawContext, mouseX, mouseY, tickDelta) -> { - renderInfoLines( - furnace, - drawContext, - client.textRenderer, - handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), - handler.getCookProgress(), - handler.getSlot(FUEL_SLOT_INDEX).getStack(), - handler.getFuelProgress(), - speedMultiplier, - config.getTextColour() - ); - }); + int x = screen.width / 2 + 90; // just after the right edge. + int y = screen.height / 2 - 80; // more or less in line with the top edge. + if (furnace.recipeBook.isOpen()) x += 77; + for (FrankConfig.InfoLine infoLine : config.getActiveInfoLines()) { + switch (infoLine) { + case TIME_LEFT -> { + renderTimeLeft( + drawContext, + client.textRenderer, + x, + y, + config.getTextColour(), + handler.getSlot(CRAFTING_SLOT_INDEX).getStack().getCount(), + speedMultiplier, + handler.getCookProgress() + ); + break; + } + + case SMELTABLE -> { + renderItemsSmeltable( + drawContext, + client.textRenderer, + x, + y, + config.getTextColour(), + handler.getSlot(FUEL_SLOT_INDEX).getStack(), + handler.getFuelProgress() + ); + break; + } + } - ScreenEvents.afterTick(screen).register(_s -> {}); + y += 10; + } + }); } }); LOGGER.info("Screen events registered."); } - /** - * Renders the info lines on the given screen. - */ - private void renderInfoLines( - AbstractFurnaceScreen<?> screen, - DrawContext context, - TextRenderer renderer, - int itemsInProgress, - float cookProgress, - ItemStack fuel, - float fuelProgress, + private void renderTimeLeft( + DrawContext context, + TextRenderer renderer, + int x, + int y, + int textColour, + int itemsInProgress, int speedMultiplier, - int textColour + float cookProgress ) { - // Determine where to start drawing the information. - int infoX = screen.width / 2 + 90; - int infoY = screen.height / 2 - 80; - if (screen.recipeBook.isOpen()) { - infoX += 77; - } + int smeltingSpeed = 10 / speedMultiplier; // still kinda lame, but it works! + int secondsLeft = itemsInProgress * smeltingSpeed - (int)(cookProgress * smeltingSpeed); + int minutesLeft = secondsLeft / 60; + secondsLeft = secondsLeft % 60; - int smeltingSpeed = 10 / speedMultiplier; // this code sucks, but i don't care. - int secondsLeft = itemsInProgress * smeltingSpeed - (int)(cookProgress * smeltingSpeed); - int minutesLeft = secondsLeft / 60; - secondsLeft = secondsLeft % 60; + context.drawTextWithShadow(renderer, Text.translatable("ui.frank.time_left", minutesLeft, secondsLeft), x, y, textColour); + } + private void renderItemsSmeltable( + DrawContext context, + TextRenderer renderer, + int x, + int y, + int textColour, + ItemStack fuel, + float fuelProgress + ) { 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 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, textColour); - context.drawTextWithShadow(renderer, Text.translatable("ui.frank.smeltable", itemsSmeltable), infoX, infoY + 10, textColour); + context.drawTextWithShadow(renderer, Text.translatable("ui.frank.smeltable", itemsSmeltable), x, y, textColour); } } |
