From b1e3e99cb831f85fb729d0c2363c17cb34a3825c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 10 Aug 2025 12:04:46 +0200 Subject: [PATCH] added AntiAutoTotem --- .../security/antiAutoTotem/AntiAutoTotem.java | 62 +++++++++++++++++++ .../antiAutoTotem/OnTotemUseListener.java | 15 +++++ 2 files changed, 77 insertions(+) create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/AntiAutoTotem.java create mode 100644 craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/OnTotemUseListener.java diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/AntiAutoTotem.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/AntiAutoTotem.java new file mode 100644 index 0000000..c134629 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/AntiAutoTotem.java @@ -0,0 +1,62 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiAutoTotem; + +import eu.mhsl.craftattack.spawn.common.appliances.tooling.acInform.AcInform; +import eu.mhsl.craftattack.spawn.core.Main; +import eu.mhsl.craftattack.spawn.core.appliance.Appliance; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.Listener; +import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.NotNull; + +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; +import java.util.function.Supplier; + +public class AntiAutoTotem extends Appliance { + + public void checkTotemUse(Player player) { + PlayerInventory playerInv = player.getInventory(); + + Supplier> getHeldItems = () -> List.of( + playerInv.getItemInMainHand().getType(), + playerInv.getItemInOffHand().getType() + ); + Function isCurrentlyHoldingTotem = (p) -> getHeldItems.get().contains(Material.TOTEM_OF_UNDYING); + + if(!isCurrentlyHoldingTotem.apply(player)) return; + if(getHeldItems.get().stream().allMatch(material -> material.equals(Material.TOTEM_OF_UNDYING))) return; + + AtomicInteger tickCounter = new AtomicInteger(); + Bukkit.getScheduler().runTaskTimer( + Main.instance(), + (task) -> { + if(tickCounter.incrementAndGet() > 10) { + task.cancel(); + return; + } + + if(isCurrentlyHoldingTotem.apply(player)) { + task.cancel(); + Main.instance().getAppliance(AcInform.class).notifyAdmins( + "internal", + player.getName(), + "antiAutoTotem", + (float) tickCounter.get() + ); + } + }, + 1, + 1 + ); + } + + @Override + protected @NotNull List listeners() { + return List.of( + new OnTotemUseListener() + ); + } +} diff --git a/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/OnTotemUseListener.java b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/OnTotemUseListener.java new file mode 100644 index 0000000..c2c7ed2 --- /dev/null +++ b/craftattack/src/main/java/eu/mhsl/craftattack/spawn/craftattack/appliances/security/antiAutoTotem/OnTotemUseListener.java @@ -0,0 +1,15 @@ +package eu.mhsl.craftattack.spawn.craftattack.appliances.security.antiAutoTotem; + +import eu.mhsl.craftattack.spawn.core.appliance.ApplianceListener; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityResurrectEvent; + +class OnTotemUseListener extends ApplianceListener { + @EventHandler + public void onTotem(EntityResurrectEvent event) { + if(event.isCancelled()) return; + if(!(event.getEntity() instanceof Player player)) return; + this.getAppliance().checkTotemUse(player); + } +}