diff --git a/src/main/java/org/betterx/bclib/integration/emi/EMIAlloyingRecipe.java b/src/main/java/org/betterx/bclib/integration/emi/EMIAlloyingRecipe.java index 89f38f85..3c0bebd8 100644 --- a/src/main/java/org/betterx/bclib/integration/emi/EMIAlloyingRecipe.java +++ b/src/main/java/org/betterx/bclib/integration/emi/EMIAlloyingRecipe.java @@ -2,9 +2,11 @@ package org.betterx.bclib.integration.emi; import org.betterx.bclib.recipes.AlloyingRecipe; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.RecipeManager; +import dev.emi.emi.EmiPort; import dev.emi.emi.api.EmiRegistry; import dev.emi.emi.api.recipe.EmiRecipe; import dev.emi.emi.api.recipe.EmiRecipeCategory; @@ -16,17 +18,23 @@ import dev.emi.emi.api.widget.WidgetHolder; import java.util.List; public class EMIAlloyingRecipe implements EmiRecipe { - private final ResourceLocation id; private final List input; private final List output; + private final AlloyingRecipe recipe; + + private final int fuelMultiplier; + private final boolean infiniBurn; public EMIAlloyingRecipe(AlloyingRecipe recipe) { - this.id = recipe.getId(); + this.recipe = recipe; + this.input = List.of( EmiIngredient.of(recipe.getIngredients().get(0)), EmiIngredient.of(recipe.getIngredients().get(1)) ); this.output = List.of(EmiStack.of(recipe.getResultItem())); + fuelMultiplier = 1; + infiniBurn = false; } static void addAllRecipes(EmiRegistry emiRegistry, RecipeManager manager) { @@ -42,7 +50,7 @@ public class EMIAlloyingRecipe implements EmiRecipe { @Override public ResourceLocation getId() { - return id; + return recipe.getId(); } @Override @@ -57,27 +65,43 @@ public class EMIAlloyingRecipe implements EmiRecipe { @Override public int getDisplayWidth() { - return 96; + return 82 + 22; } @Override public int getDisplayHeight() { - return 18; + return 38; } @Override public void addWidgets(WidgetHolder widgets) { // Add an arrow texture to indicate processing - widgets.addTexture(EmiTexture.EMPTY_ARROW, 46, 1); + widgets.addFillingArrow(46, 5, 50 * this.recipe.getSmeltTime()).tooltip((mx, my) -> { + return List.of(ClientTooltipComponent.create(EmiPort.ordered(EmiPort.translatable( + "emi.cooking.time", + new Object[]{(float) this.recipe.getSmeltTime() / 20.0F} + )))); + }); + + if (this.infiniBurn) { + widgets.addTexture(EmiTexture.FULL_FLAME, 1, 24); + } else { + widgets.addTexture(EmiTexture.EMPTY_FLAME, 1, 24); + widgets.addAnimatedTexture(EmiTexture.FULL_FLAME, 1, 24, 4000 / this.fuelMultiplier, false, true, true); + } // Adds an input slot on the left - widgets.addSlot(input.get(0), 0, 0); - widgets.addSlot(input.get(1), 20, 0); + widgets.addSlot(input.get(0), 0, 4); + widgets.addSlot(input.get(1), 20, 4); + widgets.addText(EmiPort.ordered(EmiPort.translatable( + "emi.cooking.experience", + new Object[]{this.recipe.getExperience()} + )), 46, 28, -1, true); // Adds an output slot on the right // Note that output slots need to call `recipeContext` to inform EMI about their recipe context // This includes being able to resolve recipe trees, favorite stacks with recipe context, and more - widgets.addSlot(output.get(0), 78, 0).recipeContext(this); + widgets.addSlot(output.get(0), 78, 0).output(true).recipeContext(this); } @Override diff --git a/src/main/java/org/betterx/bclib/integration/emi/EMIAnvilRecipe.java b/src/main/java/org/betterx/bclib/integration/emi/EMIAnvilRecipe.java index 987497cf..287fa52b 100644 --- a/src/main/java/org/betterx/bclib/integration/emi/EMIAnvilRecipe.java +++ b/src/main/java/org/betterx/bclib/integration/emi/EMIAnvilRecipe.java @@ -70,27 +70,27 @@ public class EMIAnvilRecipe implements EmiRecipe { @Override public int getDisplayWidth() { - return 96; + return 104; } @Override public int getDisplayHeight() { - return 18; + return 26; } @Override public void addWidgets(WidgetHolder widgetHolder) { // Add an arrow texture to indicate processing - widgetHolder.addTexture(EmiTexture.EMPTY_ARROW, 46, 1); + widgetHolder.addTexture(EmiTexture.EMPTY_ARROW, 46, 5); // Adds an input slot on the left - widgetHolder.addSlot(input.get(0), 0, 0); - widgetHolder.addSlot(input.get(1), 20, 0); + widgetHolder.addSlot(input.get(0), 0, 4); + widgetHolder.addSlot(input.get(1), 20, 4).catalyst(true); // Adds an output slot on the right // Note that output slots need to call `recipeContext` to inform EMI about their recipe context // This includes being able to resolve recipe trees, favorite stacks with recipe context, and more - widgetHolder.addSlot(output.get(0), 78, 0).recipeContext(this); + widgetHolder.addSlot(output.get(0), 78, 0).output(true).recipeContext(this); } @Override diff --git a/src/main/java/org/betterx/bclib/integration/emi/EMIPlugin.java b/src/main/java/org/betterx/bclib/integration/emi/EMIPlugin.java index 8721eda2..13c1942f 100644 --- a/src/main/java/org/betterx/bclib/integration/emi/EMIPlugin.java +++ b/src/main/java/org/betterx/bclib/integration/emi/EMIPlugin.java @@ -19,7 +19,7 @@ import java.util.Comparator; public class EMIPlugin implements EmiPlugin { private static boolean didInit = false; private static int maxAnvilLevel = 1; - public static final ResourceLocation MY_SPRITE_SHEET = BCLib.makeID( + public static final ResourceLocation BCL_SIMPLIFIED_SPRITES = BCLib.makeID( "textures/gui/widgets.png" ); @@ -30,7 +30,7 @@ public class EMIPlugin implements EmiPlugin { public static EmiStack[] ANVIL_WORKSTATIONS; public static EmiTexture getSprite(int u, int v) { - return new EmiTexture(MY_SPRITE_SHEET, u, v, 16, 16, 16, 16, 32, 32); + return new EmiTexture(BCL_SIMPLIFIED_SPRITES, u, v, 16, 16, 16, 16, 32, 32); } public void lazyInit() { diff --git a/src/main/java/org/betterx/ui/layout/components/render/RenderHelper.java b/src/main/java/org/betterx/ui/layout/components/render/RenderHelper.java index 46d3af4e..e697abaf 100644 --- a/src/main/java/org/betterx/ui/layout/components/render/RenderHelper.java +++ b/src/main/java/org/betterx/ui/layout/components/render/RenderHelper.java @@ -36,7 +36,7 @@ public class RenderHelper { Matrix4f transform = poseStack.last().pose(); innerHLine(transform, x0, x1, y0, color1); innerVLine(transform, x0, y0 + 1, y1, color1); - innerHLine(transform, x0 + 1, x1, y1, color1); + innerHLine(transform, x0 + 1, x1, y1, color2); innerVLine(transform, x1, y0 + 1, y1 - 1, color2); } diff --git a/src/main/resources/assets/bclib/textures/gui/widgets.png b/src/main/resources/assets/bclib/textures/gui/widgets.png index 8f2c176b..e82dd282 100644 Binary files a/src/main/resources/assets/bclib/textures/gui/widgets.png and b/src/main/resources/assets/bclib/textures/gui/widgets.png differ