Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.lisenochek.realistic.listeners;
- import org.bukkit.GameMode;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.Sound;
- import org.bukkit.block.Block;
- import org.bukkit.block.BlockFace;
- import org.bukkit.block.BlockState;
- import org.bukkit.entity.Entity;
- import org.bukkit.entity.EntityType;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.EventPriority;
- 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.player.PlayerInteractEvent;
- import org.bukkit.material.Door;
- import org.bukkit.material.TrapDoor;
- import ru.lisenochek.realistic.Items;
- import ru.lisenochek.realistic.objects.WorkbenchClass;
- import ru.lisenochek.realistic.sql.SQLManager;
- import ru.lisenochek.realistic.utils.Utils;
- import ru.lisenochek.realistic.utils.WorkbenchLogger;
- import java.util.HashSet;
- public class WorkbenchListener implements Listener {
- @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
- public void onPlaceWorkbench(BlockPlaceEvent e) {
- Player p = e.getPlayer();
- if (!Utils.checkItem(e.getItemInHand(), Items.WORKBENCH.getStack())) return;
- for (int x = -10; x < 11; x++) {
- for (int y = -4; y < 10; y++) {
- for (int z = -10; z < 11; z++) {
- Location location = new Location(e.getBlockPlaced().getWorld(), e.getBlockPlaced().getLocation().getBlockX() + x, e.getBlockPlaced().getLocation().getBlockY() + y, e.getBlockPlaced().getLocation().getBlockZ() + z);
- if (WorkbenchClass.wbMap.get(location) == null) continue;
- Utils.sendBarMessage(p, "&7Территория защищена &cшкафом&7.");
- e.setCancelled(true);
- return;
- }
- }
- }
- SQLManager.addWorkbechData(WorkbenchClass.createRegion(e.getBlockPlaced().getLocation()));
- Utils.sendBarMessage(p, "&7Я &aустановил &7шкаф.");
- WorkbenchLogger.writeToAdFile(p, "установлен шкаф на координатах: " + e.getBlockPlaced().getLocation().getBlockX() + " " + e.getBlockPlaced().getLocation().getBlockY() + " " + e.getBlockPlaced().getLocation().getBlockZ());
- }
- @EventHandler(ignoreCancelled = true)
- public void onPlace(BlockPlaceEvent e) {
- Player p = e.getPlayer();
- WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlockPlaced().getLocation());
- if (Utils.checkItem(p.getItemInHand(), Items.C4.getStack()) || Utils.checkItem(p.getItemInHand(), Items.BEAN_EXPLOSIVE.getStack()) || Utils.checkItem(p.getItemInHand(), Items.SUPPLY_GRENADE.getStack())) return;
- if (workbenchClass == null || workbenchClass.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) return;
- e.setCancelled(true);
- Utils.sendBarMessage(p, "&7Я &cне могу &7строить в радиусе чужого шкафа.");
- }
- @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
- public void onBreak(BlockBreakEvent e) {
- Player p = e.getPlayer();
- WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlock().getLocation());
- if (workbenchClass == null) return;
- if (workbenchClass.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) return;
- e.setCancelled(true);
- Utils.sendBarMessage(p, "&7Я &cне могу &7ломать в радиусе чужого шкафа.");
- }
- @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
- public void onBreakWorkbench(BlockBreakEvent e) {
- Player p = e.getPlayer();
- WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlock().getLocation());
- if (workbenchClass == null) return;
- if (!workbenchClass.getWorkBenchLocation().equals(e.getBlock().getLocation())) return;
- for (Location location : workbenchClass.getCuboid()) WorkbenchClass.wbMap.remove(location);
- e.setCancelled(true);
- e.getBlock().setType(Material.AIR);
- SQLManager.deleteWorkbenchData(e.getBlock().getLocation());
- Utils.sendBarMessage(p, "&7Я &cсломал &7шкаф. Защиты территории больше нет.");
- WorkbenchLogger.writeToAdFile(p, "сломан шкаф на координатах: " + e.getBlock().getLocation().getBlockX() + " " + e.getBlock().getLocation().getBlockY() + " " + e.getBlock().getLocation().getBlockZ());
- }
- @EventHandler(ignoreCancelled = true)
- public void onClickOnWorkbench(PlayerInteractEvent e) {
- Player p = e.getPlayer();
- if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
- if (e.getClickedBlock().getType() != Material.WORKBENCH) return;
- e.setCancelled(true);
- WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
- if (workbenchClass == null) return;
- if (p.isSneaking()) return;
- workbenchClass.openInventory(p);
- }
- @EventHandler(priority = EventPriority.LOW)
- public void spamClick(PlayerInteractEvent e) {
- Player p = e.getPlayer();
- if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
- if (e.getClickedBlock().getType() != Material.WORKBENCH && e.getClickedBlock().getType() != Material.FURNACE && e.getClickedBlock().getType() != Material.CHEST) return;
- if (p.getLocation().distance(e.getClickedBlock().getLocation()) >= 3) {
- Utils.sendBarMessage(p, "&7Нужно подойти &cпоближе&7, чтобы я смог дотянуться.");
- e.setCancelled(true);
- return;
- }
- if (WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation()) == null) return;
- for (Block block : p.getLineOfSight((HashSet<Byte>) null, 6)) {
- if (block.getType() == e.getClickedBlock().getType() || block.getType() == Material.SNOW) continue;
- if (block.getType() != Material.AIR) e.setCancelled(true);
- }
- }
- @EventHandler
- public void onPlaceConstruction(BlockPlaceEvent e) {
- if (e.getBlockPlaced().getType() != Material.WOOD && e.getBlockPlaced().getType() != Material.COBBLESTONE && e.getBlockPlaced().getType() != Material.IRON_BLOCK) return;
- e.setCancelled(true);
- Utils.sendBarMessage(e.getPlayer(), "&7Нужна &cсоломенная конструкция или другая уже улучшенная конструкция&7, чтобы улучшить ее.");
- }
- @EventHandler
- public void onUpgradeConstuction(PlayerInteractEvent e) {
- Player p = e.getPlayer();
- if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
- switch (e.getClickedBlock().getType()) {
- case HAY_BLOCK: {
- if (p.getItemInHand().getType() != Items.WOODEN_CONSTRUCTION.getStack().getType() && p.getItemInHand().getType() != Items.STONE_CONSTRUCTION.getStack().getType() && p.getItemInHand().getType() != Items.METAL_CONSTRUCTION.getStack().getType()) return;
- upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
- break;
- }
- case WOOD: {
- if (p.getItemInHand().getType() != Items.STONE_CONSTRUCTION.getStack().getType() && p.getItemInHand().getType() != Items.METAL_CONSTRUCTION.getStack().getType()) return;
- upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
- break;
- }
- case COBBLESTONE: {
- if (p.getItemInHand().getType() != Items.METAL_CONSTRUCTION.getStack().getType()) return;
- upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
- break;
- }
- }
- }
- @EventHandler
- public void openDoors(PlayerInteractEvent e) {
- if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
- Player p = e.getPlayer();
- BlockState blockData = e.getClickedBlock().getState();
- switch (e.getClickedBlock().getType()) {
- case IRON_DOOR_BLOCK: {
- Door downDoor = (Door) blockData.getData();
- WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
- if (wb != null && !wb.isOwner(p.getName()) && p.getGameMode() != GameMode.CREATIVE) {
- Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать эту дверь.");
- break;
- }
- if (p.isSneaking()) break;
- if (p.getGameMode() == GameMode.SPECTATOR) break;
- p.getWorld().playSound(e.getClickedBlock().getLocation(), Sound.DOOR_OPEN, 1, 1);
- if (downDoor.isTopHalf()) {
- BlockState stateUpDoor = e.getClickedBlock().getRelative(BlockFace.DOWN).getState();
- Door upDoor = (Door) stateUpDoor.getData();
- upDoor.setOpen(!upDoor.isOpen());
- stateUpDoor.update();
- break;
- }
- downDoor.setOpen(!downDoor.isOpen());
- blockData.update();
- break;
- }
- case IRON_TRAPDOOR: {
- TrapDoor trapDoor = (TrapDoor) blockData.getData();
- WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
- if (wb != null && !wb.isOwner(p.getName()) && p.getGameMode() != GameMode.CREATIVE) {
- Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать этот люк.");
- break;
- }
- if (p.isSneaking()) break;
- trapDoor.setOpen(!trapDoor.isOpen());
- blockData.update();
- p.getWorld().playSound(e.getClickedBlock().getLocation(), Sound.DOOR_OPEN, 1, 1);
- }
- case SPRUCE_DOOR: {
- WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
- if (wb == null || wb.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) break;
- Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать эту дверь.");
- e.setCancelled(true);
- break;
- }
- case TRAP_DOOR: {
- WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
- if (wb == null || wb.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) break;
- Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать этот люк.");
- e.setCancelled(true);
- break;
- }
- }
- }
- private void upgradeConstruction(Player p, Location location, Material material, int data, PlayerInteractEvent e) {
- if (WorkbenchClass.wbMap.get(location) != null && !WorkbenchClass.wbMap.get(location).isOwner(p.getName())) {
- Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут улучшать конструкции.");
- e.setCancelled(true);
- return;
- }
- location.getBlock().setType(p.getItemInHand().getType());
- location.getBlock().setData((byte) data);
- Utils.removeItemFromHand(p);
- e.setCancelled(true);
- Utils.sendBarMessage(p, "&7Я &aулучшил &7конструкцию.");
- for (Entity entity : p.getWorld().getNearbyEntities(e.getClickedBlock().getLocation(), 10, 10, 10)) {
- if (entity.getType() != EntityType.PLAYER) continue;
- Player pl = (Player) entity;
- pl.playSound(e.getClickedBlock().getLocation(), Sound.ANVIL_BREAK, 1, 1);
- pl.playSound(e.getClickedBlock().getLocation(), Sound.ZOMBIE_WOODBREAK, 1, 1);
- Utils.crackEffect(e.getClickedBlock().getLocation().add(0.5D, 0, 0.5D), e.getMaterial(), 100);
- }
- }
- }
Add Comment
Please, Sign In to add comment