diff --git a/src/main/java/com/alttd/playerutils/PlayerUtils.java b/src/main/java/com/alttd/playerutils/PlayerUtils.java index 7ffbfe7..6c4e656 100644 --- a/src/main/java/com/alttd/playerutils/PlayerUtils.java +++ b/src/main/java/com/alttd/playerutils/PlayerUtils.java @@ -42,6 +42,7 @@ public final class PlayerUtils extends JavaPlugin { pluginManager.registerEvents(new TeleportEvent(), this); pluginManager.registerEvents(new GoatHornEvent(logger), this); pluginManager.registerEvents(new LimitArmorStands(this, logger), this); + pluginManager.registerEvents(new BlockBlockUseEvent(logger), this); RotateBlockEvent rotateBlockEvent = new RotateBlockEvent(logger); pluginManager.registerEvents(rotateBlockEvent, this); diff --git a/src/main/java/com/alttd/playerutils/config/Messages.java b/src/main/java/com/alttd/playerutils/config/Messages.java index 211aaf1..c1335e0 100644 --- a/src/main/java/com/alttd/playerutils/config/Messages.java +++ b/src/main/java/com/alttd/playerutils/config/Messages.java @@ -1,7 +1,6 @@ package com.alttd.playerutils.config; import com.alttd.playerutils.util.Logger; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.List; @@ -157,4 +156,14 @@ public class Messages extends AbstractConfig { GAVE_FINAL_KEY = config.getString(prefix, "gave-final-key", GAVE_FINAL_KEY); } } + + public static class BLOCK_BLOCK_USE { + private static final String prefix = "block-block-use."; + public static String BLOCKED = "You are not powerful enough!"; + + @SuppressWarnings("unused") + private static void load() { + BLOCKED = config.getString(prefix, "blocked", BLOCKED); + } + } } diff --git a/src/main/java/com/alttd/playerutils/event_listeners/BlockBlockUseEvent.java b/src/main/java/com/alttd/playerutils/event_listeners/BlockBlockUseEvent.java new file mode 100644 index 0000000..eb35c03 --- /dev/null +++ b/src/main/java/com/alttd/playerutils/event_listeners/BlockBlockUseEvent.java @@ -0,0 +1,68 @@ +package com.alttd.playerutils.event_listeners; + +import com.alttd.playerutils.config.Messages; +import com.alttd.playerutils.util.Logger; +import org.bukkit.Material; +import org.bukkit.Tag; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockCanBuildEvent; +import org.bukkit.event.block.BlockDispenseEvent; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.ItemStack; + +public class BlockBlockUseEvent implements Listener { + + private final Logger logger; + + public BlockBlockUseEvent(Logger logger) { + this.logger = logger; + } + + @EventHandler + public void onBlockPlace(BlockCanBuildEvent event) { + Player player = event.getPlayer(); + if (player != null && player.hasPermission("playerutils.block-block-use.bypass")) { + return; + } + if (isNotBlocked(event.getMaterial())) { + return; + } + event.setBuildable(false); + if (player != null) { + player.sendRichMessage(Messages.BLOCK_BLOCK_USE.BLOCKED); + } + } + + @EventHandler + public void onItemUse(PlayerInteractEvent event) { + Player player = event.getPlayer(); + if (player.hasPermission("playerutils.block-block-use.bypass")) { + return; + } + if (!event.getAction().isRightClick()) { + return; + } + ItemStack item = event.getItem(); + if (item == null || isNotBlocked(item.getType())) { + return; + } + player.sendRichMessage(Messages.BLOCK_BLOCK_USE.BLOCKED); + event.setCancelled(true); + } + + @EventHandler + public void onDispenserUse(BlockDispenseEvent event) { + if (isNotBlocked(event.getItem().getType())) { + return; + } + + event.setCancelled(true); + } + + public boolean isNotBlocked(Material type) { + return !type.equals(Material.BEDROCK) && !type.equals(Material.SPAWNER) && !type.equals(Material.BARRIER) && !type.translationKey().endsWith("_spawn_egg"); + } + +}