Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.32 KB | None | 0 0
  1. package com.visioncoding.party.game.gridhopper;
  2.  
  3. import java.util.Random;
  4.  
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.Effect;
  7. import org.bukkit.GameMode;
  8. import org.bukkit.Location;
  9. import org.bukkit.Material;
  10. import org.bukkit.Sound;
  11. import org.bukkit.block.BlockFace;
  12. import org.bukkit.entity.Bat;
  13. import org.bukkit.entity.EntityType;
  14. import org.bukkit.entity.Player;
  15.  
  16. import com.visioncoding.party.SpikyParty;
  17. import com.visioncoding.party.game.Arcade;
  18. import com.visioncoding.party.game.Game;
  19. import com.visioncoding.party.game.GameType;
  20. import com.visioncoding.party.game.Stage;
  21. import com.visioncoding.party.game.waiting.Waiting;
  22. import com.visioncoding.party.managers.Manager;
  23.  
  24. public class GridHopper implements Arcade{
  25.  
  26. private Game game;
  27. private Location center;
  28.  
  29. public GridHopper(Game game, Location center) {
  30. this.setGame(game);
  31. this.setCenter(center);
  32. game.setType(GameType.GRID_HOPPER);
  33. game.setStage(Stage.IN_GAME);
  34. game.setDisplayName("Grid Hopper");
  35. for (Player player : Bukkit.getOnlinePlayers()) {
  36. game.addPlayer(player);;
  37. Location loc = new Location(center.getWorld(), center.getX(), center.getY(), center.getZ());
  38. player.teleport(loc.add(randomNum(-3, 3), 3, randomNum(-3, 3)));
  39. player.setGameMode(GameMode.SURVIVAL);
  40. }
  41. createHoles();
  42. begin();
  43. }
  44.  
  45. private int wave = 1;
  46.  
  47. public void begin() {
  48. sendWaveDelay();
  49. }
  50.  
  51. public void createHoles() {
  52. Location loc = new Location(center.getWorld(), center.getX() + 2, center.getY(), center.getZ() + 2);
  53. loc.getBlock().setType(Material.AIR);
  54. loc.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
  55. loc.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
  56. loc.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
  57. loc.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.EXPLOSION_LARGE, 0);
  58.  
  59. loc.getBlock().getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  60. loc.getBlock().getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  61. loc.getBlock().getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  62. loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  63.  
  64. Location loc1 = new Location(center.getWorld(), center.getX() - 3, center.getY(), center.getZ() - 3);
  65. loc1.getBlock().setType(Material.AIR);
  66. loc1.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
  67. loc1.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
  68. loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
  69. loc1.getWorld().playEffect(loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.EXPLOSION_LARGE, 0);
  70.  
  71. loc1.getBlock().getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  72. loc1.getBlock().getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  73. loc1.getBlock().getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  74. loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
  75. center.getWorld().playSound(center, Sound.EXPLODE, 5f, 0f);
  76. }
  77.  
  78. private boolean ended = false;
  79.  
  80. public void end(String winner, String loser) {
  81. ended = true;
  82. wave = 1;
  83. times = 0;
  84. for (Player player : Bukkit.getOnlinePlayers()) {
  85. game.getPlayers().add(player.getName());
  86. }
  87. for (String playerName : game.getPlayers()) {
  88. Player player = Bukkit.getPlayerExact(playerName);
  89. Manager.getInstance().sendTitle(player, "All &e" + loser + " &fdefeated!", winner + " win!", 10, 20 * 5, 10);
  90. }
  91. game.setStage(Stage.IN_LOBBY);
  92. game.setDisplayName("Waiting");
  93. game.setType(GameType.WAITING);
  94. new Waiting(this.game, this.center);
  95. replaceHoles();
  96.  
  97. }
  98.  
  99. public void replaceHoles() {
  100. Location loc = new Location(center.getWorld(), center.getX() + 2, center.getY() - 1, center.getZ() + 2);
  101.  
  102. loc.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.FIREWORKS_SPARK, 0);
  103.  
  104. loc.getBlock().setType(Material.AIR);
  105. loc.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
  106. loc.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
  107. loc.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
  108.  
  109. Location loc1 = new Location(center.getWorld(), center.getX() - 3, center.getY() - 1, center.getZ() - 3);
  110. loc1.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.FIREWORKS_SPARK, 0);
  111.  
  112. loc1.getBlock().setType(Material.AIR);
  113. loc1.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
  114. loc1.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
  115. loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
  116. center.getWorld().playSound(center, Sound.ZOMBIE_WOODBREAK, 5f, 0f);
  117. }
  118.  
  119. private void sendWaveDelay() {
  120. if (ended)
  121. return;
  122. SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
  123. public void run() {
  124. for (String playerName : game.getPlayers()) {
  125. Player player = Bukkit.getPlayerExact(playerName);
  126. Manager.getInstance().sendTitle(player, "Wave " + wave + " in", "5 seconds", 10, 20 * 2, 10);
  127. }
  128. }
  129. }, 20L * 2L);
  130. SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
  131. public void run() {
  132. sendWave();
  133. }
  134. }, 20L * 7L);
  135. }
  136.  
  137. private void sendWave() {
  138. if (ended)
  139. return;
  140. delaySubWave(5 * wave, 20L * randomNum(2,5));
  141. }
  142.  
  143. int times = 0;
  144.  
  145. private void delaySubWave(final int amount, final long time) {
  146. if (ended)
  147. return;
  148. SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
  149. public void run() {
  150. int num = randomNum(1, 4);
  151. if (num == 1) {
  152. int i = randomNum(1, 2);
  153. Location newLoc = new Location(center.getWorld(), center.getX(), center.getY() + i, center.getBlockZ() + 11);
  154. if (times < amount)
  155. if (i == 1)
  156. sendBeam("north", newLoc, 10 - wave, (byte) 11);
  157. else sendBeam("north", newLoc, 10 - wave, (byte) 14);
  158. } else if (num == 2) {
  159. int i = randomNum(1, 2);
  160. Location newLoc = new Location(center.getWorld(), center.getX() - 11, center.getY() + i, center.getBlockZ());
  161. if (times < amount)
  162. if (i == 1)
  163. sendBeam("east", newLoc, 10 - wave, (byte) 11);
  164. else sendBeam("east", newLoc, 10 - wave, (byte) 14);
  165. } else if (num == 3) {
  166. int i = randomNum(1, 2);
  167. Location newLoc = new Location(center.getWorld(), center.getX(), center.getY() + i, center.getBlockZ() - 11);
  168. if (times < amount)
  169. if (i == 1)
  170. sendBeam("south", newLoc, 10 - wave, (byte) 11);
  171. else sendBeam("south", newLoc, 10 - wave, (byte) 14);
  172. } else if (num == 4) {
  173. int i = randomNum(1, 2);
  174. Location newLoc = new Location(center.getWorld(), center.getX() + 11, center.getY() + i, center.getBlockZ());
  175. if (times < amount)
  176. if (i == 1)
  177. sendBeam("west", newLoc, 10 - wave, (byte) 11);
  178. else sendBeam("west", newLoc, 10 - wave, (byte) 14);
  179. }
  180. if (times < amount) {
  181. if (!ended)
  182. center.getWorld().playSound(center, Sound.NOTE_PIANO, 6f, 0f);
  183. }
  184. if (times < amount + 2) {
  185. times++;
  186. delaySubWave(amount, time);
  187. } else {
  188. if (!(wave > 2)) {
  189. wave++;
  190. times = 0;
  191. sendWaveDelay();
  192. center.getWorld().playSound(center, Sound.LEVEL_UP, 5f, 0f);
  193. } else {
  194. end("Players", "Lazers");
  195. }
  196. }
  197. }
  198. }, time);
  199. }
  200.  
  201. private void sendBeam(String direction, Location loc, int speed, byte num) {
  202. if (ended)
  203. return;
  204. if (direction == "north" || direction == "south") {
  205. for (int i = 0; (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX() + i, loc.getBlockY(), loc.getBlockZ())).getType() == Material.AIR || loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX() + i, loc.getBlockY(), loc.getBlockZ())).getType() == Material.STAINED_GLASS) && i < 11; i++) {
  206. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setTypeIdAndData(95, num, true);
  207. }
  208. for (int i = 1; (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX() - i, loc.getBlockY(), loc.getBlockZ())).getType() == Material.AIR || loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX() - i, loc.getBlockY(), loc.getBlockZ())).getType() == Material.STAINED_GLASS) && i < 11; i++) {
  209. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setTypeIdAndData(95, num, true);
  210. }
  211. Location loc1 = null;
  212. if (direction == "north")
  213. loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + .5);
  214. else if (direction == "south")
  215. loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - .5);
  216. if (containsPlayer(loc1, 11.0, 0.5) != null) {
  217. killPlayer(containsPlayer(loc, 11.0, 0.5));
  218. }
  219. deleteBlocks(direction, loc, speed, num);
  220. } else if (direction == "east" || direction == "west") {
  221. for (int i = 0; (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()+ i)).getType() == Material.AIR || loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ() + i)).getType() == Material.STAINED_GLASS) && i < 11; i++) {
  222. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ()+ i)).setTypeIdAndData(95, num, true);
  223. }
  224. for (int i = 1; (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ() - i)).getType() == Material.AIR || loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ() - i)).getType() == Material.STAINED_GLASS) && i < 11; i++) {
  225. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setTypeIdAndData(95, num, true);
  226. }
  227. Location loc1 = null;
  228. if (direction == "east")
  229. loc1 = new Location(loc.getWorld(), loc.getX() - .5, loc.getY(), loc.getZ());
  230. else if (direction == "west")
  231. loc1 = new Location(loc.getWorld(), loc.getX() + .5, loc.getY(), loc.getZ());
  232. if (containsPlayer(loc1, 0.5, 11.0) != null) {
  233. killPlayer(containsPlayer(loc, 0.5, 11.0));
  234. }
  235. deleteBlocks(direction, loc, speed, num);
  236. } else
  237. sendBeam("north", loc, speed, num);
  238. }
  239.  
  240. private void killPlayer(Player player) {
  241. if (player == null) return;
  242. player.damage(0.0);
  243. player.teleport(player.getLocation().add(0, 5, 0));
  244. game.removePlayer(player);;
  245. Manager.getInstance().sendTitle(player, "You have died to a", "&6Lazer!", 10, 20, 10);
  246. player.setGameMode(GameMode.SPECTATOR);
  247. if (game.getPlayers().size() == 0) {
  248. end("Lazers", "Players");
  249. }
  250. }
  251.  
  252. public Player containsPlayer(Location loc, double x, double z) {
  253. Bat b = (Bat) loc.getWorld().spawnEntity(loc, EntityType.BAT);
  254. for (Player player : Bukkit.getOnlinePlayers())
  255. if (b.getNearbyEntities(x, 0.0, z).contains(player)) {
  256. b.remove();
  257. return player;
  258. }
  259. b.remove();
  260. return null;
  261. }
  262.  
  263. private void deleteBlocks(final String direction, final Location loc, final int speed, final byte num) {
  264. Bukkit.getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
  265. public void run() {
  266. if (direction == "north") {
  267. for (int i = 0; i < 11; i++) {
  268. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS)
  269. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setType(Material.AIR);
  270. }
  271. for (int i = 1; i < 11; i++) {
  272. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX()- i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS) {
  273. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setType(Material.AIR);
  274. }
  275. }
  276. if (loc.add(0, 0, -1).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
  277. sendBeam(direction, loc, speed, num);
  278. } else if (direction == "east") {
  279. for (int i = 0; i < 11; i++) {
  280. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).getType() == Material.STAINED_GLASS)
  281. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).setType(Material.AIR);
  282. }
  283. for (int i = 1; i < 11; i++) {
  284. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).getType() == Material.STAINED_GLASS)
  285. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setType(Material.AIR);
  286. }
  287. if (loc.add(1, 0, 0).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
  288. sendBeam(direction, loc, speed, num);
  289. } else if (direction == "south") {
  290. for (int i = 0; i < 11; i++) {
  291. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS) {
  292. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setType(Material.AIR);
  293. }
  294. }
  295. for (int i = 1; i < 11; i++) {
  296. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS)
  297. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setType(Material.AIR);
  298. }
  299. if (loc.add(0, 0, 1).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
  300. sendBeam(direction, loc, speed, num);
  301. } else if (direction == "west") {
  302. for (int i = 0; i < 11; i++) {
  303. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).getType() == Material.STAINED_GLASS)
  304. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).setType(Material.AIR);
  305. }
  306. for (int i = 1; i < 11; i++) {
  307. if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).getType() == Material.STAINED_GLASS)
  308. loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setType(Material.AIR);
  309. }
  310. if (loc.add(-1, 0, 0).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
  311. sendBeam(direction, loc, speed, num);
  312. } else
  313. sendBeam("north", loc, speed, num);
  314. }
  315. }, speed);
  316. }
  317.  
  318. private int randomNum(int lower, int upper) {
  319. Random random = new Random();
  320. int number = random.nextInt((upper - lower) + 1) + lower;
  321. return number;
  322. }
  323.  
  324. public Location getCenter() {
  325. return center;
  326. }
  327.  
  328. public void setCenter(Location center) {
  329. this.center = center;
  330. }
  331.  
  332. public Game getGame() {
  333. return game;
  334. }
  335.  
  336. public void setGame(Game game) {
  337. this.game = game;
  338. }
  339.  
  340. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement