From f463e5d456b3ee990b6f20aed918ccd980b851f0 Mon Sep 17 00:00:00 2001 From: Buuz135 Date: Sat, 2 Mar 2024 20:07:01 +0100 Subject: [PATCH] - Ported to 1.20.4 - Added NeoForge Support - Changed the default emojis to be 9x9 textures of custom ones --- .github/workflows/publish.yaml | 29 +++- .../emojiful/ClientEmojiHandler.java | 11 +- .../com/hrznstudio/emojiful/CommonClass.java | 141 +++++++++++++++++- .../com/hrznstudio/emojiful/api/Emoji.java | 2 +- .../emojiful/datapack/EmojiRecipe.java | 13 +- .../datapack/EmojiRecipeSerializer.java | 26 +++- .../emojiful/gui/EmojiSelectionGui.java | 14 +- .../emojiful/gui/EmojiSuggestionHelper.java | 2 +- .../emojiful/gui/EmojifulBedChatScreen.java | 4 +- .../emojiful/gui/EmojifulChatScreen.java | 18 ++- .../resources/emojifulcommon.accesswidener | 2 +- Fabric/build.gradle | 4 +- .../emojiful/platform/FabricConfigHelper.java | 2 +- Forge/build.gradle | 61 ++++---- NeoForge/build.gradle | 95 ++++++++++++ .../hrznstudio/emojiful/EmojifulForge.java | 43 ++++++ .../emojiful/ForgeClientHandler.java | 33 ++++ .../emojiful/platform/ForgeConfigHelper.java | 92 ++++++++++++ .../platform/ForgePlatformHelper.java | 40 +++++ .../resources/META-INF/accesstransformer.cfg | 13 ++ .../src/main/resources/META-INF/mods.toml | 32 ++++ ...o.emojiful.platform.services.IConfigHelper | 1 + ...emojiful.platform.services.IPlatformHelper | 1 + build.gradle | 5 + gradle.properties | 21 ++- gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle | 8 +- 27 files changed, 619 insertions(+), 96 deletions(-) create mode 100644 NeoForge/build.gradle create mode 100644 NeoForge/src/main/java/com/hrznstudio/emojiful/EmojifulForge.java create mode 100644 NeoForge/src/main/java/com/hrznstudio/emojiful/ForgeClientHandler.java create mode 100644 NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgeConfigHelper.java create mode 100644 NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgePlatformHelper.java create mode 100644 NeoForge/src/main/resources/META-INF/accesstransformer.cfg create mode 100644 NeoForge/src/main/resources/META-INF/mods.toml create mode 100644 NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IConfigHelper create mode 100644 NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IPlatformHelper diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index 5c37e63..c3b5a6b 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -24,30 +24,43 @@ jobs: - name: build run: ./gradlew build - name: Publish Minecraft Mods Fabric - uses: Kir-Antipov/mc-publish@v2.1 + uses: Kir-Antipov/mc-publish@v3.3.0 with: curseforge-id: 284324 curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} files-primary: Fabric/build/libs/!(*-@(javadoc|sources)).jar files-secondary: Fabric/build/libs/*-@(javadoc|sources).jar - version-type: release + version-type: beta loaders: | fabric quilt - game-versions: 1.20.1 + game-versions: 1.20.4 java: 17 name: "" - changelog: "https://github.com/InnovativeOnlineIndustries/Emojiful/commits/1.20" + changelog: "https://github.com/InnovativeOnlineIndustries/Emojiful/commits/1.20.4" - name: Publish Minecraft Mods Forge - uses: Kir-Antipov/mc-publish@v2.1 + uses: Kir-Antipov/mc-publish@v3.3.0 with: curseforge-id: 284324 curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} files-primary: Forge/build/libs/!(*-@(javadoc|sources)).jar files-secondary: Forge/build/libs/*-@(javadoc|sources).jar - version-type: release + version-type: beta loaders: forge - game-versions: 1.20.1 + game-versions: 1.20.4 java: 17 name: "" - changelog: "https://github.com/InnovativeOnlineIndustries/Emojiful/commits/1.20" + changelog: "https://github.com/InnovativeOnlineIndustries/Emojiful/commits/1.20.4" + - name: Publish Minecraft Mods NeoForge + uses: Kir-Antipov/mc-publish@v3.3.0 + with: + curseforge-id: 284324 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + files-primary: NeoForge/build/libs/!(*-@(javadoc|sources)).jar + files-secondary: NeoForge/build/libs/*-@(javadoc|sources).jar + version-type: beta + loaders: forge + game-versions: 1.20.4 + java: 17 + name: "" + changelog: "https://github.com/InnovativeOnlineIndustries/Emojiful/commits/1.20.4" \ No newline at end of file diff --git a/Common/src/main/java/com/hrznstudio/emojiful/ClientEmojiHandler.java b/Common/src/main/java/com/hrznstudio/emojiful/ClientEmojiHandler.java index 6444d39..3f9127f 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/ClientEmojiHandler.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/ClientEmojiHandler.java @@ -58,20 +58,23 @@ public static void indexEmojis() { } private static void preInitEmojis() { - CATEGORIES.addAll(Arrays.asList("Smileys & Emotion", "Animals & Nature", "Food & Drink", "Activities", "Travel & Places", "Objects", "Symbols", "Flags").stream().map(s -> new EmojiCategory(s, false)).collect(Collectors.toList())); if (Services.CONFIG.loadCustom()) loadCustomEmojis(); //loadGithubEmojis(); - if (Services.CONFIG.loadTwemoji()) loadTwemojis(); + if (Services.CONFIG.loadTwemoji()){ + CATEGORIES.addAll(Arrays.asList("Smileys & Emotion", "Animals & Nature", "Food & Drink", "Activities", "Travel & Places", "Objects", "Symbols", "Flags").stream().map(s -> new EmojiCategory(s, false)).collect(Collectors.toList())); + loadTwemojis(); + } if (Services.CONFIG.getProfanityFilter()) ProfanityFilter.loadConfigs(); } private static void loadCustomEmojis() { try { - YamlReader reader = new YamlReader(new StringReader(CommonClass.readStringFromURL("https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/master/Categories.yml"))); + YamlReader reader = new YamlReader(new StringReader(CommonClass.readStringFromURL("https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/1.20-plus/Categories.yml"))); ArrayList categories = (ArrayList) reader.read(); for (String category : categories) { - CATEGORIES.add(0, new EmojiCategory(category.replace(".yml", ""), false)); + CATEGORIES.add(new EmojiCategory(category.replace(".yml", ""), false)); List emojis = CommonClass.readCategory(category); + emojis.forEach(emoji -> emoji.location = CommonClass.cleanURL(emoji.location)); Constants.EMOJI_LIST.addAll(emojis); Constants.EMOJI_MAP.put(category.replace(".yml", ""), emojis); } diff --git a/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java b/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java index 4260223..8f68fb1 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/CommonClass.java @@ -2,6 +2,7 @@ import com.esotericsoftware.yamlbeans.YamlException; import com.esotericsoftware.yamlbeans.YamlReader; +import com.esotericsoftware.yamlbeans.YamlWriter; import com.google.common.collect.Lists; import com.google.gson.JsonElement; import com.google.gson.JsonParser; @@ -10,17 +11,19 @@ import com.hrznstudio.emojiful.api.EmojiFromGithub; import com.hrznstudio.emojiful.datapack.EmojiRecipe; import com.hrznstudio.emojiful.platform.Services; +import net.minecraft.world.item.crafting.RecipeHolder; import net.minecraft.world.item.crafting.RecipeManager; import net.minecraft.world.item.crafting.RecipeType; +import org.apache.commons.io.FileUtils; import org.lwjgl.glfw.GLFW; +import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; +import java.util.*; public class CommonClass { @@ -45,21 +48,147 @@ public static JsonElement readJsonFromUrl(String url) { return json; } - public static void main(String[] s) { + public static void main(String[] s) throws IOException { ClientEmojiHandler.loadTwemojis(); + var folder = new File("raw_assets"); + HashMap> emojis = new HashMap<>(); + for (String string : Constants.EMOJI_MAP.keySet()) { + for (Emoji emoji : Constants.EMOJI_MAP.get(string)) { + var found = false; + var emoji_name = emoji.name.replace("-", "_"); + for (File file : folder.listFiles()) { + var filename = file.getName().replace(".png", "").replace("-", "_"); + if (!found){ + if (emoji_name.equals(filename) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").equals(filename)) || + emoji_name.equals(filename.replace("woman", "female").replace("man", "male")) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").equals(filename.replace("woman", "female").replace("man", "male"))) + ){ + found = true; + copy(string, file, emojis, emoji); + break; + } + } + } + if (!found){ + System.out.println(emoji.name + "?"); + } + } + } + for (String category : emojis.keySet()) { + var yamlFile = new File(category + ".yml"); + if (!yamlFile.exists()) yamlFile.createNewFile(); + YamlWriter writer = new YamlWriter(new FileWriter(category + ".yml")); + writer.write(emojis.get(category)); + writer.close(); + } + if (false){ + emojis = new HashMap<>(); + for (File file : folder.listFiles()) { + if (file.getName().contains("_tone")) continue;; + var filename = file.getName().replace(".png", "").replace("-", "_"); + var fileNameSplit = filename.split("_"); + var found = false; + for (String string : Constants.EMOJI_MAP.keySet()) { + if (!found){ + for (Emoji emoji : Constants.EMOJI_MAP.get(string)) { + if (emoji.name.replace("-", "_").equals(filename) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").equals(filename)) || + emoji.name.replace("-", "_").equals(filename.replace("woman", "female").replace("man", "male")) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").equals(filename.replace("woman", "female").replace("man", "male"))) + ){ + found = true; + System.out.println(emoji.name + "=" + file.getName()); + copy(string, file, emojis, emoji); + break; + } + } + } + } + for (String string : Constants.EMOJI_MAP.keySet()) { + if (!found){ + for (Emoji emoji : Constants.EMOJI_MAP.get(string)) { + if (emoji.name.replace("-", "_").contains(filename) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").contains(filename)) || + emoji.name.replace("-", "_").contains(filename.replace("woman", "female").replace("man", "male")) || + emoji.strings.stream().anyMatch(s1 -> s1.replaceAll(":", "").replace("-", "_").contains(filename.replace("woman", "female").replace("man", "male"))) + ){ + found = true; + System.out.println(emoji.name + "->" + file.getName()); + copy(string, file, emojis, emoji); + break; + } + } + } + /*if (!found){ + for (Emoji emoji : Constants.EMOJI_MAP.get(string)) { + if (Arrays.stream(fileNameSplit).anyMatch(s1 -> emoji.name.contains(s1)) || Arrays.stream(fileNameSplit).anyMatch(s1 -> emoji.texts.stream().anyMatch(s2 -> s2.contains(s1)))){ + found = true; + copy(string, file); + break; + } + } + }*/ + } + if (!found){ + System.out.println(); + //copy("Missing", file, new HashMap<>(), emoji); + } + } + for (String category : emojis.keySet()) { + var yamlFile = new File(category + ".yml"); + if (!yamlFile.exists()) yamlFile.createNewFile(); + YamlWriter writer = new YamlWriter(new FileWriter(category + ".yml")); + + writer.write(emojis.get(category)); + writer.close(); + } + } + + } + + public static void copy(String category, File sourceFile, HashMap> emojis, Emoji emoji){ + var folderTo = new File("assets/" + category); + if (!folderTo.exists()) folderTo.mkdir(); + try { + var name = sourceFile.getName().replace(".png", "").replace("-", "_"); + emojis.computeIfAbsent(category, s -> new ArrayList<>()).add(new YamlEmoji(name, emoji.strings, "assets/" + category + "/" + sourceFile.getName())); + FileUtils.copyFile(sourceFile, new File(folderTo, sourceFile.getName())); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static class YamlEmoji { + public String name; + public List strings; + public String location; + + public YamlEmoji() { + } + + public YamlEmoji(String name, List strings, String location) { + this.name = name; + this.strings = strings; + this.location = location; + } } public static List readCategory(String cat) throws YamlException { - YamlReader categoryReader = new YamlReader(new StringReader(readStringFromURL("https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/master/" + cat))); + YamlReader categoryReader = new YamlReader(new StringReader(readStringFromURL("https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/1.20-plus/" + cleanURL(cat)))); return Lists.newArrayList(categoryReader.read(Emoji[].class)); } + public static String cleanURL(String string){ + return string.replaceAll(" ", "%20").replaceAll("&", "%26"); + } + public static void onRecipesUpdated(RecipeManager manager) { ClientEmojiHandler.CATEGORIES.removeIf(EmojiCategory::worldBased); Constants.EMOJI_LIST.removeIf(Emoji::worldBased); if (Services.CONFIG.loadDatapack()) { RecipeType emojiRecipeRecipeType = Services.PLATFORM.getRecipeType(); - List emojiList = manager.getAllRecipesFor(emojiRecipeRecipeType); + List emojiList = manager.getAllRecipesFor(emojiRecipeRecipeType).stream().map(RecipeHolder::value).toList(); for (EmojiRecipe emojiRecipe : emojiList) { EmojiFromGithub emoji = new EmojiFromGithub(); emoji.name = emojiRecipe.getName(); diff --git a/Common/src/main/java/com/hrznstudio/emojiful/api/Emoji.java b/Common/src/main/java/com/hrznstudio/emojiful/api/Emoji.java index 43b4382..62e6214 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/api/Emoji.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/api/Emoji.java @@ -167,7 +167,7 @@ public void run() { } public String getUrl() { - return "https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/master/" + location; + return "https://raw.githubusercontent.com/InnovativeOnlineIndustries/emojiful-assets/1.20-plus/" + location; } public File getCache() { diff --git a/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipe.java b/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipe.java index aa91cfb..353b431 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipe.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipe.java @@ -12,13 +12,11 @@ public class EmojiRecipe implements Recipe { - private final ResourceLocation recipeName; private final String category; private final String name; private final String url; - public EmojiRecipe(ResourceLocation recipeName, String category, String name, String url) { - this.recipeName = recipeName; + public EmojiRecipe(String category, String name, String url) { this.category = category; this.name = name; this.url = url; @@ -44,11 +42,6 @@ public ItemStack getResultItem(RegistryAccess registryAccess) { return ItemStack.EMPTY; } - @Override - public ResourceLocation getId() { - return recipeName; - } - @Override public RecipeSerializer getSerializer() { return Services.PLATFORM.getRecipeSerializer(); @@ -59,10 +52,6 @@ public RecipeType getType() { return Services.PLATFORM.getRecipeType(); } - public ResourceLocation getRecipeName() { - return recipeName; - } - public String getCategory() { return category; } diff --git a/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipeSerializer.java b/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipeSerializer.java index 67ea1e8..821502b 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipeSerializer.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/datapack/EmojiRecipeSerializer.java @@ -1,25 +1,39 @@ package com.hrznstudio.emojiful.datapack; import com.google.gson.JsonObject; +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.ExtraCodecs; +import net.minecraft.world.item.crafting.Recipe; import net.minecraft.world.item.crafting.RecipeSerializer; -public class EmojiRecipeSerializer implements RecipeSerializer { +import java.util.Objects; +public class EmojiRecipeSerializer implements RecipeSerializer { + private final Codec codec; public EmojiRecipeSerializer() { - + this.codec = RecordCodecBuilder.create(instance -> { + var test = instance.group( + ExtraCodecs.strictOptionalField(Codec.STRING, "group", "").forGetter(Recipe::getGroup), + Codec.STRING.fieldOf("category").forGetter(EmojiRecipe::getCategory), + Codec.STRING.fieldOf("name").forGetter(EmojiRecipe::getName), + Codec.STRING.fieldOf("url").forGetter(EmojiRecipe::getUrl)); + return test.apply(instance, (s, s2, s3, s4) -> new EmojiRecipe(s2, s3, s4)); + }); } + @Override - public EmojiRecipe fromJson(ResourceLocation recipeId, JsonObject json) { - return new EmojiRecipe(recipeId, json.get("category").getAsString(), json.get("name").getAsString(), json.get("url").getAsString()); + public EmojiRecipe fromNetwork(FriendlyByteBuf buffer) { + return new EmojiRecipe(buffer.readUtf(), buffer.readUtf(), buffer.readUtf()); } @Override - public EmojiRecipe fromNetwork(ResourceLocation recipeId, FriendlyByteBuf buffer) { - return new EmojiRecipe(recipeId, buffer.readUtf(), buffer.readUtf(), buffer.readUtf()); + public Codec codec() { + return codec; } @Override 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 99d8691..17d7d30 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSelectionGui.java @@ -5,7 +5,6 @@ import com.hrznstudio.emojiful.api.Emoji; import com.hrznstudio.emojiful.api.EmojiCategory; import com.hrznstudio.emojiful.platform.Services; -import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.EditBox; @@ -14,7 +13,7 @@ import net.minecraft.client.resources.sounds.SimpleSoundInstance; import net.minecraft.network.chat.FormattedText; import net.minecraft.network.chat.MutableComponent; -import net.minecraft.network.chat.contents.LiteralContents; +import net.minecraft.network.chat.contents.PlainTextContents; import net.minecraft.sounds.SoundEvents; import net.minecraft.util.FormattedCharSequence; import net.minecraft.util.Mth; @@ -55,7 +54,7 @@ public EmojiSelectionGui(ChatScreen screen) { this.categorySelectionArea = new Rect2i(this.selectionArea.getX(), this.selectionArea.getY() + 20, 22, this.selectionArea.getHeight() - 20); this.emojiInfoArea = new Rect2i(this.selectionArea.getX() + 22, this.selectionArea.getY() + this.selectionArea.getHeight() - 20, this.selectionArea.getWidth() - 22, 20); this.textFieldRectangle = new Rect2i(selectionArea.getX() + 6, selectionArea.getY() + 6, selectionArea.getWidth() - 12, 10); - this.fieldWidget = new EditBox(ClientEmojiHandler.oldFontRenderer, textFieldRectangle.getX(), textFieldRectangle.getY(), textFieldRectangle.getWidth(), textFieldRectangle.getHeight(), MutableComponent.create(new LiteralContents(""))); + this.fieldWidget = new EditBox(ClientEmojiHandler.oldFontRenderer, textFieldRectangle.getX(), textFieldRectangle.getY(), textFieldRectangle.getWidth(), textFieldRectangle.getHeight(), MutableComponent.create(new PlainTextContents.LiteralContents(""))); this.fieldWidget.setEditable(true); this.fieldWidget.setVisible(true); this.filteredEmojis = new ArrayList<>(); @@ -107,7 +106,7 @@ public void render(GuiGraphics guiGraphics) { guiGraphics.fill(rec.getX() - 1, rec.getY() - 2, rec.getX() + rec.getWidth(), rec.getY() + rec.getHeight() - 1, -2130706433); } if (rec.contains((int) lastMouseX, (int) lastMouseY) && Minecraft.getInstance().screen != null) { - guiGraphics.renderTooltip(Minecraft.getInstance().font, Arrays.asList(MutableComponent.create(new LiteralContents((category.name())))), Optional.empty(), (int) lastMouseX, (int) lastMouseY); + guiGraphics.renderTooltip(Minecraft.getInstance().font, Arrays.asList(MutableComponent.create(new PlainTextContents.LiteralContents((category.name())))), Optional.empty(), (int) lastMouseX, (int) lastMouseY); } if (ClientEmojiHandler.SORTED_EMOJIS_FOR_SELECTION.containsKey(category) && ClientEmojiHandler.SORTED_EMOJIS_FOR_SELECTION.get(category).size() > 0) { guiGraphics.drawString(Minecraft.getInstance().font, ClientEmojiHandler.SORTED_EMOJIS_FOR_SELECTION.get(category).get(0)[0].strings.get(0), categorySelectionArea.getX() + 6, categorySelectionArea.getY() + 6 + i * 12, 0); @@ -173,15 +172,16 @@ public void mouseMoved(double mouseX, double mouseY) { this.lastMouseY = mouseY; } + @Override - public boolean mouseScrolled(double mouseX, double mouseY, double delta) { + public boolean mouseScrolled(double mouseX, double mouseY, double delta, double d) { if (categorySelectionArea.contains((int) mouseX, (int) mouseY)) { - categoryPointer -= delta; + categoryPointer -= d; categoryPointer = Mth.clamp(categoryPointer, 0, ClientEmojiHandler.CATEGORIES.size() - 7); return true; } if (selectionArea.contains((int) mouseX, (int) mouseY)) { - selectionPointer -= delta; + 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); return true; diff --git a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSuggestionHelper.java b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSuggestionHelper.java index b7c3ce4..72d7620 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSuggestionHelper.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojiSuggestionHelper.java @@ -194,7 +194,7 @@ public void applySuggestion() { EmojiSuggestionHelper.this.updating = true; EmojiSuggestionHelper.this.chatScreen.input.setValue(suggestion.apply(this.currentText)); final int i = suggestion.getRange().getStart() + suggestion.getText().length(); - EmojiSuggestionHelper.this.chatScreen.input.moveCursorTo(i); + EmojiSuggestionHelper.this.chatScreen.input.moveCursorTo(i, false); EmojiSuggestionHelper.this.chatScreen.input.setHighlightPos(i); setIndex(this.index); EmojiSuggestionHelper.this.updating = false; diff --git a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulBedChatScreen.java b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulBedChatScreen.java index f334c76..8bce41c 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulBedChatScreen.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulBedChatScreen.java @@ -46,8 +46,8 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) { } @Override - public boolean mouseScrolled(double x, double y, double scrollDelta) { - return super.mouseScrolled(x, y, scrollDelta) && (emojiSelectionGui != null) && emojiSelectionGui.mouseScrolled(x, y, scrollDelta); + public boolean mouseScrolled(double x, double y, double scrollDelta, double d) { + return super.mouseScrolled(x, y, scrollDelta, d) && (emojiSelectionGui != null) && emojiSelectionGui.mouseScrolled(x, y, scrollDelta, d); } @Override diff --git a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulChatScreen.java b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulChatScreen.java index 126f731..6cb6a08 100644 --- a/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulChatScreen.java +++ b/Common/src/main/java/com/hrznstudio/emojiful/gui/EmojifulChatScreen.java @@ -42,17 +42,20 @@ public void render(GuiGraphics guiGraphics, int x, int j, float partialTick) { @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { - if (super.keyPressed(keyCode, scanCode, modifiers) && !CommonClass.shouldKeyBeIgnored(keyCode)){ + if (emojiSuggestionHelper != null && emojiSuggestionHelper.keyPressed(keyCode, scanCode, modifiers)) + return true; + if (CommonClass.shouldKeyBeIgnored(keyCode)){ return true; } - if (emojiSuggestionHelper != null && emojiSuggestionHelper.keyPressed(keyCode, scanCode, modifiers)) + if (emojiSelectionGui != null && emojiSelectionGui.keyPressed(keyCode, scanCode, modifiers)){ return true; - return emojiSelectionGui != null && emojiSelectionGui.keyPressed(keyCode, scanCode, modifiers); + } + return super.keyPressed(keyCode, scanCode, modifiers); } @Override - public boolean mouseScrolled(double x, double y, double scrollDelta) { - return super.mouseScrolled(x, y, scrollDelta) && (emojiSelectionGui != null) && emojiSelectionGui.mouseScrolled(x, y, scrollDelta); + public boolean mouseScrolled(double x, double y, double scrollDelta, double d) { + return super.mouseScrolled(x, y, scrollDelta, d) && (emojiSelectionGui != null) && emojiSelectionGui.mouseScrolled(x, y, scrollDelta, d); } @Override @@ -63,6 +66,9 @@ public boolean mouseClicked(double x, double y, int button) { @Override public boolean charTyped(char c, int i) { - return super.charTyped(c, i) && (emojiSelectionGui != null && emojiSelectionGui.charTyped(c, i)); + if (emojiSelectionGui != null && emojiSelectionGui.charTyped(c, i)){ + return true; + } + return super.charTyped(c, i); } } diff --git a/Common/src/main/resources/emojifulcommon.accesswidener b/Common/src/main/resources/emojifulcommon.accesswidener index 56886db..2c8cbc6 100644 --- a/Common/src/main/resources/emojifulcommon.accesswidener +++ b/Common/src/main/resources/emojifulcommon.accesswidener @@ -17,4 +17,4 @@ accessible method net/minecraft/client/gui/Font renderChar (Lnet/minecraft/clien accessible field net/minecraft/client/gui/Font fonts Ljava/util/function/Function; accessible field net/minecraft/client/gui/screens/ChatScreen initial Ljava/lang/String; accessible method net/minecraft/client/gui/Font renderText (Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F -extendable method net/minecraft/client/gui/Font renderText (Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F \ No newline at end of file +extendable method net/minecraft/client/gui/Font renderText (Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F diff --git a/Fabric/build.gradle b/Fabric/build.gradle index 70a2442..c96a4b5 100644 --- a/Fabric/build.gradle +++ b/Fabric/build.gradle @@ -24,8 +24,8 @@ dependencies { annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor") modImplementation "maven.modrinth:midnightlib:1.0.0-fabric" include "maven.modrinth:midnightlib:1.1.0-fabric" - implementation group: 'com.esotericsoftware.yamlbeans', name: 'yamlbeans', version: '1.15' - include group: 'com.esotericsoftware.yamlbeans', name: 'yamlbeans', version: '1.15' + implementation group: 'com.esotericsoftware.yamlbeans', name: 'yamlbeans', version: '1.17' + include group: 'com.esotericsoftware.yamlbeans', name: 'yamlbeans', version: '1.17' } loom { diff --git a/Fabric/src/main/java/com/hrznstudio/emojiful/platform/FabricConfigHelper.java b/Fabric/src/main/java/com/hrznstudio/emojiful/platform/FabricConfigHelper.java index cc71fd1..5d4f581 100644 --- a/Fabric/src/main/java/com/hrznstudio/emojiful/platform/FabricConfigHelper.java +++ b/Fabric/src/main/java/com/hrznstudio/emojiful/platform/FabricConfigHelper.java @@ -39,7 +39,7 @@ public class FabricConfigHelper extends MidnightConfig implements IConfigHelper @Comment public static Comment loadTwemoji; @Entry - public static boolean enableLoadTwemoji = true; + public static boolean enableLoadTwemoji = false; @Comment public static Comment enableLoadCustom; diff --git a/Forge/build.gradle b/Forge/build.gradle index 0caae5a..6027076 100644 --- a/Forge/build.gradle +++ b/Forge/build.gradle @@ -1,32 +1,30 @@ buildscript { repositories { - maven { url = 'https://maven.minecraftforge.net' } mavenCentral() - maven { url = 'https://maven.parchmentmc.org' } gradlePluginPortal() + maven { url = 'https://maven.minecraftforge.net' } + } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '5.1.+', changing: true - classpath 'org.parchmentmc:librarian:1.+' + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '6.0.+', changing: true classpath 'org.spongepowered:mixingradle:0.7.+' - classpath 'gradle.plugin.com.github.johnrengelman:shadow:7.1.2' } } apply plugin: 'java' apply plugin: 'net.minecraftforge.gradle' -apply plugin: 'eclipse' +apply plugin: 'idea' apply plugin: 'maven-publish' -apply plugin: 'org.parchmentmc.librarian.forgegradle' apply plugin: 'org.spongepowered.mixin' -apply plugin: 'com.github.johnrengelman.shadow' +jarJar.enable() archivesBaseName = "${build_file_name}-Forge-${minecraft_version}" minecraft { accessTransformer = file("src/main/resources/META-INF/accesstransformer.cfg") - mappings channel: 'parchment', version: "${parchment_version}-${parchment_minecraft_version}" + mappings channel: 'official', version: minecraft_version + copyIdeResources = true runs { client { workingDirectory project.file('run') @@ -76,51 +74,54 @@ minecraft { sourceSets.main.resources.srcDir 'src/generated/resources' -configurations { - shade - implementation.extendsFrom shade + +tasks.jarJar.configure { + archiveClassifier.set("") + mustRunAfter("reobfJar") } -sourcesJar { - from project(":Common").sourceSets.main.allSource +tasks.named("build").configure { + dependsOn("jarJar") } + dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" compileOnly project(":Common") annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor") - minecraftLibrary 'com.esotericsoftware.yamlbeans:yamlbeans:1.15' - shade 'com.esotericsoftware.yamlbeans:yamlbeans:1.15' + implementation group: "com.esotericsoftware.yamlbeans", name: "yamlbeans", version: "1.17" + jarJar group: "com.esotericsoftware.yamlbeans", name: "yamlbeans", version: "[1.17]" } -shadowJar { - configurations = [project.configurations.shade] - classifier = "" - relocate 'com.esoteric.yamlbeans', 'com.hrznstudio.emojiful.shaded.yamlbeans' - finalizedBy 'reobfShadowJar' +tasks.withType(JavaCompile).configureEach { + source(project(":Common").sourceSets.main.allSource) } - -assemble.dependsOn shadowJar - -reobf { - shadowJar {} +tasks.withType(Javadoc).configureEach { + source(project(":Common").sourceSets.main.allJava) } - -tasks.withType(JavaCompile) { - source(project(":Common").sourceSets.main.allSource) +tasks.named("sourcesJar", Jar) { + from(project(":Common").sourceSets.main.allSource) } processResources { from project(":Common").sourceSets.main.resources } - mixin { add sourceSets.main, "emojiful.refmap.json" config "emojiful.mixins.json" } +sourceSets.each { + def dir = layout.buildDirectory.dir("sourcesSets/$it.name") + it.output.resourcesDir = dir + it.java.destinationDirectory = dir +} + + + jar.finalizedBy('reobfJar') + diff --git a/NeoForge/build.gradle b/NeoForge/build.gradle new file mode 100644 index 0000000..68954e2 --- /dev/null +++ b/NeoForge/build.gradle @@ -0,0 +1,95 @@ +buildscript { + dependencies { + classpath 'gradle.plugin.com.github.johnrengelman:shadow:7.1.2' + } +} + +plugins { + id 'net.neoforged.gradle.userdev' version '7.0.80' +} +apply plugin: 'java' +apply plugin: 'eclipse' +apply plugin: 'maven-publish' +apply plugin: 'com.github.johnrengelman.shadow' + +jarJar.enable() + +archivesBaseName = "${build_file_name}-Neoforge-${minecraft_version}" + + +minecraft.accessTransformers.file file("src/main/resources/META-INF/accesstransformer.cfg") +runs { + configureEach { + modSource project.sourceSets.main + } + client { + workingDirectory project.file('run') + programArgument "--username=Dev####" + systemProperty 'mixin.env.remapRefMap', 'true' + systemProperty 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + dependencies { + runtime group: "com.esotericsoftware.yamlbeans", name: "yamlbeans", version: "1.17" + } + } + + server { + workingDirectory project.file('runServer') + systemProperty 'mixin.env.remapRefMap', 'true' + systemProperty 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + } + + data { + workingDirectory project.file('run') + //args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') + systemProperty 'mixin.env.remapRefMap', 'true' + systemProperty 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + } +} + + +sourceSets.main.resources.srcDir 'src/generated/resources' + + +tasks.named('jarJar') { + archiveClassifier.set("") +} + +tasks.named("build").configure { + dependsOn("jarJar") +} + +dependencies { + implementation "net.neoforged:neoforge:${neo_version}" + implementation group: "com.esotericsoftware.yamlbeans", name: "yamlbeans", version: "1.17" + jarJar group: "com.esotericsoftware.yamlbeans", name: "yamlbeans", version: "[1.17]" + compileOnly project(":Common") +} + +subsystems { + parchment { + minecraftVersion="1.20.3" + mappingsVersion="2023.12.31" + } +} + + + +// NeoGradle compiles the game, but we don't want to add our common code to the game's code +Spec notNeoTask = { Task it -> !it.name.startsWith("neo") && !it.name.contains("Test") } as Spec + +tasks.withType(JavaCompile).matching(notNeoTask).configureEach { + source(project(":Common").sourceSets.main.allSource) +} + +tasks.withType(Javadoc).matching(notNeoTask).configureEach { + source(project(":Common").sourceSets.main.allJava) +} + +tasks.named("sourcesJar", Jar) { + from(project(":Common").sourceSets.main.allSource) +} + +processResources { + from project(":Common").sourceSets.main.resources +} + diff --git a/NeoForge/src/main/java/com/hrznstudio/emojiful/EmojifulForge.java b/NeoForge/src/main/java/com/hrznstudio/emojiful/EmojifulForge.java new file mode 100644 index 0000000..10baaa3 --- /dev/null +++ b/NeoForge/src/main/java/com/hrznstudio/emojiful/EmojifulForge.java @@ -0,0 +1,43 @@ +package com.hrznstudio.emojiful; + +import com.hrznstudio.emojiful.datapack.EmojiRecipe; +import com.hrznstudio.emojiful.datapack.EmojiRecipeSerializer; +import com.hrznstudio.emojiful.platform.ForgeConfigHelper; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.crafting.Recipe; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.fml.ModLoadingContext; +import net.neoforged.fml.common.Mod; +import net.neoforged.fml.config.ModConfig; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; +import net.neoforged.neoforge.common.ModConfigSpec; +import net.neoforged.neoforge.common.NeoForge; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; + + +@Mod(Constants.MOD_ID) +public class EmojifulForge { + + public static DeferredRegister> RECIPE_SER = DeferredRegister.create(Registries.RECIPE_SERIALIZER, Constants.MOD_ID); + public static final DeferredHolder, EmojiRecipeSerializer> EMOJI_RECIPE_SERIALIZER = RECIPE_SER.register("emoji_recipe", EmojiRecipeSerializer::new); + + public static DeferredRegister> RECIPE_TYPE = DeferredRegister.create(Registries.RECIPE_TYPE, Constants.MOD_ID); + public static final DeferredHolder, RecipeType> EMOJI_RECIPE_TYPE = RECIPE_TYPE.register("emoji_recipe_type", () -> RecipeType.simple(new ResourceLocation(Constants.MOD_ID, "emoji_recipe_type"))); + + public EmojifulForge(IEventBus eventBus) { + RECIPE_SER.register(eventBus); + RECIPE_TYPE.register(eventBus); + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ForgeConfigHelper.setup(new ModConfigSpec.Builder())); + eventBus.addListener(this::handleClientSetup); + } + + private void handleClientSetup(final FMLClientSetupEvent event) { + NeoForge.EVENT_BUS.addListener(ForgeClientHandler::onRecipesUpdated); + NeoForge.EVENT_BUS.addListener(ForgeClientHandler::hijackScreen); + } + +} \ No newline at end of file diff --git a/NeoForge/src/main/java/com/hrznstudio/emojiful/ForgeClientHandler.java b/NeoForge/src/main/java/com/hrznstudio/emojiful/ForgeClientHandler.java new file mode 100644 index 0000000..9f9a923 --- /dev/null +++ b/NeoForge/src/main/java/com/hrznstudio/emojiful/ForgeClientHandler.java @@ -0,0 +1,33 @@ +package com.hrznstudio.emojiful; + +import com.hrznstudio.emojiful.gui.EmojifulBedChatScreen; +import com.hrznstudio.emojiful.gui.EmojifulChatScreen; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.client.gui.screens.InBedChatScreen; +import net.minecraft.client.gui.screens.Screen; +import net.neoforged.neoforge.client.event.RecipesUpdatedEvent; +import net.neoforged.neoforge.client.event.ScreenEvent; + + +public class ForgeClientHandler { + + public static void onRecipesUpdated(final RecipesUpdatedEvent event) { + CommonClass.onRecipesUpdated(event.getRecipeManager()); + } + + public static void hijackScreen(final ScreenEvent.Opening event) { + final Screen newScreen = event.getNewScreen(); + if (newScreen instanceof EmojifulChatScreen || newScreen instanceof EmojifulBedChatScreen){ + return; + } + if (event.getNewScreen() instanceof InBedChatScreen){ + event.setCanceled(true); + Minecraft.getInstance().setScreen(new EmojifulBedChatScreen()); + } + else if (event.getNewScreen() instanceof ChatScreen chatScreen) { + event.setCanceled(true); + Minecraft.getInstance().setScreen(new EmojifulChatScreen(chatScreen.initial)); + } + } +} diff --git a/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgeConfigHelper.java b/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgeConfigHelper.java new file mode 100644 index 0000000..3cbf95f --- /dev/null +++ b/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgeConfigHelper.java @@ -0,0 +1,92 @@ +package com.hrznstudio.emojiful.platform; + +import com.hrznstudio.emojiful.platform.services.IConfigHelper; +import net.neoforged.neoforge.common.ModConfigSpec; + + +public class ForgeConfigHelper implements IConfigHelper { + + public static ModConfigSpec.BooleanValue renderEmoji; + public static ModConfigSpec.BooleanValue showEmojiSelector; + public static ModConfigSpec.BooleanValue showEmojiAutocomplete; + public static ModConfigSpec.BooleanValue loadTwemoji; + public static ModConfigSpec.BooleanValue loadCustom; + public static ModConfigSpec.BooleanValue loadDatapack; + public static ModConfigSpec.BooleanValue loadGifEmojis; + + public static ModConfigSpec.BooleanValue shortEmojiReplacement; + + public static ModConfigSpec.BooleanValue profanityFilter; + public static ModConfigSpec.ConfigValue profanityFilterReplacement; + + + public static ModConfigSpec setup(ModConfigSpec.Builder builder) { + builder.push("Emojiful").translation("emojiful.midnightconfig.title"); + renderEmoji = builder.comment("Enable Emoji Rendering").translation("emojiful.midnightconfig.enableRenderEmoji").define("enabled", true); + showEmojiSelector = builder.comment("Enable Emoji Selection GUI in the chat text line").translation("emojiful.midnightconfig.showEmojiSelector").define("emoji_selector", true); + showEmojiAutocomplete = builder.comment("Enable Emoji autocomplete in the chat text line").translation("emojiful.midnightconfig.emojiAutocomplete").define("emoji_autocomplete", true); + loadGifEmojis = builder.comment("Load animated emojis, if disabled they will be a still image").translation("emojiful.midnightconfig.loadGifEmojis").define("gifs", true); + shortEmojiReplacement = builder.comment("Replace short versions of emoji like :) into :smile: so they can be rendered as emoji").translation("emojiful.midnightconfig.shortEmojiReplacement").define("short_emoji_replacement", true); + builder.push("EmojiTypes").translation("emojiful.midnightconfig.emojiTypes"); + loadTwemoji = builder.comment("Loads Twemojis used in sites like Twitter and Discord").translation("emojiful.midnightconfig.loadTwemoji").define("twemoji", false); + loadCustom = builder.comment("Loads custom emojis provided by Emojiful").translation("emojiful.midnightconfig.enableLoadCustom").define("custom", true); + loadDatapack = builder.comment("Loads datapack emojis provided by the server you join").translation("emojiful.midnightconfig.enableLoadDatapack").define("datapack", true); + builder.pop(); + builder.pop(); + builder.push("ProfanityFilter").translation("emojiful.midnightconfig.profanityFilter"); + profanityFilter = builder.comment("Enable Profanity Filter, this will replace bad words with emoji").translation("emojiful.midnightconfig.enableProfanityFilter").define("enabled", false); + profanityFilterReplacement = builder.comment("Replacement word for the profanity filter").translation("emojiful.midnightconfig.profanityFilterString").define("replacement", ":swear:"); + builder.pop(); + return builder.build(); + } + + @Override + public boolean getProfanityFilter() { + return profanityFilter.get(); + } + + @Override + public String getReplacementString() { + return profanityFilterReplacement.get(); + } + + @Override + public boolean loadGifEmojis() { + return loadGifEmojis.get(); + } + + @Override + public boolean showEmojiAutocomplete() { + return showEmojiAutocomplete.get(); + } + + @Override + public boolean showEmojiSelector() { + return showEmojiSelector.get(); + } + + @Override + public boolean renderEmoji() { + return renderEmoji.get(); + } + + @Override + public boolean shortEmojiReplacement() { + return shortEmojiReplacement.get(); + } + + @Override + public boolean loadTwemoji() { + return loadTwemoji.get(); + } + + @Override + public boolean loadCustom() { + return loadCustom.get(); + } + + @Override + public boolean loadDatapack() { + return loadDatapack.get(); + } +} diff --git a/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgePlatformHelper.java b/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgePlatformHelper.java new file mode 100644 index 0000000..f56f4cd --- /dev/null +++ b/NeoForge/src/main/java/com/hrznstudio/emojiful/platform/ForgePlatformHelper.java @@ -0,0 +1,40 @@ +package com.hrznstudio.emojiful.platform; + +import com.hrznstudio.emojiful.EmojifulForge; +import com.hrznstudio.emojiful.datapack.EmojiRecipe; +import com.hrznstudio.emojiful.platform.services.IPlatformHelper; +import net.minecraft.world.item.crafting.RecipeSerializer; +import net.minecraft.world.item.crafting.RecipeType; +import net.neoforged.fml.ModList; +import net.neoforged.fml.loading.FMLLoader; + + +public class ForgePlatformHelper implements IPlatformHelper { + + @Override + public String getPlatformName() { + return "Forge"; + } + + @Override + public boolean isModLoaded(String modId) { + + return ModList.get().isLoaded(modId); + } + + @Override + public boolean isDevelopmentEnvironment() { + + return !FMLLoader.isProduction(); + } + + @Override + public RecipeType getRecipeType() { + return EmojifulForge.EMOJI_RECIPE_TYPE.get(); + } + + @Override + public RecipeSerializer getRecipeSerializer() { + return EmojifulForge.EMOJI_RECIPE_SERIALIZER.get(); + } +} diff --git a/NeoForge/src/main/resources/META-INF/accesstransformer.cfg b/NeoForge/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000..da3c177 --- /dev/null +++ b/NeoForge/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1,13 @@ +public-f net.minecraft.client.Minecraft font # font +public-f net.minecraft.client.renderer.entity.EntityRenderDispatcher font # font +public-f net.minecraft.client.renderer.blockentity.BlockEntityRenderers register(Lnet/minecraft/world/level/block/entity/BlockEntityType;Lnet/minecraft/client/renderer/blockentity/BlockEntityRendererProvider;)V # register +public-f net.minecraft.client.renderer.blockentity.SignRenderer font # font +public net.minecraft.client.gui.screens.ChatScreen input # input +public net.minecraft.client.renderer.RenderType create(Ljava/lang/String;Lcom/mojang/blaze3d/vertex/VertexFormat;Lcom/mojang/blaze3d/vertex/VertexFormat$Mode;IZZLnet/minecraft/client/renderer/RenderType$CompositeState;)Lnet/minecraft/client/renderer/RenderType$CompositeRenderType; # create +public net.minecraft.client.gui.Font SHADOW_OFFSET # SHADOW_OFFSET +public net.minecraft.client.gui.Font filterFishyGlyphs # filterFishyGlyphs +public net.minecraft.client.gui.Font renderChar(Lnet/minecraft/client/gui/font/glyphs/BakedGlyph;ZZFFFLorg/joml/Matrix4f;Lcom/mojang/blaze3d/vertex/VertexConsumer;FFFFI)V # renderChar +public net.minecraft.client.gui.Font getFontSet(Lnet/minecraft/resources/ResourceLocation;)Lnet/minecraft/client/gui/font/FontSet; # getFontSet +public net.minecraft.client.gui.Font fonts # fonts +public net.minecraft.client.gui.screens.ChatScreen initial # initial +public-f net.minecraft.client.gui.Font renderText(Ljava/lang/String;FFIZLorg/joml/Matrix4f;Lnet/minecraft/client/renderer/MultiBufferSource;Lnet/minecraft/client/gui/Font$DisplayMode;II)F # renderText diff --git a/NeoForge/src/main/resources/META-INF/mods.toml b/NeoForge/src/main/resources/META-INF/mods.toml new file mode 100644 index 0000000..f836a93 --- /dev/null +++ b/NeoForge/src/main/resources/META-INF/mods.toml @@ -0,0 +1,32 @@ +modLoader="javafml" +loaderVersion="[1,)" +issueTrackerURL="https://github.com/InnovativeOnlineIndustries/Emojiful/" +side="CLIENT" +license="MIT" + +[[mixins]] +config = "emojiful.mixins.json" + +[[mods]] + modId="emojiful" + version="${file.jarVersion}" + displayName="Emojiful" + authors="HRZN" + description=''' + Adds Emojis to the Game Chat!!! + ''' + side="CLIENT" + +[[dependencies.emojiful]] + modId="minecraft" + type="required" + versionRange="[1.20.4,)" + ordering="NONE" + side="CLIENT" + +[[dependencies.emojiful]] + modId="neoforge" + type="required" + versionRange="[20.4.190,)" + ordering="NONE" + side="CLIENT" \ No newline at end of file diff --git a/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IConfigHelper b/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IConfigHelper new file mode 100644 index 0000000..4af81f2 --- /dev/null +++ b/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IConfigHelper @@ -0,0 +1 @@ +com.hrznstudio.emojiful.platform.ForgeConfigHelper \ No newline at end of file diff --git a/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IPlatformHelper b/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IPlatformHelper new file mode 100644 index 0000000..bb9c5e1 --- /dev/null +++ b/NeoForge/src/main/resources/META-INF/services/com.hrznstudio.emojiful.platform.services.IPlatformHelper @@ -0,0 +1 @@ +com.hrznstudio.emojiful.platform.ForgePlatformHelper \ No newline at end of file diff --git a/build.gradle b/build.gradle index 6a41251..776424e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,8 @@ +plugins { + // Required for NeoGradle + id "org.jetbrains.gradle.plugin.idea-ext" version "1.1.7" +} + subprojects { apply plugin: 'java' diff --git a/gradle.properties b/gradle.properties index 064ba16..b2ac812 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,23 +1,26 @@ # Project -version=4.2.0 +version=5.0.0 group=com.hrznstudio.emojiful #Parchment -parchment_minecraft_version=1.20.1 -parchment_version=1.20.1-2023.07.23 +parchment_minecraft_version=1.20.3 +parchment_version=1.20.3-2023.12.31 # Common -minecraft_version=1.20.1 +minecraft_version=1.20.4 common_runs_enabled=false common_client_run_name=Common Client common_server_run_name=Common Server +# NeoForge +neo_version=20.4.190 + # Forge -forge_version=47.1.0 +forge_version=49.0.31 # Fabric -fabric_version=0.86.1+1.20.1 -fabric_loader_version=0.14.21 +fabric_version=0.96.4+1.20.4 +fabric_loader_version=0.15.0 # Mod options @@ -29,3 +32,7 @@ build_file_name=Emojiful # Gradle org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false + + +neogradle.subsystems.parchment.minecraftVersion=1.20.3 +neogradle.subsystems.parchment.mappingsVersion=2023.12.31 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aa991fc..fae0804 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index a47a3ca..beb10e9 100644 --- a/settings.gradle +++ b/settings.gradle @@ -19,10 +19,16 @@ pluginManagement { url = 'https://maven.quiltmc.org/repository/snapshot' } maven { url "https://plugins.gradle.org/m2/" } + maven { url = 'https://maven.neoforged.net/releases' } + maven { url = 'https://maven.minecraftforge.net' } mavenCentral() gradlePluginPortal() } } +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.8.0' +} + rootProject.name = 'Emojiful' -include("Common", "Fabric", "Forge") \ No newline at end of file +include("Common", "Fabric", "NeoForge", "Forge") \ No newline at end of file