From 655d4cbe8b958d450fe9db539b54f62b3770d101 Mon Sep 17 00:00:00 2001 From: Matsor Browncoat Date: Sat, 17 May 2025 15:48:18 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20Preliminary=20"Search=20Bookmar?= =?UTF-8?q?ks"=20(#958)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/dev/emi/emi/EmiRenderHelper.java | 7 ++ .../main/java/dev/emi/emi/VanillaPlugin.java | 17 +-- .../dev/emi/emi/api/stack/EmiIngredient.java | 4 + .../emi/api/stack/SearchEmiIngredient.java | 106 ++++++++++++++++++ .../java/dev/emi/emi/config/EmiConfig.java | 4 + .../java/dev/emi/emi/config/SidebarType.java | 1 + .../dev/emi/emi/runtime/EmiBookmarks.java | 48 ++++++++ .../emi/emi/runtime/EmiPersistentData.java | 5 + .../java/dev/emi/emi/runtime/EmiSidebars.java | 1 + .../dev/emi/emi/screen/EmiScreenManager.java | 28 +++-- .../emi/screen/widget/EmiSearchWidget.java | 22 +++- .../SearchEmiIngredientSerializer.java | 49 ++++++++ .../main/resources/assets/emi/lang/en_us.json | 2 + 13 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 xplat/src/main/java/dev/emi/emi/api/stack/SearchEmiIngredient.java create mode 100644 xplat/src/main/java/dev/emi/emi/runtime/EmiBookmarks.java create mode 100644 xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java diff --git a/xplat/src/main/java/dev/emi/emi/EmiRenderHelper.java b/xplat/src/main/java/dev/emi/emi/EmiRenderHelper.java index 9f1e5b18..2a3a1a54 100644 --- a/xplat/src/main/java/dev/emi/emi/EmiRenderHelper.java +++ b/xplat/src/main/java/dev/emi/emi/EmiRenderHelper.java @@ -264,6 +264,13 @@ public static void renderAmount(EmiDrawContext context, int x, int y, Text amoun context.pop(); } + public static void renderText(EmiDrawContext context, int x, int y, Text text) { + context.push(); + context.matrices().translate(0, 0, 200); + context.drawTextWithShadow(text, x + 1, y + 5, -1); + context.pop(); + } + public static void renderIngredient(EmiIngredient ingredient, EmiDrawContext context, int x, int y) { RenderSystem.enableDepthTest(); context.push(); diff --git a/xplat/src/main/java/dev/emi/emi/VanillaPlugin.java b/xplat/src/main/java/dev/emi/emi/VanillaPlugin.java index bbf1be92..7b6c2ab8 100644 --- a/xplat/src/main/java/dev/emi/emi/VanillaPlugin.java +++ b/xplat/src/main/java/dev/emi/emi/VanillaPlugin.java @@ -41,14 +41,7 @@ import dev.emi.emi.api.recipe.EmiWorldInteractionRecipe; import dev.emi.emi.api.render.EmiRenderable; import dev.emi.emi.api.render.EmiTexture; -import dev.emi.emi.api.stack.Comparison; -import dev.emi.emi.api.stack.EmiIngredient; -import dev.emi.emi.api.stack.EmiRegistryAdapter; -import dev.emi.emi.api.stack.EmiStack; -import dev.emi.emi.api.stack.FluidEmiStack; -import dev.emi.emi.api.stack.ItemEmiStack; -import dev.emi.emi.api.stack.ListEmiIngredient; -import dev.emi.emi.api.stack.TagEmiIngredient; +import dev.emi.emi.api.stack.*; import dev.emi.emi.api.widget.Bounds; import dev.emi.emi.api.widget.GeneratedSlotWidget; import dev.emi.emi.config.EffectLocation; @@ -95,10 +88,7 @@ import dev.emi.emi.runtime.EmiDrawContext; import dev.emi.emi.runtime.EmiLog; import dev.emi.emi.runtime.EmiReloadLog; -import dev.emi.emi.stack.serializer.FluidEmiStackSerializer; -import dev.emi.emi.stack.serializer.ItemEmiStackSerializer; -import dev.emi.emi.stack.serializer.ListEmiIngredientSerializer; -import dev.emi.emi.stack.serializer.TagEmiIngredientSerializer; +import dev.emi.emi.stack.serializer.*; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; @@ -111,13 +101,11 @@ import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen; import net.minecraft.component.DataComponentTypes; import net.minecraft.component.type.DyedColorComponent; -import net.minecraft.component.type.PotionContentsComponent; import net.minecraft.enchantment.Enchantment; import net.minecraft.entity.effect.StatusEffectInstance; import net.minecraft.fluid.FlowableFluid; import net.minecraft.fluid.Fluid; import net.minecraft.fluid.Fluids; -import net.minecraft.inventory.Inventory; import net.minecraft.item.ArmorItem; import net.minecraft.item.BlockItem; import net.minecraft.item.DyeItem; @@ -217,6 +205,7 @@ public void initialize(EmiInitRegistry registry) { registry.addIngredientSerializer(FluidEmiStack.class, new FluidEmiStackSerializer()); registry.addIngredientSerializer(TagEmiIngredient.class, new TagEmiIngredientSerializer()); registry.addIngredientSerializer(ListEmiIngredient.class, new ListEmiIngredientSerializer()); + registry.addIngredientSerializer(SearchEmiIngredient.class, new SearchEmiIngredientSerializer()); registry.addRegistryAdapter(EmiRegistryAdapter.simple(Item.class, EmiPort.getItemRegistry(), EmiStack::of)); registry.addRegistryAdapter(EmiRegistryAdapter.simple(Fluid.class, EmiPort.getFluidRegistry(), EmiStack::of)); diff --git a/xplat/src/main/java/dev/emi/emi/api/stack/EmiIngredient.java b/xplat/src/main/java/dev/emi/emi/api/stack/EmiIngredient.java index ba4a58bb..dcdacb6f 100644 --- a/xplat/src/main/java/dev/emi/emi/api/stack/EmiIngredient.java +++ b/xplat/src/main/java/dev/emi/emi/api/stack/EmiIngredient.java @@ -140,4 +140,8 @@ public static EmiIngredient of(List list, long amount) return EmiTags.getIngredient(tagType, list.stream().flatMap(i -> i.getEmiStacks().stream()).toList(), amount); } } + + public static EmiIngredient of(String text, List results) { + return new SearchEmiIngredient(text, results); + } } diff --git a/xplat/src/main/java/dev/emi/emi/api/stack/SearchEmiIngredient.java b/xplat/src/main/java/dev/emi/emi/api/stack/SearchEmiIngredient.java new file mode 100644 index 00000000..071bdae0 --- /dev/null +++ b/xplat/src/main/java/dev/emi/emi/api/stack/SearchEmiIngredient.java @@ -0,0 +1,106 @@ +package dev.emi.emi.api.stack; + +import com.google.common.collect.Lists; +import dev.emi.emi.EmiPort; +import dev.emi.emi.api.render.EmiRender; +import dev.emi.emi.screen.tooltip.EmiTextTooltipWrapper; +import dev.emi.emi.screen.tooltip.IngredientTooltipComponent; +import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.tooltip.TooltipComponent; +import org.jetbrains.annotations.ApiStatus; + +import java.util.List; + +@ApiStatus.Internal +public class SearchEmiIngredient implements EmiIngredient { + private final List results; + private final List fullResults; + + public final String content; + + public SearchEmiIngredient(String content, List results) { + this.results = results; + this.fullResults = results.stream().flatMap(i -> i.getEmiStacks().stream()).toList(); + if (fullResults.isEmpty()) { + throw new IllegalArgumentException("SearchEmiIngredient cannot be and empty search"); + } + + this.content = content; + } + + @Override + public void render(DrawContext draw, int x, int y, float delta, int flags) { + int item = (int) (System.currentTimeMillis() / 1000 % results.size()); + EmiIngredient current = results.get(item); + if ((flags & RENDER_ICON) != 0) { + current.render(draw, x, y, delta, -1 ^ RENDER_AMOUNT); + } + if ((flags & RENDER_INGREDIENT) != 0) { + EmiRender.renderIngredientIcon(this, draw, x, y); + } + +// // Maybe render a couple of letters of the search above the icon +// EmiDrawContext context = EmiDrawContext.wrap(draw); +// EmiRenderHelper.renderText(context, x, y, EmiPort.literal(content.substring(0, 3))); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof SearchEmiIngredient ingredient && ingredient.content.equals(this.content); + } + + @Override + public EmiIngredient copy() { + return new SearchEmiIngredient(content, results); + } + + @Override + public long getAmount() { + return 1; + } + + @Override + public EmiIngredient setAmount(long amount) { + return null; + } + + @Override + public float getChance() { + return 1; + } + + @Override + public EmiIngredient setChance(float chance) { + return null; + } + + @Override + public List getEmiStacks() { + return EmiStack.EMPTY.getEmiStacks(); + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public List getTooltip() { + List tooltip = Lists.newArrayList(); + tooltip.add(new EmiTextTooltipWrapper(this, EmiPort.ordered(EmiPort.literal(content)))); + tooltip.add(new IngredientTooltipComponent(results)); + int item = (int) (System.currentTimeMillis() / 1000 % results.size()); + tooltip.addAll(results.get(item).copy().setAmount(1).getTooltip()); + return tooltip; + } + + @ApiStatus.Internal + public String getContent() { + return content; + } + + @ApiStatus.Internal + public List getResults() { + return results; + } +} 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 c1ea1b83..2b4f0c47 100644 --- a/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java +++ b/xplat/src/main/java/dev/emi/emi/config/EmiConfig.java @@ -362,6 +362,10 @@ public class EmiConfig { @ConfigValue("binds.clear-search") public static EmiBind clearSearch = new EmiBind("key.emi.clear_search", InputUtil.UNKNOWN_KEY.getCode()); + @Comment("Add current search as a Bookmark") + @ConfigValue("binds.add-bookmark") + public static EmiBind addBookmark = new EmiBind("key.emi.add_bookmark", EmiInput.CONTROL_MASK, GLFW.GLFW_KEY_ENTER); + @Comment("Display the recipes for creating a stack.") @ConfigValue("binds.view-recipes") public static EmiBind viewRecipes = new EmiBind("key.emi.view_recipes", diff --git a/xplat/src/main/java/dev/emi/emi/config/SidebarType.java b/xplat/src/main/java/dev/emi/emi/config/SidebarType.java index 9ccbdb48..14b4dba8 100644 --- a/xplat/src/main/java/dev/emi/emi/config/SidebarType.java +++ b/xplat/src/main/java/dev/emi/emi/config/SidebarType.java @@ -13,6 +13,7 @@ public enum SidebarType implements ConfigEnum { CRAFT_HISTORY("craft-history", 64, 146), EMPTY("empty", 96, 146), CHESS("chess", 48, 146), + BOOKMARKS("bookmarks", 112, 146), ; private final String name; diff --git a/xplat/src/main/java/dev/emi/emi/runtime/EmiBookmarks.java b/xplat/src/main/java/dev/emi/emi/runtime/EmiBookmarks.java new file mode 100644 index 00000000..98fbdf6e --- /dev/null +++ b/xplat/src/main/java/dev/emi/emi/runtime/EmiBookmarks.java @@ -0,0 +1,48 @@ +package dev.emi.emi.runtime; + +import com.google.common.collect.Lists; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.SearchEmiIngredient; +import dev.emi.emi.api.stack.serializer.EmiIngredientSerializer; + +import java.util.List; + +public class EmiBookmarks { + public static List bookmarks = Lists.newArrayList(); + + public static JsonArray save() { + JsonArray arr = new JsonArray(); + for (SearchEmiIngredient bookmark : bookmarks) { + JsonElement serialized = EmiIngredientSerializer.getSerialized(bookmark); + arr.add(serialized); + } + return arr; + } + + public static void load(JsonArray arr) { + bookmarks.clear(); + for (JsonElement element : arr) { + EmiIngredient bookmark = EmiIngredientSerializer.getDeserialized(element); + + if (bookmark instanceof SearchEmiIngredient) { + bookmarks.add((SearchEmiIngredient) bookmark); + } + } + } + + public static void addBookmark(String content, List items) { + SearchEmiIngredient bookmark = new SearchEmiIngredient(content, items); + if (!bookmarks.contains(bookmark)) { + bookmarks.add(bookmark); + } + EmiPersistentData.save(); + } + + public static void removeBookmark(SearchEmiIngredient bookmark) { + bookmarks.remove(bookmark); + EmiPersistentData.save(); + } +} + diff --git a/xplat/src/main/java/dev/emi/emi/runtime/EmiPersistentData.java b/xplat/src/main/java/dev/emi/emi/runtime/EmiPersistentData.java index 03d36027..45d2c097 100644 --- a/xplat/src/main/java/dev/emi/emi/runtime/EmiPersistentData.java +++ b/xplat/src/main/java/dev/emi/emi/runtime/EmiPersistentData.java @@ -5,6 +5,7 @@ import java.io.FileWriter; import com.google.gson.Gson; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import dev.emi.emi.bom.BoM; @@ -18,6 +19,7 @@ public static void save() { try { JsonObject json = new JsonObject(); json.add("favorites", EmiFavorites.save()); + json.add("bookmarks", EmiBookmarks.save()); EmiSidebars.save(json); json.add("recipe_defaults", BoM.saveAdded()); json.add("hidden_stacks", EmiHidden.save()); @@ -38,6 +40,9 @@ public static void load() { if (JsonHelper.hasArray(json, "favorites")) { EmiFavorites.load(JsonHelper.getArray(json, "favorites")); } + if (JsonHelper.hasArray(json, "bookmarks")) { + EmiBookmarks.load(JsonHelper.getArray(json, "bookmarks")); + } EmiSidebars.load(json); if (JsonHelper.hasJsonObject(json, "recipe_defaults")) { BoM.loadAdded(JsonHelper.getObject(json, "recipe_defaults")); diff --git a/xplat/src/main/java/dev/emi/emi/runtime/EmiSidebars.java b/xplat/src/main/java/dev/emi/emi/runtime/EmiSidebars.java index 260622b6..0cb4b43f 100644 --- a/xplat/src/main/java/dev/emi/emi/runtime/EmiSidebars.java +++ b/xplat/src/main/java/dev/emi/emi/runtime/EmiSidebars.java @@ -30,6 +30,7 @@ public static List getStacks(SidebarType type) { case INDEX -> EmiConfig.editMode ? EmiStackList.stacks : EmiStackList.filteredStacks; case CRAFTABLES -> craftables; case FAVORITES -> EmiFavorites.favoriteSidebar; + case BOOKMARKS -> EmiBookmarks.bookmarks; case LOOKUP_HISTORY -> lookupHistory; case CRAFT_HISTORY -> craftHistory; case EMPTY -> List.of(); 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 510f4a90..f11d7d8b 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java +++ b/xplat/src/main/java/dev/emi/emi/screen/EmiScreenManager.java @@ -7,6 +7,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import dev.emi.emi.api.stack.SearchEmiIngredient; +import dev.emi.emi.runtime.*; import net.minecraft.component.ComponentChanges; import org.jetbrains.annotations.Nullable; import org.joml.Matrix4fStack; @@ -55,16 +57,6 @@ import dev.emi.emi.registry.EmiRecipeFiller; import dev.emi.emi.registry.EmiRecipes; import dev.emi.emi.registry.EmiStackProviders; -import dev.emi.emi.runtime.EmiDrawContext; -import dev.emi.emi.runtime.EmiFavorite; -import dev.emi.emi.runtime.EmiFavorites; -import dev.emi.emi.runtime.EmiHidden; -import dev.emi.emi.runtime.EmiHistory; -import dev.emi.emi.runtime.EmiLog; -import dev.emi.emi.runtime.EmiProfiler; -import dev.emi.emi.runtime.EmiReloadLog; -import dev.emi.emi.runtime.EmiReloadManager; -import dev.emi.emi.runtime.EmiSidebars; import dev.emi.emi.screen.tooltip.RecipeTooltipComponent; import dev.emi.emi.screen.widget.EmiSearchWidget; import dev.emi.emi.screen.widget.SidebarButtonWidget; @@ -80,7 +72,6 @@ import net.minecraft.client.gui.tooltip.TooltipComponent; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.sound.PositionedSoundInstance; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.ItemStack; import net.minecraft.screen.slot.Slot; @@ -1070,6 +1061,21 @@ public static boolean mouseReleased(double mouseX, double mouseY, int button) { } } else { EmiStackInteraction hovered = getHoveredStack((int) mouseX, (int) mouseY, !isClickClicky(button)); + + if (panel != null) { + ScreenSpace space = panel.getHoveredSpace(mx, my); + if (space != null && space.getType() == SidebarType.BOOKMARKS && pressedStack instanceof SearchEmiIngredient bookmark) { + if (button == 1) { + EmiBookmarks.removeBookmark(bookmark); + } else if (bookmark.getContent() != null) { + EmiApi.setSearchText(bookmark.getContent()); + EmiPort.focus(search, true); + } + + return true; + } + } + if (draggedStack.isEmpty() && stackInteraction(hovered, bind -> bind.matchesMouse(button))) { return true; } diff --git a/xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java b/xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java index 89d42ee4..74aba19c 100644 --- a/xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java +++ b/xplat/src/main/java/dev/emi/emi/screen/widget/EmiSearchWidget.java @@ -4,6 +4,10 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import dev.emi.emi.api.EmiApi; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.runtime.EmiBookmarks; +import dev.emi.emi.screen.EmiScreenManager.SidebarPanel; import org.joml.Matrix4fStack; import org.lwjgl.glfw.GLFW; @@ -20,7 +24,6 @@ import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.resource.language.I18n; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.MutableText; import net.minecraft.text.Style; import net.minecraft.util.Formatting; @@ -206,6 +209,23 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { setText(""); return true; } + if (EmiConfig.addBookmark.matchesKey(keyCode, scanCode)) { + String search = EmiApi.getSearchText(); + if (!search.isEmpty()) { + SidebarPanel panel = EmiScreenManager.getSearchPanel(); + + if (panel != null) { + List list = panel.space.getStacks(); + + // Limit to at most 8 items for the bookmark + list = list.subList(0, Math.min(list.size(), 8)); + + if (!list.isEmpty()) { + EmiBookmarks.addBookmark(search, list); + } + } + } + } if ((EmiConfig.focusSearch.matchesKey(keyCode, scanCode) || keyCode == GLFW.GLFW_KEY_ENTER || keyCode == GLFW.GLFW_KEY_ESCAPE)) { EmiPort.focus(this, false); diff --git a/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java b/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java new file mode 100644 index 00000000..5725b6fd --- /dev/null +++ b/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java @@ -0,0 +1,49 @@ +package dev.emi.emi.stack.serializer; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import dev.emi.emi.api.stack.EmiIngredient; +import dev.emi.emi.api.stack.SearchEmiIngredient; +import dev.emi.emi.api.stack.serializer.EmiIngredientSerializer; +import dev.emi.emi.registry.EmiIngredientSerializers; +import net.minecraft.util.JsonHelper; + +import java.util.ArrayList; +import java.util.List; + +public class SearchEmiIngredientSerializer implements EmiIngredientSerializer { + @Override + public String getType() { + return "text"; + } + + @Override + public EmiIngredient deserialize(JsonElement element) { + JsonObject json = element.getAsJsonObject(); + String content = JsonHelper.getString(json, "content"); + JsonArray resultsArray = JsonHelper.getArray(json, "results"); + + List results = new ArrayList<>(); + for (JsonElement resultElement : resultsArray) { + results.add(EmiIngredientSerializers.deserialize(resultElement)); + } + + return EmiIngredient.of(content, results); + } + + @Override + public JsonElement serialize(SearchEmiIngredient stack) { + JsonObject json = new JsonObject(); +// json.addProperty("type", getType()); + json.addProperty("content", stack.getContent()); + + JsonArray results = new JsonArray(); + for (EmiIngredient inner : stack.getResults()) { + results.add(EmiIngredientSerializers.serialize(inner)); + } + json.add("results", results); + + return json; + } +} diff --git a/xplat/src/main/resources/assets/emi/lang/en_us.json b/xplat/src/main/resources/assets/emi/lang/en_us.json index de4ddb0d..a6a3c2d7 100644 --- a/xplat/src/main/resources/assets/emi/lang/en_us.json +++ b/xplat/src/main/resources/assets/emi/lang/en_us.json @@ -6,6 +6,7 @@ "key.emi.toggle_visibility": "Toggle Visibility", "key.emi.focus_search": "Focus Search", "key.emi.clear_search": "Clear Search", + "key.emi.add_bookmrk": "Add Search Bookmark", "key.emi.view_recipes": "View Recipes", "key.emi.view_uses": "View Uses", "key.emi.favorite": "Favorite", @@ -49,6 +50,7 @@ "emi.sidebar.type.craftables.description": "Displays all craftable stacks", "emi.sidebar.type.favorites": "Favorites", "emi.sidebar.type.favorites.description": "Displays favorites", + "emi.sidebar.type.bookmarks": "Search Bookmarks", "emi.sidebar.type.lookup_history": "Lookup History", "emi.sidebar.type.lookup_history.description": "Displays previously looked up stacks", "emi.sidebar.type.craft_history": "Crafting History", From 2b82daf75657e4fdab6fbe833f822624a62de81b Mon Sep 17 00:00:00 2001 From: Matsor Browncoat Date: Sat, 17 May 2025 15:53:28 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=91=8C=20Fix=20typo=20in=20translatio?= =?UTF-8?q?n=20key?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xplat/src/main/resources/assets/emi/lang/en_us.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xplat/src/main/resources/assets/emi/lang/en_us.json b/xplat/src/main/resources/assets/emi/lang/en_us.json index a6a3c2d7..b80a34b9 100644 --- a/xplat/src/main/resources/assets/emi/lang/en_us.json +++ b/xplat/src/main/resources/assets/emi/lang/en_us.json @@ -6,7 +6,7 @@ "key.emi.toggle_visibility": "Toggle Visibility", "key.emi.focus_search": "Focus Search", "key.emi.clear_search": "Clear Search", - "key.emi.add_bookmrk": "Add Search Bookmark", + "key.emi.add_bookmark": "Add Search Bookmark", "key.emi.view_recipes": "View Recipes", "key.emi.view_uses": "View Uses", "key.emi.favorite": "Favorite", From 35fc55cdbf1b351958b8ba4a9b0feb133827f916 Mon Sep 17 00:00:00 2001 From: Matsor Browncoat Date: Sun, 18 May 2025 08:53:19 +0200 Subject: [PATCH 3/3] =?UTF-8?q?=F0=9F=94=A8=20Type=20serialized=20json=20f?= =?UTF-8?q?or=20deserializer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../emi/stack/serializer/SearchEmiIngredientSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java b/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java index 5725b6fd..28ae46c1 100644 --- a/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java +++ b/xplat/src/main/java/dev/emi/emi/stack/serializer/SearchEmiIngredientSerializer.java @@ -15,7 +15,7 @@ public class SearchEmiIngredientSerializer implements EmiIngredientSerializer { @Override public String getType() { - return "text"; + return "search"; } @Override @@ -35,7 +35,7 @@ public EmiIngredient deserialize(JsonElement element) { @Override public JsonElement serialize(SearchEmiIngredient stack) { JsonObject json = new JsonObject(); -// json.addProperty("type", getType()); + json.addProperty("type", getType()); json.addProperty("content", stack.getContent()); JsonArray results = new JsonArray();