From 75c58fc6435e250778b4280dc964b49a1a5c278c Mon Sep 17 00:00:00 2001 From: 500-internal-server-error <76838083+500-internal-server-error@users.noreply.github.com> Date: Sun, 21 Dec 2025 15:29:44 +0700 Subject: [PATCH 1/2] Fixed emojis getting duplicated when reloaded --- .../src/main/java/com/hrznstudio/emojiful/CommonClass.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java b/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java index cd6ac4f..072e1c8 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java @@ -190,6 +190,13 @@ public static String cleanURL(String string){ public static void onRecipesUpdated(RecipeManager manager) { ClientEmojiHandler.CATEGORIES.removeIf(EmojiCategory::worldBased); Constants.EMOJI_LIST.removeIf(Emoji::worldBased); + // lambda so we dont iterate twice + Constants.EMOJI_MAP.entrySet().removeIf(e -> { + // first wipe datapack emojis + e.getValue().removeIf(Emoji::worldBased); + // then let the category be wiped if no emojis left in it + return e.getKey().isEmpty(); + }); if (Services.CONFIG.loadDatapack()) { RecipeType emojiRecipeRecipeType = Services.PLATFORM.getRecipeType(); List emojiList = manager.getAllRecipesFor(emojiRecipeRecipeType).stream().map(RecipeHolder::value).toList(); From 611800540a128db3060da0d202fc2591c6f21a4f Mon Sep 17 00:00:00 2001 From: 500-internal-server-error <76838083+500-internal-server-error@users.noreply.github.com> Date: Sun, 21 Dec 2025 15:30:01 +0700 Subject: [PATCH 2/2] Fixed GUI crashing when there are fewer than 7 categories --- .../hrznstudio/emojiful/gui/EmojiSelectionGui.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java index 0096142..fdf527b 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java @@ -31,6 +31,7 @@ public class EmojiSelectionGui extends IDrawableGuiListener { private final Rect2i categorySelectionArea; private final Rect2i emojiInfoArea; private final Rect2i textFieldRectangle; + private final int categoriesPerScroll = 7; private int selectionPointer; private int categoryPointer; private int openSelectionAreaEmoji; @@ -98,7 +99,7 @@ public void render(GuiGraphics guiGraphics) { progressY = (int) (((this.categorySelectionArea.getHeight() - 10) / ((double) ClientEmojiHandler.CATEGORIES.size() - 7)) * (categoryPointer)); drawRectangle(guiGraphics, new Rect2i(this.categorySelectionArea.getX() + this.categorySelectionArea.getWidth() - 2, this.categorySelectionArea.getY() + progressY + 2, 1, 5), 0xff525252); EmojiCategory firstCategory = getCategory(selectionPointer); - for (int i = 0; i < 7; i++) { + for (int i = 0; i < Math.min(categoriesPerScroll, Constants.EMOJI_MAP.size()); i++) { int selCategory = i + categoryPointer; if (selCategory < ClientEmojiHandler.CATEGORIES.size()) { EmojiCategory category = ClientEmojiHandler.CATEGORIES.get(selCategory); @@ -128,7 +129,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int p_231044_5_) { if (this.showingSelectionArea) { fieldWidget.setFocused(textFieldRectangle.contains((int) mouseX, (int) mouseY)); if (categorySelectionArea.contains((int) mouseX, (int) mouseY)) { - for (int i = 0; i < 7; i++) { + for (int i = 0; i < Math.min(categoriesPerScroll, Constants.EMOJI_MAP.size()); i++) { int selCategory = i + categoryPointer; if (selCategory < ClientEmojiHandler.CATEGORIES.size()) { Rect2i rec = new Rect2i(categorySelectionArea.getX() + 6, categorySelectionArea.getY() + 6 + i * 12, 11, 11); @@ -145,7 +146,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int p_231044_5_) { return true; } if (selectionArea.contains((int) mouseX, (int) mouseY)) { - for (int line = 0; line < 6; line++) { + for (int line = 0; line < Math.min(categoriesPerScroll, Constants.EMOJI_MAP.size()) - 1; line++) { Object object = getLineToDraw(line + selectionPointer); if (object instanceof Emoji[]) { Emoji[] emojis = (Emoji[]) object; @@ -178,13 +179,13 @@ public void mouseMoved(double mouseX, double mouseY) { public boolean mouseScrolled(double mouseX, double mouseY, double delta, double d) { if (categorySelectionArea.contains((int) mouseX, (int) mouseY)) { categoryPointer -= d; - categoryPointer = Mth.clamp(categoryPointer, 0, ClientEmojiHandler.CATEGORIES.size() - 7); + categoryPointer = Mth.clamp(categoryPointer, 0, ClientEmojiHandler.CATEGORIES.size() - Math.min(categoriesPerScroll, Constants.EMOJI_MAP.size())); return true; } if (selectionArea.contains((int) mouseX, (int) mouseY)) { selectionPointer -= d; selectionPointer = Mth.clamp(selectionPointer, 1, Math.max(1, getLineAmount() - 5)); - categoryPointer = Mth.clamp(Arrays.asList(ClientEmojiHandler.CATEGORIES).indexOf(getCategory(selectionPointer)), 0, ClientEmojiHandler.CATEGORIES.size() - 7); + categoryPointer = Mth.clamp(Arrays.asList(ClientEmojiHandler.CATEGORIES).indexOf(getCategory(selectionPointer)), 0, ClientEmojiHandler.CATEGORIES.size() - Math.min(categoriesPerScroll, Constants.EMOJI_MAP.size())); return true; } return false;