Advertisement
Guest User

Untitled

a guest
Aug 6th, 2019
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.32 KB | None | 0 0
  1. package me.bradleysteele.worldborderpatches.worker;
  2.  
  3. import com.google.common.collect.Lists;
  4. import me.bradleysteele.commons.register.worker.BWorker;
  5. import me.bradleysteele.commons.resource.Resource;
  6. import me.bradleysteele.worldborderpatches.resource.ResourceType;
  7. import me.bradleysteele.worldborderpatches.resource.Resources;
  8. import me.bradleysteele.worldborderpatches.resource.yml.Config;
  9. import org.bukkit.*;
  10. import org.bukkit.block.Block;
  11. import org.bukkit.entity.Player;
  12. import org.bukkit.event.EventHandler;
  13. import org.bukkit.event.block.*;
  14. import org.bukkit.event.entity.CreatureSpawnEvent;
  15. import org.bukkit.event.entity.EntityChangeBlockEvent;
  16. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  17. import org.bukkit.event.entity.EntityExplodeEvent;
  18. import org.bukkit.event.player.PlayerInteractEvent;
  19. import org.bukkit.event.player.PlayerMoveEvent;
  20. import org.bukkit.event.player.PlayerTeleportEvent;
  21.  
  22. import java.util.Iterator;
  23. import java.util.List;
  24.  
  25. /**
  26. * @author Bradley Steele
  27. */
  28. public class WorkerPatches extends BWorker {
  29.  
  30. private static final WorkerPatches instance = new WorkerPatches();
  31.  
  32. public static WorkerPatches get() {
  33. return instance;
  34. }
  35.  
  36. private final List<Material> FALLING_BLOCKS = Lists.newArrayList(Material.SAND, Material.GRAVEL);
  37.  
  38. private Resource netherResource;
  39. private BorderContainer netherBorder;
  40.  
  41. private WorkerPatches() {
  42. }
  43.  
  44. @Override
  45. public void onRegister() {
  46. // netherResource = Resources.get().getResource(ResourceType.NETHER);
  47. // netherBorder = new BorderContainer(netherResource.getDouble("centerX"), netherResource.getDouble("centerZ"), netherResource.getDouble("size", 100000000));
  48. }
  49.  
  50. @EventHandler
  51. public void onPlayerMove(PlayerMoveEvent event) {
  52. if (isOutsideBorder(event.getTo()) && !isOutsideBorder(event.getFrom())) {
  53. event.setTo(event.getFrom());
  54. }
  55. }
  56.  
  57. @EventHandler
  58. public void onPlayerTeleport(PlayerTeleportEvent event) {
  59. if (isOutsideBorder(event.getTo()) && !isOutsideBorder(event.getFrom())) {
  60. event.setCancelled(true);
  61. event.setTo(event.getFrom());
  62. }
  63. }
  64.  
  65. @EventHandler
  66. public void onBlockBreak(BlockBreakEvent event) {
  67. if (Config.BLOCK_BREAK.getAsBoolean()) {
  68. event.setCancelled(isOutsideBorder(event.getBlock().getLocation()));
  69. }
  70. }
  71.  
  72. @EventHandler
  73. public void BlockPlaceEvent(BlockPlaceEvent event) {
  74. location.getWorld().spawnFallingBlock(location, Material.Bedrock, blockData);
  75.  
  76. if (event.getBlock().getWorld().getName().equals(plugin.getConfig().getString("space"))) {
  77. if (event.getBlock().getType().equals(Material.SAND) || event.getBlock().getType().equals(Material.WEB)) {
  78.  
  79. Block block = event.getBlock();
  80. Location loc = block.getLocation().add(0, -1, 0);
  81. if (loc.getBlock().getType().equals(Material.AIR) || event.getBlock().getType().equals(Material.WEB))) {
  82. loc.getBlock().setType(Material.STONE);
  83.  
  84. plugin.getServer().getScheduler().runTaskLater(plugin, new Runnable() {
  85. public void run() {
  86. loc.getBlock().setType(Material.AIR);
  87. }
  88. }, 1L);
  89.  
  90. }
  91.  
  92. }
  93.  
  94. }
  95.  
  96. }
  97.  
  98. @EventHandler
  99. public void onEntityChangeBlock(EntityChangeBlockEvent event) {
  100. Material material = e.getBlock().getType();
  101.  
  102. if (material == Material.SAND && e.getEntityType() == EntityType.FALLING_BLOCK){
  103. e.getEntity().remove();
  104. }
  105. }
  106.  
  107. private void handleFallingBlock(Block block) {
  108. Material type = block.getType();
  109. Block current = block;
  110. Block next;
  111.  
  112. for (int i = block.getY(); i > 0; i--) {
  113. next = current.getRelative(0, -1, 0);
  114.  
  115. /*if (isPlayerAt(next.getWorld(), next.getX(), next.getY(), next.getZ())) {
  116. event.setCancelled(true);
  117. return;
  118. }*/
  119.  
  120. if (next.getType() != Material.AIR) {
  121. block.setType(Material.AIR);
  122. current.setType(type);
  123. break;
  124. } else {
  125. current = next;
  126. }
  127. }
  128. }
  129.  
  130. private boolean isPlayerAt(World world, int x, int y, int z) {
  131. for (Player player : world.getPlayers()) {
  132. if (player.getLocation().getBlockX() == x && player.getLocation().getBlockY() == y && player.getLocation().getBlockZ() == z) {
  133. return true;
  134. }
  135. }
  136.  
  137. return false;
  138. }
  139.  
  140. @EventHandler
  141. public void onBlockFromTo(BlockFromToEvent event) {
  142. if (Config.BLOCK_FROM_TO.getAsBoolean()) {
  143. event.setCancelled(isOutsideBorder(event.getToBlock().getLocation()));
  144. }
  145. }
  146.  
  147. @EventHandler
  148. public void onEntityExplode(EntityExplodeEvent event) {
  149. if (Config.EXPLOSIONS.getAsBoolean()) {
  150. if (isOutsideBorder(event.getLocation())) {
  151. event.setCancelled(true);
  152. } else {
  153. handleIterator(event.blockList().iterator());
  154. }
  155. }
  156. }
  157.  
  158. @EventHandler
  159. public void onBlockExplode(BlockExplodeEvent event) {
  160. if (Config.EXPLOSIONS.getAsBoolean()) {
  161. if (isOutsideBorder(event.getBlock().getLocation())) {
  162. event.setCancelled(true);
  163. } else {
  164. handleIterator(event.blockList().iterator());
  165. }
  166. }
  167. }
  168.  
  169. @EventHandler
  170. public void onPlayerInteract(PlayerInteractEvent event) {
  171. if (Config.INTERACT.getAsBoolean()) {
  172. if (event.hasBlock() && isOutsideBorder(event.getClickedBlock().getLocation())) {
  173. event.setCancelled(true);
  174. }
  175. }
  176. }
  177.  
  178. @EventHandler
  179. public void onCreatureSpawn(CreatureSpawnEvent event) {
  180. if (Config.CREATURE_SPAWN.getAsBoolean()) {
  181. event.setCancelled(isOutsideBorder(event.getLocation()));
  182. }
  183. }
  184.  
  185. @EventHandler
  186. public void onBlockPiston(BlockPistonExtendEvent event) {
  187. if (Config.PISTON.getAsBoolean()) {
  188. for (Block block : event.getBlocks()) {
  189. if (isOutsideBorder(block.getRelative(event.getDirection()).getLocation())) {
  190. event.setCancelled(true);
  191. return;
  192. }
  193. }
  194. }
  195. }
  196.  
  197. @EventHandler
  198. public void onBlockUpdate(EntityChangeBlockEvent event) {
  199. if (Config.BLOCK_UPDATE.getAsBoolean()) {
  200. event.setCancelled(isOutsideBorder(event.getBlock().getLocation()));
  201. }
  202. }
  203.  
  204. @EventHandler
  205. public void onEntityDamage(EntityDamageByEntityEvent event) {
  206. if (Config.ENTITY_DAMAGE.getAsBoolean()) {
  207. if (event.getDamager() instanceof Player) {
  208. event.setCancelled(isOutsideBorder(event.getEntity().getLocation()));
  209. }
  210. }
  211. }
  212.  
  213. public BorderContainer getNetherBorder() {
  214. return netherBorder;
  215. }
  216.  
  217. public void setNetherBorder(double centerX, double centerZ, double size) {
  218. netherBorder.centerX = centerX;
  219. netherBorder.centerZ = centerZ;
  220. netherBorder.size = size;
  221.  
  222. // Save resource
  223. netherResource.set("centerX", centerX);
  224. netherResource.set("centerZ", centerZ);
  225. netherResource.set("size", size);
  226. plugin.getResourceProvider().saveResource(netherResource);
  227. }
  228.  
  229. private void handleIterator(Iterator<Block> iterator) {
  230. Block block;
  231.  
  232. while (iterator.hasNext()) {
  233. block = iterator.next();
  234.  
  235. if (isOutsideBorder(block.getLocation())) {
  236. iterator.remove();
  237. }
  238. }
  239. }
  240.  
  241. private boolean isOutsideBorder(Location location, int buffer) {
  242. BorderContainer border = new BorderContainer(location.getWorld().getWorldBorder());
  243.  
  244. /*if (location.getWorld().getEnvironment() == World.Environment.NETHER) {
  245. border = netherBorder;
  246. } else {
  247. border = new BorderContainer(location.getWorld().getWorldBorder());
  248. }*/
  249.  
  250. double size = (border.size / 2) - buffer;
  251. double x = location.getBlockX() - (border.centerX - 0.5D);
  252. double z = location.getBlockZ() - (border.centerZ - 0.5D);
  253.  
  254. return ((x > size || (-x) > size) || (z > size || (-z) > size));
  255. }
  256.  
  257. private boolean isOutsideBorder(Location location) {
  258. return isOutsideBorder(location, 0);
  259. }
  260.  
  261. public class BorderContainer {
  262.  
  263. double centerX;
  264. double centerZ;
  265. double size;
  266.  
  267. BorderContainer(double centerX, double centerZ, double size) {
  268. this.centerX = centerX;
  269. this.centerZ = centerZ;
  270. this.size = size;
  271. }
  272.  
  273. BorderContainer(WorldBorder border) {
  274. this(border.getCenter().getX(), border.getCenter().getZ(), border.getSize());
  275. }
  276.  
  277. public double getCenterX() {
  278. return centerX;
  279. }
  280.  
  281. public double getCenterZ() {
  282. return centerZ;
  283. }
  284.  
  285. public double getSize() {
  286. return size;
  287. }
  288. }
  289. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement