9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-28 19:39:11 +00:00

add options for filters

This commit is contained in:
XiaoMoMi
2025-03-24 22:30:20 +08:00
parent 769f9fbb07
commit 53c85298b2
5 changed files with 82 additions and 11 deletions

View File

@@ -5,8 +5,11 @@ import io.papermc.paper.event.player.AsyncChatDecorateEvent;
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
import net.momirealms.craftengine.bukkit.util.Reflections;
import net.momirealms.craftengine.core.font.AbstractImageManager;
import net.momirealms.craftengine.core.font.ImageManager;
import net.momirealms.craftengine.core.plugin.config.ConfigManager;
import net.momirealms.craftengine.core.util.CharacterUtils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
@@ -45,27 +48,35 @@ public class BukkitImageManager extends AbstractImageManager implements Listener
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
@SuppressWarnings("UnstableApiUsage")
public void onChat(AsyncChatDecorateEvent event) {
if (event.player() == null) return;
if (!this.isDefaultFontInUse()) return;
this.processChatMessages(event);
if (!ConfigManager.filterChat()) return;
this.processChatEvent(event);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
@SuppressWarnings("UnstableApiUsage")
public void onChatCommand(AsyncChatCommandDecorateEvent event) {
if (event.player() == null) return;
if (!this.isDefaultFontInUse()) return;
this.processChatMessages(event);
if (!ConfigManager.filterChat()) return;
this.processChatEvent(event);
}
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true)
public void onCommand(PlayerCommandPreprocessEvent event) {
if (!ConfigManager.filterCommand()) return;
if (!this.isDefaultFontInUse()) return;
if (event.getPlayer().hasPermission(ImageManager.BYPASS_COMMAND)) {
return;
}
runIfContainsIllegalCharacter(event.getMessage(), event::setMessage);
}
@SuppressWarnings("UnstableApiUsage")
private void processChatMessages(AsyncChatDecorateEvent event) {
private void processChatEvent(AsyncChatDecorateEvent event) {
Player player = event.player();
if (player == null) return;
if (!this.isDefaultFontInUse()) return;
if (player.hasPermission(ImageManager.BYPASS_CHAT)) {
return;
}
try {
Object originalMessage = Reflections.field$AsyncChatDecorateEvent$originalMessage.get(event);
String jsonMessage = (String) Reflections.method$ComponentSerializer$serialize.invoke(serializer, originalMessage);

View File

@@ -730,10 +730,15 @@ public class PacketConsumers {
// we handle it on packet level to prevent it from being captured by plugins
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> RENAME_ITEM = (user, event, packet) -> {
try {
if (!ConfigManager.filterAnvil()) return;
String message = (String) Reflections.field$ServerboundRenameItemPacket$name.get(packet);
if (message != null && !message.isEmpty()) {
ImageManager manager = CraftEngine.instance().imageManager();
if (!manager.isDefaultFontInUse()) return;
// check bypass
if (((BukkitServerPlayer) user).hasPermission(ImageManager.BYPASS_ANVIL)) {
return;
}
runIfContainsIllegalCharacter(message, manager, (s) -> {
try {
Reflections.field$ServerboundRenameItemPacket$name.set(packet, s);
@@ -750,9 +755,14 @@ public class PacketConsumers {
// we handle it on packet level to prevent it from being captured by plugins
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> SIGN_UPDATE = (user, event, packet) -> {
try {
if (!ConfigManager.filterSign()) return;
String[] lines = (String[]) Reflections.field$ServerboundSignUpdatePacket$lines.get(packet);
ImageManager manager = CraftEngine.instance().imageManager();
if (!manager.isDefaultFontInUse()) return;
// check bypass
if (((BukkitServerPlayer) user).hasPermission(ImageManager.BYPASS_SIGN)) {
return;
}
for (int i = 0; i < lines.length; i++) {
String line = lines[i];
if (line != null && !line.isEmpty()) {
@@ -772,8 +782,13 @@ public class PacketConsumers {
@SuppressWarnings("unchecked")
public static final TriConsumer<NetWorkUser, NMSPacketEvent, Object> EDIT_BOOK = (user, event, packet) -> {
try {
if (!ConfigManager.filterBook()) return;
ImageManager manager = CraftEngine.instance().imageManager();
if (!manager.isDefaultFontInUse()) return;
// check bypass
if (((BukkitServerPlayer) user).hasPermission(ImageManager.BYPASS_BOOK)) {
return;
}
boolean changed = false;