From 0707a51a8925a85cdc2e47d5e7e6f261822da7ce Mon Sep 17 00:00:00 2001 From: lars Date: Wed, 17 Jul 2024 19:13:00 +0200 Subject: [PATCH] forbid using chests in pixelblocks --- .../minecraft/pixelblocks/PixelBlocks.java | 1 + .../listeners/InventoryListener.java | 74 +++++++++++++++++++ .../pixelblocks/pixelblock/PixelBlock.java | 2 + 3 files changed, 77 insertions(+) create mode 100644 src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/InventoryListener.java diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java index 6a7dfc9..cca3a92 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/PixelBlocks.java @@ -35,6 +35,7 @@ public final class PixelBlocks extends JavaPlugin { getServer().getPluginManager().registerEvents(new EntityExplodeListener(), this); getServer().getPluginManager().registerEvents(new BlockExplodeListener(), this); getServer().getPluginManager().registerEvents(new PlayerPortalListener(), this); + getServer().getPluginManager().registerEvents(new InventoryListener(), this); getServer().getPluginManager().registerEvents(new PlayerChangeWorldListener(), this); Objects.requireNonNull(getCommand("createpixelblock")).setExecutor(new CreatePixelBlockCommand()); diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/InventoryListener.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/InventoryListener.java new file mode 100644 index 0000000..9c66366 --- /dev/null +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/listeners/InventoryListener.java @@ -0,0 +1,74 @@ +package eu.mhsl.minecraft.pixelblocks.listeners; + +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.*; +import org.bukkit.inventory.CraftingInventory; +import org.bukkit.inventory.PlayerInventory; + +import java.util.Arrays; +import java.util.Objects; + +public class InventoryListener implements Listener { + @EventHandler + static void onInventoryOpen(InventoryOpenEvent event) { + World playerWorld = event.getPlayer().getWorld(); + World[] standardWorlds = {Bukkit.getWorlds().get(0), Bukkit.getWorlds().get(1), Bukkit.getWorlds().get(2)}; + + if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { + if(!(event.getInventory() instanceof PlayerInventory) && !(event.getInventory() instanceof CraftingInventory)) { + event.setCancelled(true); + } + } + } + + @EventHandler + static void onInventoryDrag(InventoryDragEvent event) { + World playerWorld = event.getWhoClicked().getWorld(); + World[] standardWorlds = {Bukkit.getWorlds().get(0), Bukkit.getWorlds().get(1), Bukkit.getWorlds().get(2)}; + + if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { + if(!(event.getInventory() instanceof PlayerInventory) && !(event.getInventory() instanceof CraftingInventory)) { + event.setCancelled(true); + } + } + } + + @EventHandler + static void onInventoryClick(InventoryClickEvent event) { + World playerWorld = event.getWhoClicked().getWorld(); + World[] standardWorlds = {Bukkit.getWorlds().get(0), Bukkit.getWorlds().get(1), Bukkit.getWorlds().get(2)}; + + if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { + if(!(event.getInventory() instanceof PlayerInventory) && !(event.getInventory() instanceof CraftingInventory)) { + event.setCancelled(true); + } + } + } + + @EventHandler + static void onInventoryInteract(InventoryInteractEvent event) { + World playerWorld = event.getWhoClicked().getWorld(); + World[] standardWorlds = {Bukkit.getWorlds().get(0), Bukkit.getWorlds().get(1), Bukkit.getWorlds().get(2)}; + + if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { + if(!(event.getInventory() instanceof PlayerInventory) && !(event.getInventory() instanceof CraftingInventory)) { + event.setCancelled(true); + } + } + } + + @EventHandler + static void onInventoryMoveItem(InventoryMoveItemEvent event) { + World playerWorld = Objects.requireNonNull(event.getDestination().getLocation()).getWorld(); + World[] standardWorlds = {Bukkit.getWorlds().get(0), Bukkit.getWorlds().get(1), Bukkit.getWorlds().get(2)}; + + if(!Arrays.stream(standardWorlds).toList().contains(playerWorld)) { + if(!(event.getDestination() instanceof PlayerInventory) && !(event.getDestination() instanceof CraftingInventory)) { + event.setCancelled(true); + } + } + } +} diff --git a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java index 9c89536..43b4938 100644 --- a/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java +++ b/src/main/java/eu/mhsl/minecraft/pixelblocks/pixelblock/PixelBlock.java @@ -169,6 +169,8 @@ public class PixelBlock { } ); + + this.remove(); this.pixelBlockLocation.getWorld().playSound(this.pixelBlockLocation, Sound.BLOCK_COPPER_BULB_BREAK, 1.0F, 30); this.pixelBlockLocation.getWorld().dropItem(this.pixelBlockLocation, this.getAsItem());