From deebb418c664355834977043c6ad458fb66dd750 Mon Sep 17 00:00:00 2001 From: Elias <102224705+bondegaard@users.noreply.github.com> Date: Tue, 7 May 2024 15:06:43 +0200 Subject: [PATCH] Added Custome Drop event --- .../autopickup/events/AutoPickUpEvent.java | 19 +++++++++++++ .../listeners/BlockBreakEventListener.java | 8 ++++++ .../listeners/BlockDropItemEventListener.java | 9 +++++++ .../listeners/EntityDeathEventListener.java | 7 +++++ .../EntityDropItemEventListener.java | 8 ++++++ .../listeners/MythicMobListener.java | 8 ++++++ .../PlayerInteractEventListener.java | 8 ++++++ .../utils/events/CallableEvent.java | 27 +++++++++++++++++++ .../utils/events/CancellableEvent.java | 26 ++++++++++++++++++ 9 files changed, 120 insertions(+) create mode 100644 src/main/java/us/thezircon/play/autopickup/events/AutoPickUpEvent.java create mode 100644 src/main/java/us/thezircon/play/autopickup/utils/events/CallableEvent.java create mode 100644 src/main/java/us/thezircon/play/autopickup/utils/events/CancellableEvent.java diff --git a/src/main/java/us/thezircon/play/autopickup/events/AutoPickUpEvent.java b/src/main/java/us/thezircon/play/autopickup/events/AutoPickUpEvent.java new file mode 100644 index 0000000..0a90e09 --- /dev/null +++ b/src/main/java/us/thezircon/play/autopickup/events/AutoPickUpEvent.java @@ -0,0 +1,19 @@ +package us.thezircon.play.autopickup.events; + +import org.bukkit.entity.Player; +import us.thezircon.play.autopickup.utils.events.CancellableEvent; + +import javax.annotation.Nullable; + +public class AutoPickUpEvent extends CancellableEvent { + + private final @Nullable Player player; + + public AutoPickUpEvent(@Nullable Player player) { + this.player = player; + } + + public @Nullable Player getPlayer() { + return player; + } +} diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/BlockBreakEventListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/BlockBreakEventListener.java index 04e6718..348ed3e 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/BlockBreakEventListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/BlockBreakEventListener.java @@ -19,6 +19,7 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.scheduler.BukkitRunnable; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import us.thezircon.play.autopickup.utils.HexFormat; import us.thezircon.play.autopickup.utils.Mendable; import us.thezircon.play.autopickup.utils.PickupObjective; @@ -145,6 +146,13 @@ public void run() { } }.runTaskLater(PLUGIN, 1); + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(player); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; + // Mend Items & Give Player XP int xp = e.getExpToDrop(); player.giveExp(xp); // Give player XP diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/BlockDropItemEventListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/BlockDropItemEventListener.java index d593c32..71e43da 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/BlockDropItemEventListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/BlockDropItemEventListener.java @@ -10,6 +10,7 @@ import org.bukkit.event.block.BlockDropItemEvent; import org.bukkit.inventory.ItemStack; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import us.thezircon.play.autopickup.utils.AutoSmelt; import us.thezircon.play.autopickup.utils.HexFormat; @@ -44,6 +45,14 @@ public void onDrop(BlockDropItemEvent e) { return; } + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(player); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; + + // if (block.getState() instanceof Container) { // return; // Containers are handled in block break event // } diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/EntityDeathEventListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/EntityDeathEventListener.java index 5c40467..35e326e 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/EntityDeathEventListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/EntityDeathEventListener.java @@ -10,6 +10,7 @@ import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.inventory.ItemStack; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import java.util.HashMap; import java.util.Iterator; @@ -62,6 +63,12 @@ public void run() { } } + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(player); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; // Mend Items & Give Player XP diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/EntityDropItemEventListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/EntityDropItemEventListener.java index 8ee0339..89ecef7 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/EntityDropItemEventListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/EntityDropItemEventListener.java @@ -8,6 +8,7 @@ import org.bukkit.event.player.PlayerShearEntityEvent; import org.bukkit.inventory.ItemStack; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import java.util.HashMap; import java.util.Iterator; @@ -33,6 +34,13 @@ public void onDrop(EntityDropItemEvent e) { return; } + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(null); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; + UUID sheep = e.getEntity().getUniqueId(); if (player_sheep_map.containsKey(sheep)) { Player player = Bukkit.getPlayer(player_sheep_map.get(sheep)); diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/MythicMobListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/MythicMobListener.java index 3f0dbc8..0075d4c 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/MythicMobListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/MythicMobListener.java @@ -9,6 +9,7 @@ import org.bukkit.event.Listener; import org.bukkit.inventory.ItemStack; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import java.util.HashMap; import java.util.Iterator; @@ -52,6 +53,13 @@ public void onDeath(MythicMobDeathEvent e) { } } + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(player); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; + // Drops Iterator iter = e.getDrops().iterator(); diff --git a/src/main/java/us/thezircon/play/autopickup/listeners/PlayerInteractEventListener.java b/src/main/java/us/thezircon/play/autopickup/listeners/PlayerInteractEventListener.java index 23ef25e..21b771e 100644 --- a/src/main/java/us/thezircon/play/autopickup/listeners/PlayerInteractEventListener.java +++ b/src/main/java/us/thezircon/play/autopickup/listeners/PlayerInteractEventListener.java @@ -13,6 +13,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; import us.thezircon.play.autopickup.AutoPickup; +import us.thezircon.play.autopickup.events.AutoPickUpEvent; import java.util.HashMap; @@ -38,6 +39,13 @@ public void onClick(PlayerInteractEvent e) { return; } + // Call event and check for cancel + AutoPickUpEvent autoPickUpEvent = new AutoPickUpEvent(player); + autoPickUpEvent.call(); + + if (autoPickUpEvent.isCancelled()) + return; + if(e.getAction() == Action.RIGHT_CLICK_BLOCK) { if(e.getClickedBlock().getType() == Material.SWEET_BERRY_BUSH) { new BukkitRunnable() { diff --git a/src/main/java/us/thezircon/play/autopickup/utils/events/CallableEvent.java b/src/main/java/us/thezircon/play/autopickup/utils/events/CallableEvent.java new file mode 100644 index 0000000..70df467 --- /dev/null +++ b/src/main/java/us/thezircon/play/autopickup/utils/events/CallableEvent.java @@ -0,0 +1,27 @@ +package us.thezircon.play.autopickup.utils.events; + +import org.bukkit.Bukkit; +import org.bukkit.event.Event; +import org.bukkit.event.HandlerList; + +public class CallableEvent extends Event { + private static final HandlerList handlers = new HandlerList(); + + private boolean isCalled = false; + + public static HandlerList getHandlerList() { + return handlers; + } + + public CallableEvent call() { + if (!this.isCalled) { + Bukkit.getPluginManager().callEvent(this); + this.isCalled = true; + } + return this; + } + + public HandlerList getHandlers() { + return handlers; + } +} diff --git a/src/main/java/us/thezircon/play/autopickup/utils/events/CancellableEvent.java b/src/main/java/us/thezircon/play/autopickup/utils/events/CancellableEvent.java new file mode 100644 index 0000000..ddd6418 --- /dev/null +++ b/src/main/java/us/thezircon/play/autopickup/utils/events/CancellableEvent.java @@ -0,0 +1,26 @@ +package us.thezircon.play.autopickup.utils.events; + +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +public class CancellableEvent extends CallableEvent implements Cancellable { + private static final HandlerList handlers = new HandlerList(); + + private boolean isCancelled = false; + + public static HandlerList getHandlerList() { + return handlers; + } + + public HandlerList getHandlers() { + return handlers; + } + + public boolean isCancelled() { + return this.isCancelled; + } + + public void setCancelled(boolean b) { + this.isCancelled = b; + } +}