From 4cd24ad4674a00d9081aa51a534937f1fb6ff5f5 Mon Sep 17 00:00:00 2001 From: Ardakaz Date: Mon, 29 Jun 2026 10:52:24 +0300 Subject: [PATCH] Just organizing a bit and adding comments --- .../net/ardakaz/griefalert/GriefAlert.java | 137 +++++++++++------- 1 file changed, 82 insertions(+), 55 deletions(-) diff --git a/src/main/java/net/ardakaz/griefalert/GriefAlert.java b/src/main/java/net/ardakaz/griefalert/GriefAlert.java index a44c996..b40c349 100644 --- a/src/main/java/net/ardakaz/griefalert/GriefAlert.java +++ b/src/main/java/net/ardakaz/griefalert/GriefAlert.java @@ -50,6 +50,10 @@ public class GriefAlert extends JavaPlugin implements Listener { private Boolean ALLOW_STEALING; private Connection connection; + /* + UTILITY FUNCTIONS + */ + // Block inspector: only the most recent placement counts for ownership. private static String inspectBlock(Block block, Player player) { List lookup = coreProtectAPI.blockLookup(block, 50000000); @@ -90,6 +94,65 @@ public class GriefAlert extends JavaPlugin implements Listener { return world; } + // Sends the alert (or cancels it) + private void alert(String message, String playerName, String mapLink, String target, int x, int y, int z, String world) { + // Exclude trusted people + Player griefer = Bukkit.getPlayer(playerName); + if (griefer.hasPermission("griefalert.exclude") || griefer.hasPermission("griefalert.exclude." + target)) { + return; + } + // Spam limiter + String realAlertMessage = message; + String[] alert1 = null; + if (lastAlert != null) { + alert1 = lastAlert.split(" "); + } + String[] alert2 = message.split(" "); + if (alert1 != null) { + if (alert1[2].equals(alert2[2]) && alert1[5].equals(alert2[5]) && alert1[1].equals("broke") && alert2[1].equals("broke")) { + identicalAlerts += 1; + } else if (Arrays.equals(alert1, alert2)) { + identicalAlerts += 1; + } else { + identicalAlerts = 1; + } + } + if (identicalAlerts == 4) { + message = ChatColor.GRAY + "Same behavior continues."; + mapLink = null; + } + if (identicalAlerts > 4) { + return; + } + + // Use direct location check + if (world != null && isLocationIgnored(x, y, z, world)) { + return; // Do not alert if location is ignored + } + + // Send an event for external hooks + GriefAlertEvent griefalert_event; + if (MAP_LINK != null && !MAP_LINK.isEmpty() && mapLink != null) { + griefalert_event = new GriefAlertEvent(message + " (" + mapLink + ")"); + } else { + griefalert_event = new GriefAlertEvent(message); + } + getServer().getPluginManager().callEvent(griefalert_event); + + // Notify staff ingame + for (Player player : Bukkit.getOnlinePlayers()) { + if (player.hasPermission("griefalert.notify")) { + player.sendMessage(message); + } + } + + lastAlert = realAlertMessage; + } + + /* + INITIALIZATION + */ + // Init GriefAlert @Override public void onEnable() { @@ -141,6 +204,10 @@ public class GriefAlert extends JavaPlugin implements Listener { } } + /* + LOCATION IGNORING + */ + private boolean isLocationIgnored(int x, int y, int z, String world) { try { PreparedStatement ps = connection.prepareStatement("SELECT 1 FROM ignored_locations WHERE x=? AND y=? AND z=? AND world=?"); @@ -191,6 +258,10 @@ public class GriefAlert extends JavaPlugin implements Listener { } } + /* + EVENT LISTENERS + */ + @EventHandler(ignoreCancelled = true) // Block break alerts public void onBlockBreak(BlockBreakEvent event) { @@ -336,7 +407,7 @@ public class GriefAlert extends JavaPlugin implements Listener { } } - //event handler for item frames + // Placing item to an item frame @EventHandler(ignoreCancelled = true) public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { if (!(event.getRightClicked() instanceof ItemFrame frame)) return; @@ -370,7 +441,7 @@ public class GriefAlert extends JavaPlugin implements Listener { } } - // Breaking item frame item (uses a different event then placing an item) + // Item frame stealing alerts @EventHandler(ignoreCancelled = true) public void onItemFrameDamage(EntityDamageByEntityEvent event) { if (!(event.getEntity() instanceof ItemFrame frame)) return; @@ -398,6 +469,7 @@ public class GriefAlert extends JavaPlugin implements Listener { alert(message, playerName, "[Map Link](" + MAP_LINK + "/?worldname=" + worldName + "&zoom=7&x=" + x + "&y=" + y + "&z=" + z + ")", target, x, y, z, worldName); } + // Item frame breaking alerts @EventHandler(ignoreCancelled = true) public void onItemFrameBreak(HangingBreakByEntityEvent event) { if (!(event.getEntity() instanceof ItemFrame frame)) return; @@ -423,6 +495,7 @@ public class GriefAlert extends JavaPlugin implements Listener { } + // Command handler @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!command.getName().equalsIgnoreCase("griefalert")) return false; @@ -584,57 +657,6 @@ public class GriefAlert extends JavaPlugin implements Listener { return null; } - // Sends the alert (or cancels it) - private void alert(String message, String playerName, String mapLink, String target, int x, int y, int z, String world) { - // Exclude trusted people - Player griefer = Bukkit.getPlayer(playerName); - if (griefer.hasPermission("griefalert.exclude") || griefer.hasPermission("griefalert.exclude." + target)) { - return; - } - // Spam limiter - String realAlertMessage = message; - String[] alert1 = null; - if (lastAlert != null) { - alert1 = lastAlert.split(" "); - } - String[] alert2 = message.split(" "); - if (alert1 != null) { - if (alert1[2].equals(alert2[2]) && alert1[5].equals(alert2[5]) && alert1[1].equals("broke") && alert2[1].equals("broke")) { - identicalAlerts += 1; - } else if (Arrays.equals(alert1, alert2)) { - identicalAlerts += 1; - } else { - identicalAlerts = 1; - } - } - if (identicalAlerts == 4) { - message = ChatColor.GRAY + "Same behavior continues."; - mapLink = null; - } - if (identicalAlerts > 4) { - return; - } - // Use direct location check - if (world != null && isLocationIgnored(x, y, z, world)) { - return; // Do not alert if location is ignored - } - // Send an event for external hooks - GriefAlertEvent griefalert_event; - if (MAP_LINK != null && !MAP_LINK.isEmpty() && mapLink != null) { - griefalert_event = new GriefAlertEvent(message + " (" + mapLink + ")"); - } else { - griefalert_event = new GriefAlertEvent(message); - } - getServer().getPluginManager().callEvent(griefalert_event); - // Notify staff ingame - for (Player player : Bukkit.getOnlinePlayers()) { - if (player.hasPermission("griefalert.notify")) { - player.sendMessage(message); - } - } - lastAlert = realAlertMessage; - } - //pet alert(dog and cat only) @EventHandler public void onPetKill(EntityDeathEvent event) { @@ -662,7 +684,7 @@ public class GriefAlert extends JavaPlugin implements Listener { } - //farm animal handler + // Mob killing alerts @EventHandler public void onFarmAnimalDeath(EntityDeathEvent event) { if (!(event.getEntity().getKiller() instanceof Player killer)) return; @@ -698,6 +720,7 @@ public class GriefAlert extends JavaPlugin implements Listener { and its waxed, ill assume ur unwaxing, and therefor sending an alert but some of this code was written at 1am so idk how and why im why and howing */ + // Waxing/unwaxing alerts @EventHandler public void onBlockClick(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -760,7 +783,7 @@ public class GriefAlert extends JavaPlugin implements Listener { }, 1L); } - //stripping logs + // Log stripping alerts @EventHandler public void onLogStrip(PlayerInteractEvent event) { if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; @@ -811,6 +834,10 @@ public class GriefAlert extends JavaPlugin implements Listener { }, 1L); } + /* + CoreProtect API + */ + private CoreProtectAPI getCoreProtect() { Plugin plugin = getServer().getPluginManager().getPlugin("CoreProtect");