From 71f2da8e99742e4be33aa3255f7c34987d70e4ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Mon, 22 Dec 2025 18:44:22 +0100 Subject: [PATCH] introduced `AntiIllegalSignCharacters` appliance to prevent usage of illegal characters in sign edits --- .../AntiIllegalSignCharacters.java | 16 +++++++++++++ .../SignEditListener.java | 23 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/AntiIllegalSignCharacters.java create mode 100644 common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/SignEditListener.java diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/AntiIllegalSignCharacters.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/AntiIllegalSignCharacters.java new file mode 100644 index 0000000..9a94b66 --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/AntiIllegalSignCharacters.java @@ -0,0 +1,16 @@ +package eu.mhsl.craftattack.spawn.common.appliances.security.antiIllegalSignCharacters; + +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import org.bukkit.event.Listener; +import org.jetbrains.annotations.NotNull; + +import java.util.List; + +public class AntiIllegalSignCharacters extends Appliance { + @Override + protected @NotNull List listeners() { + return List.of( + new SignEditListener() + ); + } +} diff --git a/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/SignEditListener.java b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/SignEditListener.java new file mode 100644 index 0000000..9ad38c9 --- /dev/null +++ b/common/src/main/java/eu/mhsl/craftattack/spawn/common/appliances/security/antiIllegalSignCharacters/SignEditListener.java @@ -0,0 +1,23 @@ +package eu.mhsl.craftattack.spawn.common.appliances.security.antiIllegalSignCharacters; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; +import org.bukkit.event.EventHandler; +import org.bukkit.event.block.SignChangeEvent; + +class SignEditListener extends ApplianceListener { + @EventHandler + public void onSignEdit(SignChangeEvent event) { + for (int i = 0; i < 4; i++) { + Component line = event.line(i); + if(line == null) continue; + String lineStr = PlainTextComponentSerializer.plainText().serialize(line); + + if (!lineStr.matches("^[ -~]*$")) { + String cleaned = lineStr.replaceAll("[^ -~]", ""); + event.line(i, Component.text(cleaned)); + } + } + } +}