diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java index 28ee0c48a..d193d46aa 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/font/BukkitFontManager.java @@ -9,7 +9,6 @@ import net.momirealms.craftengine.bukkit.util.Reflections; import net.momirealms.craftengine.core.font.AbstractFontManager; import net.momirealms.craftengine.core.font.FontManager; import net.momirealms.craftengine.core.plugin.config.Config; -import net.momirealms.craftengine.core.plugin.text.minimessage.NamedArgumentTag; import net.momirealms.craftengine.core.util.CharacterUtils; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -73,7 +72,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener { try { Object originalMessage = Reflections.field$AsyncChatDecorateEvent$originalMessage.get(event); String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage); - String jsonMessage = replaceEmoji(rawJsonMessage, this.plugin.adapt(player)); + String jsonMessage = replaceJsonEmoji(rawJsonMessage, this.plugin.adapt(player)); boolean hasChanged = !rawJsonMessage.equals(jsonMessage); if (!player.hasPermission(FontManager.BYPASS_CHAT)) { IllegalCharacterProcessResult result = processIllegalCharacters(jsonMessage); diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java index 53a6f6e1a..df2e565b8 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/AbstractFontManager.java @@ -88,7 +88,28 @@ public abstract class AbstractFontManager implements FontManager { } @Override - public String replaceEmoji(String jsonText, Player player) { + public String replaceMiniMessageEmoji(String miniMessage, Player player) { + if (this.emojiKeywordTrie == null) { + return miniMessage; + } + for (Token token : this.emojiKeywordTrie.tokenize(miniMessage)) { + if (!token.isMatch()) continue; + Emoji emoji = this.emojiMapper.get(token.getFragment()); + if (emoji == null) continue; + Component content = AdventureHelper.miniMessage().deserialize( + emoji.content(), + PlayerContext.of(player, ContextHolder.builder() + .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) + .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) + .build()).tagResolvers() + ); + miniMessage = miniMessage.replace(token.getFragment(), AdventureHelper.componentToMiniMessage(content)); + } + return miniMessage; + } + + @Override + public String replaceJsonEmoji(String jsonText, Player player) { if (this.emojiKeywordTrie == null) { return jsonText; } @@ -108,7 +129,7 @@ public abstract class AbstractFontManager implements FontManager { component = component.replaceText(builder -> builder.matchLiteral(entry.getKey()) .replacement( AdventureHelper.miniMessage().deserialize( - entry.getValue().content(), + emoji.content(), PlayerContext.of(player, ContextHolder.builder() .withOptionalParameter(EmojiParameters.EMOJI, emoji.emojiImage()) .withParameter(EmojiParameters.KEYWORD, emoji.keywords().get(0)) diff --git a/core/src/main/java/net/momirealms/craftengine/core/font/FontManager.java b/core/src/main/java/net/momirealms/craftengine/core/font/FontManager.java index bebf1ea77..7fd53b4d1 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/font/FontManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/font/FontManager.java @@ -24,7 +24,9 @@ public interface FontManager extends Manageable { ConfigSectionParser[] parsers(); - String replaceEmoji(String jsonText, Player player); + String replaceMiniMessageEmoji(String miniMessage, Player player); + + String replaceJsonEmoji(String jsonText, Player player); boolean isDefaultFontInUse(); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java index 2a365d14d..d69c82d01 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java +++ b/core/src/main/java/net/momirealms/craftengine/core/util/AdventureHelper.java @@ -126,6 +126,10 @@ public class AdventureHelper { return getInstance().miniMessageStrict.serialize(getInstance().gsonComponentSerializer.deserialize(json)); } + public static String componentToMiniMessage(Component component) { + return getInstance().miniMessageStrict.serialize(component); + } + /** * Converts a JSON string to a Component. *