From d664f5121477525f898a53bd1c02b9a474b01a07 Mon Sep 17 00:00:00 2001 From: jakub Date: Sun, 5 Apr 2026 11:05:05 +0200 Subject: [PATCH] =?UTF-8?q?Opravy:=20-=20blokaci=20dal=C5=A1=C3=ADch=20int?= =?UTF-8?q?erakc=C3=AD=20z=20pozemkem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ecoCraftCore/regions/RegionEvents.java | 196 +++++++++++++++++- 1 file changed, 191 insertions(+), 5 deletions(-) diff --git a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java index 151a597..7033ea4 100644 --- a/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java +++ b/src/main/java/xyz/soukup/ecoCraftCore/regions/RegionEvents.java @@ -1,16 +1,29 @@ package xyz.soukup.ecoCraftCore.regions; +import org.bukkit.Location; +import org.bukkit.NamespacedKey; import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.Item; +import org.bukkit.entity.Minecart; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.block.Action; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.inventory.InventoryPickupItemEvent; import org.bukkit.event.player.*; +import org.bukkit.event.vehicle.VehicleDestroyEvent; +import org.bukkit.event.vehicle.VehicleEntityCollisionEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataType; import xyz.soukup.ecoCraftCore.database.objects.Region; import xyz.soukup.ecoCraftCore.database.objects.RegionMember; +import static xyz.soukup.ecoCraftCore.EcoCraftCore.plugin; + public class RegionEvents implements Listener { @EventHandler @@ -40,7 +53,36 @@ public class RegionEvents implements Listener { block.getZ() ); - event.setCancelled(!allowed); + if (allowed){ + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void onPlayerInteractPhysical(PlayerInteractEvent event){ + if (!event.getAction().equals(Action.PHYSICAL)){ + return; + } + + Player player = event.getPlayer(); + Location location = player.getLocation(); + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + player, + location.getBlockX(), + location.getBlockY(), + location.getBlockZ() + ); + + if (allowed){ + return; + } + + event.setCancelled(true); + } @EventHandler @@ -55,7 +97,11 @@ public class RegionEvents implements Listener { block.getZ() ); - event.setCancelled(!allowed); + if (allowed){ + return; + } + + event.setCancelled(true); } @EventHandler @@ -71,7 +117,11 @@ public class RegionEvents implements Listener { block.getZ() ); - event.setCancelled(!allowed); + if (allowed){ + return; + } + + event.setCancelled(true); } @EventHandler @@ -86,7 +136,11 @@ public class RegionEvents implements Listener { clickedBlock.getZ() ); - event.setCancelled(!allowed); + if (allowed){ + return; + } + + event.setCancelled(true); } @EventHandler @@ -101,10 +155,142 @@ public class RegionEvents implements Listener { clickedBlock.getZ() ); - event.setCancelled(!allowed); + if (allowed){ + return; + } + + event.setCancelled(true); } + @EventHandler + public void onEntityInteract(PlayerInteractEntityEvent event){ + Entity entity = event.getRightClicked(); + Location location = entity.getLocation(); + + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + event.getPlayer(), + location.getBlockX(), + location.getBlockY(), + location.getBlockZ()); + + if (allowed){ + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void onEntityHit(EntityDamageByEntityEvent event){ + + if (!(event.getDamager() instanceof Player player)){ + return; + } + + Entity entity = event.getEntity(); + Location location = entity.getLocation(); + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + player, + location.getBlockX(), + location.getBlockY(), + location.getBlockZ()); + + if (allowed){ + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void onMinecartPush(VehicleEntityCollisionEvent event) { + + + if (!(event.getEntity() instanceof Player player)){ + return; + } + + Location location = event.getVehicle().getLocation(); + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + player, + location.getBlockX(), + location.getBlockY(), + location.getBlockZ()); + + if (allowed){ + return; + } + + event.setCancelled(true); + } + + //Preventing hopper interaction :P + @EventHandler + public void onDrop(PlayerDropItemEvent event) { + Player player = event.getPlayer(); + Location location = player.getLocation(); + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + player, + location.getBlockX(), + location.getBlockY(), + location.getBlockZ()); + + if (allowed){ + return; + } + + Item item = event.getItemDrop(); + item.getPersistentDataContainer().set(new NamespacedKey(plugin, "hopper_stopper"), PersistentDataType.BYTE, (byte) 1); + + } + + @EventHandler + public void onHopperPickup(InventoryPickupItemEvent event) { + Item item = event.getItem(); + + if (!item.getPersistentDataContainer().has(new NamespacedKey(plugin, "hopper_stopper"), PersistentDataType.BYTE)) { + return; + } + + event.setCancelled(true); + } + + @EventHandler + public void onVehicleDestroy(VehicleDestroyEvent event) { + if (!(event.getAttacker() instanceof Player player)){ + return; + } + + Location location = event.getVehicle().getLocation(); + + boolean allowed = isAllowedToInteract( + location.getWorld().getName(), + player, + location.getBlockX(), + location.getBlockY(), + location.getBlockZ()); + + if (allowed){ + return; + } + + event.setCancelled(true); + } + + + + private boolean isAllowedToInteract(String island, Player player, Location location){ + return isAllowedToInteract(island, player, location.getBlockX(), location.getBlockY(), location.getBlockZ()); + } private boolean isAllowedToInteract(String island, Player player, int x, int y, int z){ if (player.isOp()){