Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.visioncoding.party.game.gridhopper;
- import java.util.Random;
- import org.bukkit.Bukkit;
- import org.bukkit.Effect;
- import org.bukkit.GameMode;
- import org.bukkit.Location;
- import org.bukkit.Material;
- import org.bukkit.Sound;
- import org.bukkit.block.BlockFace;
- import org.bukkit.entity.Bat;
- import org.bukkit.entity.EntityType;
- import org.bukkit.entity.Player;
- import com.visioncoding.party.SpikyParty;
- import com.visioncoding.party.game.Arcade;
- import com.visioncoding.party.game.Game;
- import com.visioncoding.party.game.GameType;
- import com.visioncoding.party.game.Stage;
- import com.visioncoding.party.game.waiting.Waiting;
- import com.visioncoding.party.managers.Manager;
- public class GridHopper implements Arcade{
- private Game game;
- private Location center;
- public GridHopper(Game game, Location center) {
- this.setGame(game);
- this.setCenter(center);
- game.setType(GameType.GRID_HOPPER);
- game.setStage(Stage.IN_GAME);
- game.setDisplayName("Grid Hopper");
- for (Player player : Bukkit.getOnlinePlayers()) {
- game.addPlayer(player);;
- Location loc = new Location(center.getWorld(), center.getX(), center.getY(), center.getZ());
- player.teleport(loc.add(randomNum(-3, 3), 3, randomNum(-3, 3)));
- player.setGameMode(GameMode.SURVIVAL);
- }
- createHoles();
- begin();
- }
- private int wave = 1;
- public void begin() {
- sendWaveDelay();
- }
- public void createHoles() {
- Location loc = new Location(center.getWorld(), center.getX() + 2, center.getY(), center.getZ() + 2);
- loc.getBlock().setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
- loc.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.EXPLOSION_LARGE, 0);
- loc.getBlock().getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc.getBlock().getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc.getBlock().getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- Location loc1 = new Location(center.getWorld(), center.getX() - 3, center.getY(), center.getZ() - 3);
- loc1.getBlock().setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
- loc1.getWorld().playEffect(loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.EXPLOSION_LARGE, 0);
- loc1.getBlock().getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc1.getBlock().getRelative(BlockFace.EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc1.getBlock().getRelative(BlockFace.SOUTH).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).getRelative(BlockFace.DOWN).setTypeIdAndData(159, (byte) 14, true);
- center.getWorld().playSound(center, Sound.EXPLODE, 5f, 0f);
- }
- private boolean ended = false;
- public void end(String winner, String loser) {
- ended = true;
- wave = 1;
- times = 0;
- for (Player player : Bukkit.getOnlinePlayers()) {
- game.getPlayers().add(player.getName());
- }
- for (String playerName : game.getPlayers()) {
- Player player = Bukkit.getPlayerExact(playerName);
- Manager.getInstance().sendTitle(player, "All &e" + loser + " &fdefeated!", winner + " win!", 10, 20 * 5, 10);
- }
- game.setStage(Stage.IN_LOBBY);
- game.setDisplayName("Waiting");
- game.setType(GameType.WAITING);
- new Waiting(this.game, this.center);
- replaceHoles();
- }
- public void replaceHoles() {
- Location loc = new Location(center.getWorld(), center.getX() + 2, center.getY() - 1, center.getZ() + 2);
- loc.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.FIREWORKS_SPARK, 0);
- loc.getBlock().setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
- loc.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
- Location loc1 = new Location(center.getWorld(), center.getX() - 3, center.getY() - 1, center.getZ() - 3);
- loc1.getWorld().playEffect(loc.getBlock().getRelative(BlockFace.SOUTH_EAST).getLocation(), Effect.FIREWORKS_SPARK, 0);
- loc1.getBlock().setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.EAST).setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.SOUTH).setType(Material.AIR);
- loc1.getBlock().getRelative(BlockFace.SOUTH_EAST).setType(Material.AIR);
- center.getWorld().playSound(center, Sound.ZOMBIE_WOODBREAK, 5f, 0f);
- }
- private void sendWaveDelay() {
- if (ended)
- return;
- SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
- public void run() {
- for (String playerName : game.getPlayers()) {
- Player player = Bukkit.getPlayerExact(playerName);
- Manager.getInstance().sendTitle(player, "Wave " + wave + " in", "5 seconds", 10, 20 * 2, 10);
- }
- }
- }, 20L * 2L);
- SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
- public void run() {
- sendWave();
- }
- }, 20L * 7L);
- }
- private void sendWave() {
- if (ended)
- return;
- delaySubWave(5 * wave, 20L * randomNum(2,5));
- }
- int times = 0;
- private void delaySubWave(final int amount, final long time) {
- if (ended)
- return;
- SpikyParty.get().getServer().getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
- public void run() {
- int num = randomNum(1, 4);
- if (num == 1) {
- int i = randomNum(1, 2);
- Location newLoc = new Location(center.getWorld(), center.getX(), center.getY() + i, center.getBlockZ() + 11);
- if (times < amount)
- if (i == 1)
- sendBeam("north", newLoc, 10 - wave, (byte) 11);
- else sendBeam("north", newLoc, 10 - wave, (byte) 14);
- } else if (num == 2) {
- int i = randomNum(1, 2);
- Location newLoc = new Location(center.getWorld(), center.getX() - 11, center.getY() + i, center.getBlockZ());
- if (times < amount)
- if (i == 1)
- sendBeam("east", newLoc, 10 - wave, (byte) 11);
- else sendBeam("east", newLoc, 10 - wave, (byte) 14);
- } else if (num == 3) {
- int i = randomNum(1, 2);
- Location newLoc = new Location(center.getWorld(), center.getX(), center.getY() + i, center.getBlockZ() - 11);
- if (times < amount)
- if (i == 1)
- sendBeam("south", newLoc, 10 - wave, (byte) 11);
- else sendBeam("south", newLoc, 10 - wave, (byte) 14);
- } else if (num == 4) {
- int i = randomNum(1, 2);
- Location newLoc = new Location(center.getWorld(), center.getX() + 11, center.getY() + i, center.getBlockZ());
- if (times < amount)
- if (i == 1)
- sendBeam("west", newLoc, 10 - wave, (byte) 11);
- else sendBeam("west", newLoc, 10 - wave, (byte) 14);
- }
- if (times < amount) {
- if (!ended)
- center.getWorld().playSound(center, Sound.NOTE_PIANO, 6f, 0f);
- }
- if (times < amount + 2) {
- times++;
- delaySubWave(amount, time);
- } else {
- if (!(wave > 2)) {
- wave++;
- times = 0;
- sendWaveDelay();
- center.getWorld().playSound(center, Sound.LEVEL_UP, 5f, 0f);
- } else {
- end("Players", "Lazers");
- }
- }
- }
- }, time);
- }
- private void sendBeam(String direction, Location loc, int speed, byte num) {
- if (ended)
- return;
- if (direction == "north" || direction == "south") {
- 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++) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setTypeIdAndData(95, num, true);
- }
- 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++) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setTypeIdAndData(95, num, true);
- }
- Location loc1 = null;
- if (direction == "north")
- loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + .5);
- else if (direction == "south")
- loc1 = new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - .5);
- if (containsPlayer(loc1, 11.0, 0.5) != null) {
- killPlayer(containsPlayer(loc, 11.0, 0.5));
- }
- deleteBlocks(direction, loc, speed, num);
- } else if (direction == "east" || direction == "west") {
- 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++) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ()+ i)).setTypeIdAndData(95, num, true);
- }
- 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++) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setTypeIdAndData(95, num, true);
- }
- Location loc1 = null;
- if (direction == "east")
- loc1 = new Location(loc.getWorld(), loc.getX() - .5, loc.getY(), loc.getZ());
- else if (direction == "west")
- loc1 = new Location(loc.getWorld(), loc.getX() + .5, loc.getY(), loc.getZ());
- if (containsPlayer(loc1, 0.5, 11.0) != null) {
- killPlayer(containsPlayer(loc, 0.5, 11.0));
- }
- deleteBlocks(direction, loc, speed, num);
- } else
- sendBeam("north", loc, speed, num);
- }
- private void killPlayer(Player player) {
- if (player == null) return;
- player.damage(0.0);
- player.teleport(player.getLocation().add(0, 5, 0));
- game.removePlayer(player);;
- Manager.getInstance().sendTitle(player, "You have died to a", "&6Lazer!", 10, 20, 10);
- player.setGameMode(GameMode.SPECTATOR);
- if (game.getPlayers().size() == 0) {
- end("Lazers", "Players");
- }
- }
- public Player containsPlayer(Location loc, double x, double z) {
- Bat b = (Bat) loc.getWorld().spawnEntity(loc, EntityType.BAT);
- for (Player player : Bukkit.getOnlinePlayers())
- if (b.getNearbyEntities(x, 0.0, z).contains(player)) {
- b.remove();
- return player;
- }
- b.remove();
- return null;
- }
- private void deleteBlocks(final String direction, final Location loc, final int speed, final byte num) {
- Bukkit.getScheduler().scheduleSyncDelayedTask(SpikyParty.get(), new Runnable() {
- public void run() {
- if (direction == "north") {
- for (int i = 0; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setType(Material.AIR);
- }
- for (int i = 1; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX()- i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setType(Material.AIR);
- }
- }
- if (loc.add(0, 0, -1).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
- sendBeam(direction, loc, speed, num);
- } else if (direction == "east") {
- for (int i = 0; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).setType(Material.AIR);
- }
- for (int i = 1; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setType(Material.AIR);
- }
- if (loc.add(1, 0, 0).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
- sendBeam(direction, loc, speed, num);
- } else if (direction == "south") {
- for (int i = 0; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS) {
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() + i, loc.getY(), loc.getZ())).setType(Material.AIR);
- }
- }
- for (int i = 1; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX() - i, loc.getY(), loc.getZ())).setType(Material.AIR);
- }
- if (loc.add(0, 0, 1).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
- sendBeam(direction, loc, speed, num);
- } else if (direction == "west") {
- for (int i = 0; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() + i)).setType(Material.AIR);
- }
- for (int i = 1; i < 11; i++) {
- if (loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).getType() == Material.STAINED_GLASS)
- loc.getWorld().getBlockAt(new Location(loc.getWorld(), loc.getX(), loc.getY(), loc.getZ() - i)).setType(Material.AIR);
- }
- if (loc.add(-1, 0, 0).getBlock().getType() == Material.AIR || loc.getBlock().getType() == Material.STAINED_GLASS)
- sendBeam(direction, loc, speed, num);
- } else
- sendBeam("north", loc, speed, num);
- }
- }, speed);
- }
- private int randomNum(int lower, int upper) {
- Random random = new Random();
- int number = random.nextInt((upper - lower) + 1) + lower;
- return number;
- }
- public Location getCenter() {
- return center;
- }
- public void setCenter(Location center) {
- this.center = center;
- }
- public Game getGame() {
- return game;
- }
- public void setGame(Game game) {
- this.game = game;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement