aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinyourwalls <inyourwalls@tutanota.com>2024-01-27 00:16:16 -0500
committerinyourwalls <inyourwalls@tutanota.com>2024-01-27 00:16:16 -0500
commitd61bebc891726fec527deda01e26f784057cb383 (patch)
tree56c9659bfc6057bfb9af0fdc5a1f27a1dbd13081
parent9590d69e89c2d966fe80501ce4f754da85bc1ac5 (diff)
rewrite rendering stuff to support line ordering
-rw-r--r--src/main/java/net/inyourwalls/frank/Frank.java104
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);
}
}