Guest User

Untitled

a guest
Dec 3rd, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.62 KB | None | 0 0
  1. package ru.lisenochek.realistic.listeners;
  2.  
  3. import org.bukkit.GameMode;
  4. import org.bukkit.Location;
  5. import org.bukkit.Material;
  6. import org.bukkit.Sound;
  7. import org.bukkit.block.Block;
  8. import org.bukkit.block.BlockFace;
  9. import org.bukkit.block.BlockState;
  10. import org.bukkit.entity.Entity;
  11. import org.bukkit.entity.EntityType;
  12. import org.bukkit.entity.Player;
  13. import org.bukkit.event.EventHandler;
  14. import org.bukkit.event.EventPriority;
  15. import org.bukkit.event.Listener;
  16. import org.bukkit.event.block.Action;
  17. import org.bukkit.event.block.BlockBreakEvent;
  18. import org.bukkit.event.block.BlockPlaceEvent;
  19. import org.bukkit.event.player.PlayerInteractEvent;
  20. import org.bukkit.material.Door;
  21. import org.bukkit.material.TrapDoor;
  22. import ru.lisenochek.realistic.Items;
  23. import ru.lisenochek.realistic.objects.WorkbenchClass;
  24. import ru.lisenochek.realistic.sql.SQLManager;
  25. import ru.lisenochek.realistic.utils.Utils;
  26. import ru.lisenochek.realistic.utils.WorkbenchLogger;
  27.  
  28. import java.util.HashSet;
  29.  
  30. public class WorkbenchListener implements Listener {
  31.  
  32. @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
  33. public void onPlaceWorkbench(BlockPlaceEvent e) {
  34.  
  35. Player p = e.getPlayer();
  36.  
  37. if (!Utils.checkItem(e.getItemInHand(), Items.WORKBENCH.getStack())) return;
  38.  
  39. for (int x = -10; x < 11; x++) {
  40. for (int y = -4; y < 10; y++) {
  41. for (int z = -10; z < 11; z++) {
  42.  
  43. Location location = new Location(e.getBlockPlaced().getWorld(), e.getBlockPlaced().getLocation().getBlockX() + x, e.getBlockPlaced().getLocation().getBlockY() + y, e.getBlockPlaced().getLocation().getBlockZ() + z);
  44.  
  45. if (WorkbenchClass.wbMap.get(location) == null) continue;
  46.  
  47. Utils.sendBarMessage(p, "&7Территория защищена &cшкафом&7.");
  48. e.setCancelled(true);
  49. return;
  50. }
  51. }
  52. }
  53.  
  54. SQLManager.addWorkbechData(WorkbenchClass.createRegion(e.getBlockPlaced().getLocation()));
  55. Utils.sendBarMessage(p, "&7Я &aустановил &7шкаф.");
  56. WorkbenchLogger.writeToAdFile(p, "установлен шкаф на координатах: " + e.getBlockPlaced().getLocation().getBlockX() + " " + e.getBlockPlaced().getLocation().getBlockY() + " " + e.getBlockPlaced().getLocation().getBlockZ());
  57. }
  58.  
  59. @EventHandler(ignoreCancelled = true)
  60. public void onPlace(BlockPlaceEvent e) {
  61.  
  62. Player p = e.getPlayer();
  63. WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlockPlaced().getLocation());
  64.  
  65. 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;
  66. if (workbenchClass == null || workbenchClass.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) return;
  67.  
  68. e.setCancelled(true);
  69. Utils.sendBarMessage(p, "&7Я &cне могу &7строить в радиусе чужого шкафа.");
  70. }
  71.  
  72. @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
  73. public void onBreak(BlockBreakEvent e) {
  74.  
  75. Player p = e.getPlayer();
  76. WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlock().getLocation());
  77.  
  78. if (workbenchClass == null) return;
  79. if (workbenchClass.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) return;
  80. e.setCancelled(true);
  81. Utils.sendBarMessage(p, "&7Я &cне могу &7ломать в радиусе чужого шкафа.");
  82. }
  83.  
  84. @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
  85. public void onBreakWorkbench(BlockBreakEvent e) {
  86.  
  87. Player p = e.getPlayer();
  88. WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getBlock().getLocation());
  89.  
  90. if (workbenchClass == null) return;
  91. if (!workbenchClass.getWorkBenchLocation().equals(e.getBlock().getLocation())) return;
  92. for (Location location : workbenchClass.getCuboid()) WorkbenchClass.wbMap.remove(location);
  93.  
  94. e.setCancelled(true);
  95. e.getBlock().setType(Material.AIR);
  96. SQLManager.deleteWorkbenchData(e.getBlock().getLocation());
  97. Utils.sendBarMessage(p, "&7Я &cсломал &7шкаф. Защиты территории больше нет.");
  98. WorkbenchLogger.writeToAdFile(p, "сломан шкаф на координатах: " + e.getBlock().getLocation().getBlockX() + " " + e.getBlock().getLocation().getBlockY() + " " + e.getBlock().getLocation().getBlockZ());
  99. }
  100.  
  101. @EventHandler(ignoreCancelled = true)
  102. public void onClickOnWorkbench(PlayerInteractEvent e) {
  103.  
  104. Player p = e.getPlayer();
  105.  
  106. if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
  107. if (e.getClickedBlock().getType() != Material.WORKBENCH) return;
  108.  
  109. e.setCancelled(true);
  110. WorkbenchClass workbenchClass = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
  111.  
  112. if (workbenchClass == null) return;
  113. if (p.isSneaking()) return;
  114.  
  115. workbenchClass.openInventory(p);
  116. }
  117.  
  118. @EventHandler(priority = EventPriority.LOW)
  119. public void spamClick(PlayerInteractEvent e) {
  120.  
  121. Player p = e.getPlayer();
  122.  
  123. if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
  124. if (e.getClickedBlock().getType() != Material.WORKBENCH && e.getClickedBlock().getType() != Material.FURNACE && e.getClickedBlock().getType() != Material.CHEST) return;
  125.  
  126. if (p.getLocation().distance(e.getClickedBlock().getLocation()) >= 3) {
  127. Utils.sendBarMessage(p, "&7Нужно подойти &cпоближе&7, чтобы я смог дотянуться.");
  128. e.setCancelled(true);
  129. return;
  130. }
  131.  
  132. if (WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation()) == null) return;
  133.  
  134. for (Block block : p.getLineOfSight((HashSet<Byte>) null, 6)) {
  135. if (block.getType() == e.getClickedBlock().getType() || block.getType() == Material.SNOW) continue;
  136. if (block.getType() != Material.AIR) e.setCancelled(true);
  137. }
  138. }
  139.  
  140. @EventHandler
  141. public void onPlaceConstruction(BlockPlaceEvent e) {
  142. if (e.getBlockPlaced().getType() != Material.WOOD && e.getBlockPlaced().getType() != Material.COBBLESTONE && e.getBlockPlaced().getType() != Material.IRON_BLOCK) return;
  143. e.setCancelled(true);
  144. Utils.sendBarMessage(e.getPlayer(), "&7Нужна &cсоломенная конструкция или другая уже улучшенная конструкция&7, чтобы улучшить ее.");
  145. }
  146.  
  147. @EventHandler
  148. public void onUpgradeConstuction(PlayerInteractEvent e) {
  149.  
  150. Player p = e.getPlayer();
  151.  
  152. if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
  153.  
  154. switch (e.getClickedBlock().getType()) {
  155. case HAY_BLOCK: {
  156. 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;
  157. upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
  158. break;
  159. }
  160.  
  161. case WOOD: {
  162. if (p.getItemInHand().getType() != Items.STONE_CONSTRUCTION.getStack().getType() && p.getItemInHand().getType() != Items.METAL_CONSTRUCTION.getStack().getType()) return;
  163. upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
  164. break;
  165. }
  166.  
  167. case COBBLESTONE: {
  168. if (p.getItemInHand().getType() != Items.METAL_CONSTRUCTION.getStack().getType()) return;
  169. upgradeConstruction(p, e.getClickedBlock().getLocation(), p.getItemInHand().getType(), p.getItemInHand().getDurability(), e);
  170. break;
  171. }
  172. }
  173. }
  174.  
  175. @EventHandler
  176. public void openDoors(PlayerInteractEvent e) {
  177.  
  178. if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
  179.  
  180. Player p = e.getPlayer();
  181. BlockState blockData = e.getClickedBlock().getState();
  182.  
  183. switch (e.getClickedBlock().getType()) {
  184. case IRON_DOOR_BLOCK: {
  185. Door downDoor = (Door) blockData.getData();
  186. WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
  187.  
  188. if (wb != null && !wb.isOwner(p.getName()) && p.getGameMode() != GameMode.CREATIVE) {
  189. Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать эту дверь.");
  190. break;
  191. }
  192.  
  193. if (p.isSneaking()) break;
  194. if (p.getGameMode() == GameMode.SPECTATOR) break;
  195.  
  196. p.getWorld().playSound(e.getClickedBlock().getLocation(), Sound.DOOR_OPEN, 1, 1);
  197.  
  198. if (downDoor.isTopHalf()) {
  199. BlockState stateUpDoor = e.getClickedBlock().getRelative(BlockFace.DOWN).getState();
  200. Door upDoor = (Door) stateUpDoor.getData();
  201. upDoor.setOpen(!upDoor.isOpen());
  202. stateUpDoor.update();
  203. break;
  204. }
  205.  
  206. downDoor.setOpen(!downDoor.isOpen());
  207. blockData.update();
  208. break;
  209. }
  210.  
  211. case IRON_TRAPDOOR: {
  212. TrapDoor trapDoor = (TrapDoor) blockData.getData();
  213. WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
  214.  
  215. if (wb != null && !wb.isOwner(p.getName()) && p.getGameMode() != GameMode.CREATIVE) {
  216. Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать этот люк.");
  217. break;
  218. }
  219.  
  220. if (p.isSneaking()) break;
  221.  
  222. trapDoor.setOpen(!trapDoor.isOpen());
  223. blockData.update();
  224. p.getWorld().playSound(e.getClickedBlock().getLocation(), Sound.DOOR_OPEN, 1, 1);
  225. }
  226.  
  227. case SPRUCE_DOOR: {
  228. WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
  229.  
  230. if (wb == null || wb.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) break;
  231.  
  232. Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать эту дверь.");
  233. e.setCancelled(true);
  234. break;
  235. }
  236.  
  237. case TRAP_DOOR: {
  238. WorkbenchClass wb = WorkbenchClass.wbMap.get(e.getClickedBlock().getLocation());
  239.  
  240. if (wb == null || wb.isOwner(p.getName()) || p.getGameMode() == GameMode.CREATIVE) break;
  241.  
  242. Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут открывать этот люк.");
  243. e.setCancelled(true);
  244. break;
  245. }
  246. }
  247. }
  248.  
  249. private void upgradeConstruction(Player p, Location location, Material material, int data, PlayerInteractEvent e) {
  250.  
  251. if (WorkbenchClass.wbMap.get(location) != null && !WorkbenchClass.wbMap.get(location).isOwner(p.getName())) {
  252. Utils.sendBarMessage(p, "&7Только &cавторизованные &7в шкафу &cигроки &7могут улучшать конструкции.");
  253. e.setCancelled(true);
  254. return;
  255. }
  256.  
  257. location.getBlock().setType(p.getItemInHand().getType());
  258. location.getBlock().setData((byte) data);
  259. Utils.removeItemFromHand(p);
  260. e.setCancelled(true);
  261. Utils.sendBarMessage(p, "&7Я &aулучшил &7конструкцию.");
  262.  
  263. for (Entity entity : p.getWorld().getNearbyEntities(e.getClickedBlock().getLocation(), 10, 10, 10)) {
  264. if (entity.getType() != EntityType.PLAYER) continue;
  265. Player pl = (Player) entity;
  266. pl.playSound(e.getClickedBlock().getLocation(), Sound.ANVIL_BREAK, 1, 1);
  267. pl.playSound(e.getClickedBlock().getLocation(), Sound.ZOMBIE_WOODBREAK, 1, 1);
  268. Utils.crackEffect(e.getClickedBlock().getLocation().add(0.5D, 0, 0.5D), e.getMaterial(), 100);
  269. }
  270. }
  271. }
Add Comment
Please, Sign In to add comment