9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-20 07:29:17 +00:00

修复默认字体emoji会被意外屏蔽

This commit is contained in:
XiaoMoMi
2025-12-10 18:22:21 +08:00
parent c5539b75c3
commit ac40196dc4
3 changed files with 23 additions and 25 deletions

View File

@@ -4,7 +4,9 @@ import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import io.papermc.paper.event.player.AsyncChatCommandDecorateEvent; import io.papermc.paper.event.player.AsyncChatCommandDecorateEvent;
import io.papermc.paper.event.player.AsyncChatDecorateEvent; import io.papermc.paper.event.player.AsyncChatDecorateEvent;
import net.kyori.adventure.key.Key;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors; import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections; import net.momirealms.craftengine.bukkit.plugin.reflection.paper.PaperReflections;
@@ -16,6 +18,7 @@ import net.momirealms.craftengine.core.font.*;
import net.momirealms.craftengine.core.item.Item; import net.momirealms.craftengine.core.item.Item;
import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.plugin.config.Config;
import net.momirealms.craftengine.core.util.AdventureHelper; import net.momirealms.craftengine.core.util.AdventureHelper;
import net.momirealms.craftengine.core.util.MinecraftVersion;
import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.util.VersionHelper;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@@ -36,6 +39,7 @@ import java.lang.reflect.InvocationTargetException;
import java.util.*; import java.util.*;
public class BukkitFontManager extends AbstractFontManager implements Listener { public class BukkitFontManager extends AbstractFontManager implements Listener {
private static BukkitFontManager instance; private static BukkitFontManager instance;
private final BukkitCraftEngine plugin; private final BukkitCraftEngine plugin;
@@ -213,6 +217,7 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
} }
} }
// fixme 这些做法其实是错误的我们只应该修改字体为minecraft:default的部分
@SuppressWarnings("UnstableApiUsage") @SuppressWarnings("UnstableApiUsage")
private void processChatEvent(AsyncChatDecorateEvent event) { private void processChatEvent(AsyncChatDecorateEvent event) {
Player player = event.player(); Player player = event.player();
@@ -220,31 +225,24 @@ public class BukkitFontManager extends AbstractFontManager implements Listener {
try { try {
Object originalMessage = PaperReflections.field$AsyncChatDecorateEvent$originalMessage.get(event); Object originalMessage = PaperReflections.field$AsyncChatDecorateEvent$originalMessage.get(event);
String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage); String rawJsonMessage = ComponentUtils.paperAdventureToJson(originalMessage);
boolean changed = false;
if (!player.hasPermission(FontManager.BYPASS_CHAT)) {
IllegalCharacterProcessResult result = processIllegalCharacters(rawJsonMessage);
if (result.has()) {
rawJsonMessage = result.text();
changed = true;
}
}
if (Config.allowEmojiChat()) { if (Config.allowEmojiChat()) {
EmojiTextProcessResult processResult = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player)); EmojiTextProcessResult result = replaceJsonEmoji(rawJsonMessage, BukkitAdaptors.adapt(player));
boolean hasChanged = processResult.replaced(); if (result.replaced()) {
if (!player.hasPermission(FontManager.BYPASS_CHAT)) { rawJsonMessage = result.text();
IllegalCharacterProcessResult result = processIllegalCharacters(processResult.text()); changed = true;
if (result.has()) {
Object component = ComponentUtils.jsonToPaperAdventure(result.text());
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, component);
} else if (hasChanged) {
Object component = ComponentUtils.jsonToPaperAdventure(processResult.text());
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, component);
}
} else if (hasChanged) {
Object component = ComponentUtils.jsonToPaperAdventure(processResult.text());
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, component);
}
} else {
if (!player.hasPermission(FontManager.BYPASS_CHAT)) {
IllegalCharacterProcessResult result = processIllegalCharacters(rawJsonMessage);
if (result.has()) {
Object component = ComponentUtils.jsonToPaperAdventure(result.text());
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, component);
}
} }
} }
if (changed) {
PaperReflections.method$AsyncChatDecorateEvent$result.invoke(event, ComponentUtils.jsonToPaperAdventure(rawJsonMessage));
}
} catch (IllegalAccessException | InvocationTargetException e) { } catch (IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

View File

@@ -120,6 +120,6 @@ images:
default:emojis: default:emojis:
height: 11 height: 11
ascent: 9 ascent: 9
font: minecraft:emoji font: minecraft:default # If your chat plugin supports custom font, better using a custom font here
file: minecraft:font/image/emojis.png file: minecraft:font/image/emojis.png
grid-size: 4,4 grid-size: 4,4

View File

@@ -1,11 +1,11 @@
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx4G
# Project settings # Project settings
project_version=0.0.66.3 project_version=0.0.66.3
config_version=60 config_version=60
lang_version=43 lang_version=43
project_group=net.momirealms project_group=net.momirealms
latest_supported_version=1.21.10 latest_supported_version=1.21.11
# Supported languages # Supported languages
supported_languages=en,zh_cn,zh_tw,es,tr,de,ru_ru,fr_fr supported_languages=en,zh_cn,zh_tw,es,tr,de,ru_ru,fr_fr