From 2f3101a7f1043dbb064b22d55f7f38364878f951 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Thu, 6 Feb 2025 13:23:55 +0000 Subject: [PATCH] started on xray detector --- .../zxq5/fantasysmp/events/XrayDetector.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/java/dev/zxq5/fantasysmp/events/XrayDetector.java diff --git a/src/main/java/dev/zxq5/fantasysmp/events/XrayDetector.java b/src/main/java/dev/zxq5/fantasysmp/events/XrayDetector.java new file mode 100644 index 0000000..2ac40aa --- /dev/null +++ b/src/main/java/dev/zxq5/fantasysmp/events/XrayDetector.java @@ -0,0 +1,57 @@ +package dev.zxq5.fantasysmp.events; + +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.plugin.Plugin; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; + +import static org.bukkit.Bukkit.getConsoleSender; +import static org.bukkit.Bukkit.getPluginManager; + +public class XrayDetector implements Listener { + private HashMap> players = new HashMap<>(); + + private final ArrayList trackedBlocks = new ArrayList<>(Arrays.asList( + Material.ANCIENT_DEBRIS, + Material.DIAMOND_ORE, + Material.EMERALD_ORE, + Material.GOLD_ORE, + Material.IRON_ORE, + Material.LAPIS_ORE, + Material.REDSTONE_ORE + )); + + @EventHandler + public void onBlockBreak(BlockBreakEvent event) { + Player player = event.getPlayer(); + HashMap blocks = this.players.get(player); + Material block = event.getBlock().getType(); + Plugin plugin = getPluginManager().getPlugin("fantasysmp"); + + if (!this.players.containsKey(player)) { + this.players.put(player, new HashMap<>()); + } + + if (this.trackedBlocks.contains(block)) { + if (!(blocks.containsKey(block))) blocks.put(block, 0); + blocks.put(block, blocks.get(block) + 1); + + Bukkit.getScheduler().runTaskLater(plugin, () -> { + blocks.put(block, blocks.get(block) - 1); + }, 18000); + } + + for (HashMap.Entry nextBlock : blocks.entrySet()) { + if (nextBlock.getValue() > 30) { + getConsoleSender().sendMessage("Player " + player.getName() + " has broken 30 " + nextBlock.getKey().name() + " in the last 30 minutes!!! (possible xray)"); + } + } + } +}