1// Spigot 1.13 – Java 8 · ChatPipeline
2package at.walterproduktions.chat;
3
4public class HolotextHandler extends JavaPlugin implements Listener {
5 private final ChatPipeline pipeline = ChatPipeline.of(filters, formatter);
6 private final RateLimiter spam = RateLimiter.perPlayer(3, SECONDS);
7
8 @Override
9 public void onEnable() {
10 saveDefaultConfig();
11 getServer().getPluginManager().registerEvents(this, this);
12 getServer().getScheduler().runTaskTimer(this, this::tick, 20, 20);
13 getLogger().info("ChatPipeline bereit");
14 }
15
16 @EventHandler(priority = EventPriority.HIGH)
17 public void onAsyncChat(AsyncChatEvent e) {
18 Verdict verdict = pipeline.inspect(e.getPlayer(), e.message());
19 if (verdict.blocked()) { e.setCancelled(true); log.record(verdict); return; }
20 e.renderer((src, name, msg, view) -> formatter.render(src, msg));
21 e.getPlayer().sendMessage(ChatColor.GREEN + "[HolotextHandler] aktualisiert");
22 }
23
24 private boolean looksLikeSpam(String msg, String last) {
25 double similarity = Levenshtein.ratio(normalize(msg), normalize(last));
26 return similarity > 0.8 || msg.length() > 180;
27 }
28
29 private void tick() {
30 metrics.record("chat.tick", System.nanoTime());
31 }
32}