From af59b089b8b71d0f76770696769b24e4737602ad Mon Sep 17 00:00:00 2001 From: emilyploszaj Date: Sun, 3 Nov 2024 13:18:28 -0600 Subject: [PATCH 1/5] Update config enum screen to be consistent with config screen --- .../main/java/dev/emi/emi/screen/ConfigEnumScreen.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java b/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java index 43f312bd..618b04bc 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java +++ b/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java @@ -51,9 +51,8 @@ public void init() { public void render(DrawContext raw, int mouseX, int mouseY, float delta) { EmiDrawContext context = EmiDrawContext.wrap(raw); list.setScrollAmount(list.getScrollAmount()); - this.renderDarkening(context.raw()); - list.render(context.raw(), mouseX, mouseY, delta); super.render(context.raw(), mouseX, mouseY, delta); + list.render(context.raw(), mouseX, mouseY, delta); ListWidget.Entry entry = list.getHoveredEntry(); if (entry instanceof SelectionWidget widget) { if (widget.button.isHovered()) { @@ -62,11 +61,6 @@ public void render(DrawContext raw, int mouseX, int mouseY, float delta) { } } - @Override - public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { - // Prevent double background draw - } - @Override public void close() { MinecraftClient.getInstance().setScreen(last); From 9a4440e928d54850fdc95a57f13be58c0f3736b8 Mon Sep 17 00:00:00 2001 From: emilyploszaj Date: Sun, 3 Nov 2024 13:46:22 -0600 Subject: [PATCH 2/5] Allow configuring EMI button visibility --- .../dev/emi/emi/config/ButtonVisibility.java | 35 +++++++++++++++ .../java/dev/emi/emi/config/EmiConfig.java | 8 ++++ .../dev/emi/emi/screen/EmiScreenManager.java | 44 +++++++++++++------ .../main/resources/assets/emi/lang/en_us.json | 5 +++ 4 files changed, 79 insertions(+), 13 deletions(-) create mode 100644 xplat/src/main/java/dev/emi/emi/config/ButtonVisibility.java diff --git a/xplat/src/main/java/dev/emi/emi/config/ButtonVisibility.java b/xplat/src/main/java/dev/emi/emi/config/ButtonVisibility.java new file mode 100644 index 00000000..8d6c7808 --- /dev/null +++ b/xplat/src/main/java/dev/emi/emi/config/ButtonVisibility.java @@ -0,0 +1,35 @@ +package dev.emi.emi.config; + +import dev.emi.emi.EmiPort; +import net.minecraft.text.Text; + +public enum ButtonVisibility implements ConfigEnum { + AUTO("auto"), + SHOWN("shown"), + HIDDEN("hidden"), + ; + + private final String name; + + private ButtonVisibility(String name) { + this.name = name; + } + + public boolean resolve(boolean fallback) { + return switch (this) { + case AUTO -> fallback; + case SHOWN -> true; + case HIDDEN -> false; + }; + } + + @Override + public String getName() { + return name; + } + + @Override + public Text getText() { + return EmiPort.translatable("emi.button_visibility." + name); + } +} diff --git a/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java b/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java index 9a5fc729..1bfee424 100644 --- a/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java +++ b/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java @@ -131,6 +131,14 @@ public class EmiConfig { @ConfigValue("ui.empty-search-sidebar-focus") public static SidebarType emptySearchSidebarFocus = SidebarType.NONE; + @Comment("Whether the EMI config button should be visible.") + @ConfigValue("ui.emi-config-button-visibility") + public static ButtonVisibility emiConfigButtonVisibility = ButtonVisibility.SHOWN; + + @Comment("Whether the recipe tree button should be visible.") + @ConfigValue("ui.recipe-tree-button-visibility") + public static ButtonVisibility recipeTreeButtonVisibility = ButtonVisibility.AUTO; + @ConfigGroup("ui.recipe-screen") @Comment("The maximum height the recipe screen will grow to be if space is available in pixels.") @ConfigValue("ui.maximum-recipe-screen-height") diff --git a/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java b/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java index 0482d4a8..dff2c25c 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java +++ b/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java @@ -510,6 +510,17 @@ public static EmiStackInteraction getHoveredStack(int mouseX, int mouseY, boolea return getHoveredStack(mouseX, mouseY, notClick, false); } + public static int getDebugTextX() { + int x = 4; + if (emi.visible) { + x = Math.max(4, 4 + 22); + } + if (tree.visible) { + x = Math.max(4, 4 + 22 + 22); + } + return x; + } + public static EmiStackInteraction getHoveredStack(int mouseX, int mouseY, boolean notClick, boolean ignoreLastHoveredCraftable) { if (client.currentScreen == null) { @@ -593,35 +604,38 @@ public static void render(EmiDrawContext context, int mouseX, int mouseY, float return; } boolean visible = !isDisabled(); - emi.visible = visible; - tree.visible = visible; + emi.visible = EmiConfig.emiConfigButtonVisibility.resolve(visible); + tree.visible = EmiConfig.recipeTreeButtonVisibility.resolve(visible); for (SidebarPanel panel : panels) { panel.updateWidgetVisibility(); } + renderWidgets(context, mouseX, mouseY, delta, base); if (isDisabled()) { int screenHeight = base.screen().height; if (!EmiReloadManager.isLoaded()) { + int reloadInfoX = getDebugTextX(); if (EmiReloadManager.getStatus() == -1) { - context.drawTextWithShadow(EmiPort.translatable("emi.reloading.error"), 4, screenHeight - 16); + context.drawTextWithShadow(EmiPort.translatable("emi.reloading.error"), reloadInfoX, screenHeight - 16); } else if (EmiReloadManager.getStatus() == 0) { - context.drawTextWithShadow(EmiPort.translatable("emi.reloading.waiting"), 4, screenHeight - 16); + context.drawTextWithShadow(EmiPort.translatable("emi.reloading.waiting"), reloadInfoX, screenHeight - 16); } else { - context.drawTextWithShadow(EmiPort.translatable("emi.reloading"), 4, screenHeight - 16); - context.drawTextWithShadow(EmiReloadManager.reloadStep, 4, screenHeight - 26); + context.drawTextWithShadow(EmiPort.translatable("emi.reloading"), reloadInfoX, screenHeight - 16); + context.drawTextWithShadow(EmiReloadManager.reloadStep, reloadInfoX, screenHeight - 26); if (System.currentTimeMillis() > EmiReloadManager.reloadWorry) { - context.drawTextWithShadow(EmiPort.translatable("emi.reloading.worry"), 4, screenHeight - 36); + context.drawTextWithShadow(EmiPort.translatable("emi.reloading.worry"), reloadInfoX, screenHeight - 36); } } + } else { } EmiProfiler.pop(); lastHoveredCraftable = null; return; } else if (EmiRecipes.activeWorker != null) { - context.drawTextWithShadow(EmiPort.translatable("emi.reloading.still_baking_recipes"), 48, base.screen().height - 16); + int bakingX = getDebugTextX(); + context.drawTextWithShadow(EmiPort.translatable("emi.reloading.still_baking_recipes"), bakingX, base.screen().height - 16); } else { renderDevMode(context, mouseX, mouseY, delta, base); } - renderWidgets(context, mouseX, mouseY, delta, base); EmiProfiler.push("sidebars"); for (SidebarPanel panel : panels) { panel.render(context, mouseX, mouseY, delta); @@ -766,13 +780,14 @@ private static void renderDevMode(EmiDrawContext context, int mouseX, int mouseY int color = 0xFFFFFF; Text title = EmiPort.literal("EMI Dev Mode"); int off = -16; + int devTextX = getDebugTextX(); if (!EmiReloadLog.warnings.isEmpty()) { color = 0xFF0000; off = -11; String warnCount = EmiReloadLog.warningCount + " Warnings"; - context.drawTextWithShadow(EmiPort.literal(warnCount), 48, screen.height - 21, color); + context.drawTextWithShadow(EmiPort.literal(warnCount), devTextX, screen.height - 21, color); int width = Math.max(client.textRenderer.getWidth(title), client.textRenderer.getWidth(warnCount)); - if (mouseX >= 48 && mouseX < width + 48 && mouseY > screen.height - 28) { + if (mouseX >= devTextX && mouseX < width + devTextX && mouseY > screen.height - 28) { context.raw().drawTooltip(client.textRenderer, Stream.concat(Stream.of(" EMI detected some issues, see log for full details"), EmiReloadLog.warnings.stream()).map(s -> { String a = s; @@ -784,7 +799,7 @@ private static void renderDevMode(EmiDrawContext context, int mouseX, int mouseY .collect(Collectors.toList()), 0, 20); } } - context.drawTextWithShadow(title, 48, screen.height + off, color); + context.drawTextWithShadow(title, devTextX, screen.height + off, color); } } @@ -1281,9 +1296,12 @@ public static boolean recipeInteraction(EmiRecipe recipe, Function Date: Sun, 3 Nov 2024 13:57:53 -0600 Subject: [PATCH 3/5] Fix stack undefaulting --- xplat/src/main/java/dev/emi/emi/api/widget/SlotWidget.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xplat/src/main/java/dev/emi/emi/api/widget/SlotWidget.java b/xplat/src/main/java/dev/emi/emi/api/widget/SlotWidget.java index 0f44566d..cc21b747 100644 --- a/xplat/src/main/java/dev/emi/emi/api/widget/SlotWidget.java +++ b/xplat/src/main/java/dev/emi/emi/api/widget/SlotWidget.java @@ -283,8 +283,8 @@ private boolean slotInteraction(Function function) { EmiRecipe recipe = getRecipe(); if (canResolve()) { if (function.apply(EmiConfig.defaultStack)) { - if (BoM.isDefaultRecipe(RecipeScreen.resolve, recipe)) { - BoM.removeRecipe(RecipeScreen.resolve, recipe); + if (BoM.isDefaultRecipe(getStack(), recipe)) { + BoM.removeRecipe(getStack(), recipe); } else { BoM.addRecipe(RecipeScreen.resolve, recipe); } From a9d60e37db3917e6f265110ea78da629aad7e42a Mon Sep 17 00:00:00 2001 From: emilyploszaj Date: Sun, 3 Nov 2024 13:58:51 -0600 Subject: [PATCH 4/5] 1.1.18 --- CHANGELOG.md | 14 +++++++------- gradle.properties | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd614db2..183e3900 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,12 @@ ### Additions -* Added support for quoting in search queries and OR splitting up words rather than needing a space +* Added visibility options for the EMI config and recipe tree buttons +* EMI config button now is visible by default when toggled, to prevent people from accidentally hiding the mod without knowing how to undo it ### Tweaks -* Tweak a small few recipe IDs to be synthetic when they previously weren't -* Updated config UI on modern versions to be more similar to vanilla changes -* Tweaked "default stack" bind to also toggle during resolution +* EMI visibility toast is now only shown when help level is verbose, due to other features preventing accidental hiding +* EMI config enum selection screen now is consistent with the rest of the config screen on later versions ### Fixes -* Added additional dev mode nags for synthetic IDs #730 -* Added further safety around recipe baking to prevent self mutation from affecting EMI significantly #776 -* Further update JEI integration with null backgrounds #755 +* Fixed JEI dependency on 1.19 versions #780 +* Fixed stack default bind not toggling in recipe tree +* #689 diff --git a/gradle.properties b/gradle.properties index c51e0831..6b732a7a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.21.1 enabled_platforms=fabric,neoforge archives_base_name=emi -mod_version=1.1.17 +mod_version=1.1.18 maven_group=dev.emi architectury_version=4.9.83 From e2c95c0262f24f79d8ec156b5b1641debcba4fd9 Mon Sep 17 00:00:00 2001 From: emilyploszaj Date: Sun, 3 Nov 2024 14:01:06 -0600 Subject: [PATCH 5/5] Revert "Update config enum screen to be consistent with config screen" This reverts commit af59b089b8b71d0f76770696769b24e4737602ad. --- .../src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java | 6 +++++- xplat/src/main/java/dev/emi/emi/screen/ConfigScreen.java | 2 -- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java b/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java index ec8e4803..c894bf99 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java +++ b/xplat/src/main/java/dev/emi/emi/screen/ConfigEnumScreen.java @@ -54,7 +54,6 @@ public void render(DrawContext raw, int mouseX, int mouseY, float delta) { this.renderBackgroundTexture(context.raw()); list.render(context.raw(), mouseX, mouseY, delta); super.render(context.raw(), mouseX, mouseY, delta); - list.render(context.raw(), mouseX, mouseY, delta); ListWidget.Entry entry = list.getHoveredEntry(); if (entry instanceof SelectionWidget widget) { if (widget.button.isHovered()) { @@ -63,6 +62,11 @@ public void render(DrawContext raw, int mouseX, int mouseY, float delta) { } } + @Override + public void renderBackground(DrawContext context, int mouseX, int mouseY, float delta) { + // Prevent double background draw + } + @Override public void close() { MinecraftClient.getInstance().setScreen(last); diff --git a/xplat/src/main/java/dev/emi/emi/screen/ConfigScreen.java b/xplat/src/main/java/dev/emi/emi/screen/ConfigScreen.java index 1f6da065..de776c98 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/ConfigScreen.java +++ b/xplat/src/main/java/dev/emi/emi/screen/ConfigScreen.java @@ -369,8 +369,6 @@ public void render(DrawContext raw, int mouseX, int mouseY, float delta) { this.renderBackgroundTexture(context.raw()); list.render(context.raw(), mouseX, mouseY, delta); super.render(context.raw(), mouseX, mouseY, delta); - list.render(context.raw(), mouseX, mouseY, delta); - super.render(context.raw(), mouseX, mouseY, delta); if (list.getHoveredEntry() != null) { EmiRenderHelper.drawTooltip(this, context, list.getHoveredEntry().getTooltip(mouseX, mouseY), mouseX, mouseY, Math.min(width / 2 - 16, maxWidth)); }