diff --git a/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java b/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java new file mode 100644 index 0000000..bf3c2a0 --- /dev/null +++ b/src/main/java/com/songoda/epichoppers/api/events/HopperAccessEvent.java @@ -0,0 +1,40 @@ +package com.songoda.epichoppers.api.events; + +import com.songoda.epichoppers.hopper.Hopper; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +/** + * Called when a hopper is accessed by a player. + */ +public class HopperAccessEvent extends HopperEvent implements Cancellable { + + private static final HandlerList HANDLERS = new HandlerList(); + + private boolean canceled = false; + + public HopperAccessEvent(Player player, Hopper hopper) { + super(player, hopper); + } + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public boolean isCancelled() { + return canceled; + } + + @Override + public void setCancelled(boolean canceled) { + this.canceled = canceled; + } + +} \ No newline at end of file diff --git a/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java b/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java new file mode 100644 index 0000000..64fb566 --- /dev/null +++ b/src/main/java/com/songoda/epichoppers/api/events/HopperEvent.java @@ -0,0 +1,29 @@ +package com.songoda.epichoppers.api.events; + +import com.songoda.epichoppers.hopper.Hopper; +import org.bukkit.entity.Player; +import org.bukkit.event.Event; +import org.bukkit.event.player.PlayerEvent; + +/** + * Represents an abstract {@link Event} given a {@link Player} and {@link Hopper} instance + */ +public abstract class HopperEvent extends PlayerEvent { + + protected final Hopper hopper; + + public HopperEvent(Player who, Hopper hopper) { + super(who); + this.hopper = hopper; + } + + /** + * Get the {@link Hopper} involved in this event + * + * @return the broken spawner + */ + public Hopper getHopper() { + return hopper; + } + +} \ No newline at end of file diff --git a/src/main/java/com/songoda/epichoppers/hopper/Hopper.java b/src/main/java/com/songoda/epichoppers/hopper/Hopper.java index 5f09028..dcf2695 100644 --- a/src/main/java/com/songoda/epichoppers/hopper/Hopper.java +++ b/src/main/java/com/songoda/epichoppers/hopper/Hopper.java @@ -4,6 +4,7 @@ import com.songoda.core.compatibility.ServerVersion; import com.songoda.core.gui.GuiManager; import com.songoda.core.hooks.EconomyManager; import com.songoda.epichoppers.EpicHoppers; +import com.songoda.epichoppers.api.events.HopperAccessEvent; import com.songoda.epichoppers.gui.GUIOverview; import com.songoda.epichoppers.hopper.levels.Level; import com.songoda.epichoppers.player.PlayerData; @@ -44,6 +45,13 @@ public class Hopper { && Bukkit.getPlayer(lastPlayerOpened) != null) { Bukkit.getPlayer(lastPlayerOpened).closeInventory(); } + + HopperAccessEvent accessEvent = new HopperAccessEvent(player, this); + Bukkit.getPluginManager().callEvent(accessEvent); + if (accessEvent.isCancelled()) { + return; + } + if (placedBy == null) placedBy = player.getUniqueId(); EpicHoppers instance = EpicHoppers.getInstance();