@Test
  public void testAlignToDistance1024x1024() throws Exception {
    Location loc = new Location(null, 1024, 0, 1024);
    assertThat(
        LocationUtil.alignToDistance(loc, 1024),
        is(new Location(null, 1024, Settings.island_height, 1024)));

    loc.setX(511.9);
    loc.setZ(512.5);
    assertThat(
        LocationUtil.alignToDistance(loc, 1024),
        is(new Location(null, 0, Settings.island_height, 1024)));

    loc.setX(1535.9);
    loc.setZ(512.5);
    assertThat(
        LocationUtil.alignToDistance(loc, 1024),
        is(new Location(null, 1024, Settings.island_height, 1024)));

    loc.setX(-511.99);
    loc.setZ(-511.99);
    assertThat(
        LocationUtil.alignToDistance(loc, 1024),
        is(new Location(null, 0, Settings.island_height, 0)));

    loc.setX(-512.01);
    loc.setZ(-512.01);
    assertThat(
        LocationUtil.alignToDistance(loc, 1024),
        is(new Location(null, -1024, Settings.island_height, -1024)));
  }
  private void connectUsingOldApi() {
    Location lastKnownGpsLocation =
        mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    Location lastKnownNetworkLocation =
        mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    Location bestLastKnownLocation = mCurrentBestLocation;
    if (lastKnownGpsLocation != null
        && LocationUtil.isBetterLocation(lastKnownGpsLocation, bestLastKnownLocation)) {
      bestLastKnownLocation = lastKnownGpsLocation;
    }
    if (lastKnownNetworkLocation != null
        && LocationUtil.isBetterLocation(lastKnownNetworkLocation, bestLastKnownLocation)) {
      bestLastKnownLocation = lastKnownNetworkLocation;
    }
    mCurrentBestLocation = bestLastKnownLocation;

    if (mLocationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)
        && mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
      mLocationManager.requestLocationUpdates(
          LocationManager.GPS_PROVIDER, FASTEST_INTERVAL_IN_MS, 0.0f, mGpsLocationListener);
    }
    if (mLocationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)
        && mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
      mLocationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, FASTEST_INTERVAL_IN_MS, 0.0f, mNetworkLocationListener);
    }
    if (bestLastKnownLocation != null) {
      Log.i(TAG, "Received last known location via old API: " + bestLastKnownLocation);
      if (mBearing != null) {
        bestLastKnownLocation.setBearing(mBearing);
      }
      mLocationCallback.handleNewLocation(bestLastKnownLocation);
    }
  }
 @Test
 public void testAlignToDistance0x0() throws Exception {
   Location loc = new Location(null, 0, 0, 0);
   assertThat(
       LocationUtil.alignToDistance(loc, 1024),
       is(new Location(null, 0, Settings.island_height, 0)));
 }
Beispiel #4
0
  @EventHandler
  public void onPlayerJoin(PlayerJoinEvent e) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);

    Player p = e.getPlayer();
    SPlayer player = new SPlayer(p);

    int blue = Team.BLUE.getPlayers().size();
    int red = Team.RED.getPlayers().size();

    p.teleport(locationUtil.deserializeLoc(locationsFile.getString("arena.lobby")));
    gameManager.setCarrying(p, 0);

    Scoreboard sb = Bukkit.getScoreboardManager().getNewScoreboard();
    org.bukkit.scoreboard.Team r = sb.registerNewTeam("red");
    r.setPrefix(Color.np("&c"));
    org.bukkit.scoreboard.Team b = sb.registerNewTeam("blue");
    b.setPrefix(Color.np("&b"));
    for (Player online : Bukkit.getOnlinePlayers()) {
      Team team = teamManager.getTeam(online);
      if (team == Team.BLUE) {
        b.addEntry(online.getName());
      } else {
        r.addEntry(online.getName());
      }
    }

    p.setScoreboard(sb);

    e.setJoinMessage(null);

    if (blue <= red) {
      player.setTeam(Team.BLUE);
    } else {
      player.setTeam(Team.RED);
    }
  }
Beispiel #5
0
  public Area getArea(Location loc) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);
    List<Area> areas = Area.getBlockSpawns();
    int i = 0;
    for (int t = 1; t < 9; t++) {
      String[] data = locationsFile.getString("arena.blockspawnareas." + t).split(" ");

      Location minimum = locationUtil.deserializeLoc(data[0]);
      Location maximum = locationUtil.deserializeLoc(data[1]);
      for (double x = minimum.getX(); x <= maximum.getX(); x++) {
        for (double y = minimum.getY(); y <= maximum.getY(); y++) {
          for (double z = minimum.getZ(); z <= maximum.getZ(); z++) {
            Location location = new Location(minimum.getWorld(), x, y, z);
            if (location.equals(loc)) {
              return areas.get(i);
            }
          }
        }
      }
      i++;
    }
    return null;
  }
Beispiel #6
0
  public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (!(sender instanceof Player)) {
      sender.sendMessage("You can't run this commands since you are not a player!");
      return false;
    }

    Player player = (Player) sender;

    if (cmd.getName().equalsIgnoreCase("ovo")) {
      if (player.hasPermission("ovo.admin")) {
        if (args.length == 1) {
          if (args[0].equalsIgnoreCase("lobby")) {
            ConfigUtil.get().setLobby(player.getLocation());
            player.sendMessage(ChatHandler.get().sendMessage("commands.lobby.success"));
            return true;
          } else if (args[0].equalsIgnoreCase("zombie")) {
            CustomSheep sheep = new CustomSheep(player.getWorld());
            sheep.setCustomName(ChatColor.GREEN + "Join the queue!");
            sheep.setCustomNameVisible(true);
            sheep.setColor(EnumColor.RED);
            Location loc = player.getLocation();
            EntityTypes.spawnEntity(sheep, loc);
            //                        ((CraftWorld) loc.getWorld()).getHandle().addEntity(sheep);
            //                        sheep.setLocation(loc.getX(), loc.getY(), loc.getZ(),
            // loc.getYaw(), loc.getPitch());
            System.out.println(LocationUtil.get().serialize(sheep.getBukkitEntity().getLocation()));
            player.sendMessage(ChatHandler.get().sendMessage("commands.zombie.success"));
            return true;
          }
        } else if (args.length == 2) {
          if (args[0].equalsIgnoreCase("createmap")) {
            String name = args[1];
            Map map = new Map(name, new ItemStack(Material.DIAMOND_SWORD), new ArrayList<Arena>());
            map.save();
            MapHandler.get().getMaps().add(map);
            player.sendMessage(
                ChatHandler.get()
                    .sendMessage("commands.createmap.success")
                    .replaceAll("%map%", name));
          } else // ovo setloc1 Dome1
          if (args[0].equalsIgnoreCase("setloc1")) {
            Arena arena = ArenaHandler.get().getArena(args[1]);
            if (arena != null) {
              Block targetBlock = player.getTargetBlock((Set<Material>) null, 6);
              if (targetBlock != null) {
                arena.setLoc1(targetBlock.getLocation());
                arena.save();
                player.sendMessage(
                    ChatColor.GREEN + "Successfully set corner 1 to the block you're looking at!");
              }
            } else {
              player.sendMessage(
                  ChatHandler.get()
                      .sendMessage("commands.spawnpoints.arena-not-found")
                      .replaceAll("%arena%", args[1]));
              return false;
            }
          } else // ovo setloc1 Dome1
          if (args[0].equalsIgnoreCase("setloc2")) {
            Arena arena = ArenaHandler.get().getArena(args[1]);
            if (arena != null) {
              Block targetBlock = player.getTargetBlock((Set<Material>) null, 6);
              if (targetBlock != null) {
                arena.setLoc2(targetBlock.getLocation());
                arena.save();
                player.sendMessage(
                    ChatColor.GREEN + "Successfully set corner 2 to the block you're looking at!");
              }
            } else {
              player.sendMessage(
                  ChatHandler.get()
                      .sendMessage("commands.spawnpoints.arena-not-found")
                      .replaceAll("%arena%", args[1]));
              return false;
            }
          }
        } else if (args.length == 3) {
          if (args[0].equalsIgnoreCase("spawnpoints")) {
            String name = args[1];
            Arena arena = ArenaHandler.get().getArena(name);
            if (arena != null) {
              if (isInt(args[2])) {
                int index = Integer.parseInt(args[2]);
                if (index == 1 || index == 2) {
                  List<Location> spawnLocs = arena.getSpawnLocs();
                  spawnLocs.add(index - 1, player.getLocation());
                  arena.setSpawnLocs(spawnLocs);
                  arena.save();
                  player.sendMessage(
                      ChatHandler.get()
                          .sendMessage("commands.spawnpoints.success")
                          .replaceAll("%index%", index + "")
                          .replaceAll("%arena%", arena.getId()));
                  return true;
                } else {
                  player.sendMessage(
                      ChatHandler.get().sendMessage("commands.spawnpoints.incorrect-index"));
                  return false;
                }
              } else {
                player.sendMessage(
                    ChatHandler.get()
                        .sendMessage("commands.spawnpoints.not-correct-index")
                        .replaceAll("%arg%", args[2]));
                return false;
              }
            } else {
              player.sendMessage(
                  ChatHandler.get()
                      .sendMessage("commands.spawnpoints.arena-not-found")
                      .replaceAll("%arena%", args[1]));
              return false;
            }
          } else if (args[0].equalsIgnoreCase("createarena")) {
            String name = args[1];
            String mapname = args[2];
            if (MapHandler.get().getByName(mapname) != null) {
              Map map = MapHandler.get().getByName(mapname);
              Arena arena = new Arena(name, new ArrayList<Location>(), null, null, map);
              map.getArenas().add(arena);
              arena.save();
              map.save();
              player.sendMessage(ChatColor.GREEN + "Successfully created arena " + name);
              ArenaHandler.get().getArenas().add(arena);
              return true;
            }
          }
        }
      } else {
        player.sendMessage(ChatHandler.get().sendMessage("commands.no-permission"));
        return false;
      }
    }

    return false;
  }
Beispiel #7
0
/**
 * Copyright by Bankras, created on 21-1-2016. Stealing and/or copying this plugin has severe
 * consequences.
 */
public class Listeners implements Listener {

  Main plugin;

  private ArrayList<String> stunned = new ArrayList<>();

  private static Location neededBlock;

  public static boolean released = false;
  public static boolean isPickedUp = false;
  public static String neededBlockMaterial = "0;0";

  public Listeners(Main main) {
    this.plugin = main;
  }

  LocationUtil locationUtil = LocationUtil.getInstance();
  TeamManager teamManager = TeamManager.getInstance();
  NexusManager nexusManager = NexusManager.getInstance();
  GameManager gameManager = GameManager.getInstance();
  BlockManager blockManager = BlockManager.getInstance();

  @EventHandler
  public void onPlayerJoin(PlayerJoinEvent e) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);

    Player p = e.getPlayer();
    SPlayer player = new SPlayer(p);

    int blue = Team.BLUE.getPlayers().size();
    int red = Team.RED.getPlayers().size();

    p.teleport(locationUtil.deserializeLoc(locationsFile.getString("arena.lobby")));
    gameManager.setCarrying(p, 0);

    Scoreboard sb = Bukkit.getScoreboardManager().getNewScoreboard();
    org.bukkit.scoreboard.Team r = sb.registerNewTeam("red");
    r.setPrefix(Color.np("&c"));
    org.bukkit.scoreboard.Team b = sb.registerNewTeam("blue");
    b.setPrefix(Color.np("&b"));
    for (Player online : Bukkit.getOnlinePlayers()) {
      Team team = teamManager.getTeam(online);
      if (team == Team.BLUE) {
        b.addEntry(online.getName());
      } else {
        r.addEntry(online.getName());
      }
    }

    p.setScoreboard(sb);

    e.setJoinMessage(null);

    if (blue <= red) {
      player.setTeam(Team.BLUE);
    } else {
      player.setTeam(Team.RED);
    }
  }

  @EventHandler
  public void onPlayerQuit(PlayerQuitEvent e) {
    Player p = e.getPlayer();
    SPlayer player = new SPlayer(p);

    e.setQuitMessage(null);

    player.removePlayer();
  }

  @EventHandler
  public void onPlayerMove(PlayerMoveEvent e) {
    Player p = e.getPlayer();
    Location loc =
        new Location(
            e.getTo().getWorld(),
            (int) e.getTo().getX(),
            (int) e.getTo().getY(),
            (int) e.getTo().getZ());
    if (Main.getInstance().redSpawnArea.contains(loc)) {
      Bukkit.getPluginManager().callEvent(new AreaWalkEvent(Area.RED_SPAWN, p));
    }
    if (Main.getInstance().blueSpawnArea.contains(loc)) {
      Bukkit.getPluginManager().callEvent(new AreaWalkEvent(Area.BLUE_SPAWN, p));
    }
    if (Main.getInstance().blockspawnAreas.contains(loc)) {
      Bukkit.getPluginManager().callEvent(new AreaWalkEvent(getArea(loc), p));
    }
    if (blockManager.canPickUpBlock(p)) {
      blockManager.pickUpBlock(p);
    }
    if (canGetNeededBlock(p)) {
      if (p.getGameMode() == GameMode.SURVIVAL) {
        gameManager.setCarrying(p, nexusManager.getCurrentNexusColor());
        String[] data = neededBlockMaterial.split(";");
        neededBlock
            .getBlock()
            .setTypeIdAndData(Integer.valueOf(data[0]), Byte.valueOf(data[1]), false);
        neededBlock = new Location(Bukkit.getWorlds().get(0), 0, 0, 0);

        Bukkit.broadcastMessage(
            Color.np(
                "&6The needed block was picked up by the "
                    + teamManager.getTeam(p).getTeamName()
                    + "&6 team!"));
      }
    }
    if ((int) e.getFrom().getX() != (int) e.getTo().getX()
        || (int) e.getFrom().getZ() != (int) e.getTo().getZ()
        || (int) e.getFrom().getY() != (int) e.getTo().getY()) {
      if (getTurret(loc) != null) {
        Bukkit.getPluginManager().callEvent(new TurretWalkEvent(p, getTurret(loc)));
      }
      if (isInTurret(p)) {
        Turret t = getTurret(p);
        if (t.containsUser()) {
          e.getPlayer().teleport(e.getFrom());
        }
      }
    }
    if ((int) e.getFrom().getX() != (int) e.getTo().getX()
        || (int) e.getFrom().getZ() != (int) e.getTo().getZ()) {
      if (!released || stunned.contains(p.getName())) {
        if (GameState.getState() == GameState.INGAME) {
          e.getPlayer().teleport(e.getFrom());
        }
      }
    }
  }

  public Turret getTurret(Location loc) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);
    for (Turret t : Main.getInstance().turretsList) {
      if (t.getLocation().equals(loc)) {
        return t;
      }
    }
    return null;
  }

  @EventHandler
  public void onSneak(PlayerToggleSneakEvent e) {
    Player p = e.getPlayer();
    if (isInTurret(p)) {
      Turret t = getTurret(p);
      if (t.containsUser()) {
        t.setUser(null);
        p.teleport(p.getLocation().add(1, 1, 0));
      }
    }
  }

  @EventHandler
  public void onPlayerDeath(PlayerDeathEvent e) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);
    Player p = e.getEntity();
    p.setHealth(20);
    p.setFoodLevel(20);
    p.setGameMode(GameMode.SPECTATOR);
    if (GameManager.getCarrying(p) == nexusManager.getCurrentNexusColor()) {
      Bukkit.broadcastMessage(
          Color.np(
              "&6The "
                  + teamManager.getTeam(p).getTeamName()
                  + " &6team has dropped the needed block!"));
      neededBlockMaterial =
          String.valueOf(
              p.getLocation().getBlock().getTypeId() + ";" + p.getLocation().getBlock().getData());
      p.getLocation()
          .getBlock()
          .setTypeIdAndData(159, (byte) nexusManager.getCurrentNexusColor(), false);
      neededBlock = p.getLocation();
    }
    gameManager.setCarrying(p, 0);
    blockManager.dropBlock(p.getLocation(), blockManager.playerBlocks.get(p.getName()));
    new BukkitRunnable() {
      int i = 10;

      public void run() {
        i--;
        if (i > 0) {
          Title title = new Title(Color.np("&6Respawning in &e" + String.valueOf(i)), "", 5, 10, 5);
          title.sendToPlayer(p);
        } else {
          this.cancel();
          p.setGameMode(GameMode.SURVIVAL);

          if (teamManager.getTeam(p) == Team.BLUE) {
            p.teleport(locationUtil.deserializeLoc(locationsFile.getString("arena.spawns.blue.1")));
          } else if (teamManager.getTeam(p) == Team.RED) {
            p.teleport(locationUtil.deserializeLoc(locationsFile.getString("arena.spawns.red.1")));
          }
        }
      }
    }.runTaskTimer(Main.getInstance(), 0, 20);
  }

  @EventHandler
  public void onPlayerDamage(EntityDamageEvent e) {
    if (e.getEntity() instanceof Player) {
      if (GameState.getState() == GameState.ENDING || GameState.getState() == GameState.LOBBY) {
        e.setCancelled(true);
      }
    }
  }

  @EventHandler
  public void onAreaWalk(AreaWalkEvent e) {
    if (GameState.getState() != GameState.ENDING) {
      Player p = e.getPlayer();
      Area a = e.getArea();

      if (p.getGameMode() == GameMode.SURVIVAL) {
        if (a != null) {
          if (e.isBlockSpawn()) {
            int block = nexusManager.getColor(a);
            if (GameManager.getCarrying(p) == nexusManager.getCurrentNexusColor()) {
              if (block != nexusManager.getCurrentNexusColor()) {
                if (!blockManager.isTaken(a)) {
                  Bukkit.broadcastMessage(
                      Color.np(
                          "&6The "
                              + teamManager.getTeam(p).getTeamName()
                              + " &6team has dropped the needed block. It has been brought back to it's original location."));
                  nexusManager
                      .getNeededBlockArea()
                      .getBlockSpawnBlock()
                      .getBlock()
                      .setTypeIdAndData(159, (byte) nexusManager.getCurrentNexusColor(), false);
                  blockManager.forcePickUpBlock(p, a);
                  isPickedUp = false;
                }
              }
            } else if (!blockManager.isTaken(a)) {
              blockManager.forcePickUpBlock(p, a);
            }

            if (nexusManager.getColor(e.getArea()) == nexusManager.getCurrentNexusColor()) {
              if (!isPickedUp) {
                Bukkit.broadcastMessage(
                    Color.np(
                        "&6The "
                            + teamManager.getTeam(p).getTeamName()
                            + " &6team has picked up the needed block!"));
                a.getBlockSpawnBlock().getBlock().setType(Material.AIR);
                if (GameManager.getCarrying(p) != 0
                    && GameManager.getCarrying(p) != nexusManager.getCurrentNexusColor()) {
                  blockManager.resetBlock(a.getBlockSpawnBlock(), a);
                }
                GameManager.setCarrying(p, nexusManager.getCurrentNexusColor());
                isPickedUp = true;
              }
            }
          } else {
            Team spawn = getTeam(a);
            int carrying = gameManager.getCarrying(p);
            if (spawn == teamManager.getTeam(p)) {
              if (carrying == nexusManager.getCurrentNexusColor()) {
                Bukkit.broadcastMessage(
                    Color.np(
                        "&6The "
                            + spawn.getTeamName()
                            + " &6team has brought the block to their base first!"));
                GameManager.addPoint(spawn);
                gameManager.setCarrying(p, 0);
                nexusManager.generateNewNexus();
              } else {
                if (carrying != 0) {
                  GameManager.addPoint(teamManager.getTeam(p).getOpposite());
                  GameManager.setCarrying(p, 0);
                  Bukkit.broadcastMessage(
                      Color.np(
                          "&cThe "
                              + spawn.getTeamName()
                              + " &cteam has brought the wrong block to their base!"));
                }
              }
            } else {
              if (GameManager.getCarrying(p) == nexusManager.getCurrentNexusColor()) {
                Bukkit.broadcastMessage(
                    Color.np(
                        "&cThe "
                            + spawn.getOpposite().getTeamName()
                            + " &cteam has brought the block to the wrong base!"));
                GameManager.addPoint(spawn);
                gameManager.setCarrying(p, 0);
                nexusManager.generateNewNexus();
              }
            }
          }
        }
      }
    }
  }

  @EventHandler
  public void onTurretFire(PlayerInteractEvent e) {
    if (isInTurret(e.getPlayer())) {
      Player shooter = e.getPlayer();
      Turret t = getTurret(shooter);

      t.shoot();
    }
  }

  @EventHandler
  public void onHit(EntityDamageByEntityEvent e) {
    if (e.getEntity() instanceof Player) {
      Player p = (Player) e.getEntity();
      if (e.getDamager() instanceof Snowball) {
        Snowball s = (Snowball) e.getDamager();
        Player shooter = (Player) s.getShooter();
        if (teamManager.getTeam(p) != teamManager.getTeam((Player) s.getShooter())) {
          if (s.getCustomName() != null) {
            if (s.getCustomName().equalsIgnoreCase("stun")) {
              if (!stunned.contains(p.getName())) {
                stunned.add(p.getName());
                p.playSound(p.getLocation(), Sound.FIREWORK_TWINKLE2, 3F, 1F);
                shooter.playSound(shooter.getLocation(), Sound.SUCCESSFUL_HIT, 3F, 1F);
                p.sendMessage(Color.np("&cYou got hit by a stun! You cannot move for 2 seconds!"));
                new BukkitRunnable() {
                  @Override
                  public void run() {
                    stunned.remove(p.getName());
                  }
                }.runTaskLater(Main.getInstance(), 40);
              } else {
                shooter.sendMessage(Color.np("&cThat player is already stunned!"));
              }
            }
          }
        } else {
          shooter.sendMessage(Color.np("&cYou cannot stun team members!"));
        }
      }
    }
  }

  @EventHandler
  public void onTurretWalk(TurretWalkEvent e) {
    if (GameState.getState() == GameState.INGAME) {
      if (!e.isOccupied()) {
        e.getTurret().setUser(e.getPlayer());
        e.getPlayer().sendMessage(Color.np("&aYou entered a turret. To leave, press shift."));
      } else {
        e.getPlayer().sendMessage(Color.np("&7That turret is already occupied!"));
      }
    }
  }

  public Area getArea(Location loc) {
    FileConfiguration locationsFile =
        YamlConfiguration.loadConfiguration(Main.getInstance().locations);
    List<Area> areas = Area.getBlockSpawns();
    int i = 0;
    for (int t = 1; t < 9; t++) {
      String[] data = locationsFile.getString("arena.blockspawnareas." + t).split(" ");

      Location minimum = locationUtil.deserializeLoc(data[0]);
      Location maximum = locationUtil.deserializeLoc(data[1]);
      for (double x = minimum.getX(); x <= maximum.getX(); x++) {
        for (double y = minimum.getY(); y <= maximum.getY(); y++) {
          for (double z = minimum.getZ(); z <= maximum.getZ(); z++) {
            Location location = new Location(minimum.getWorld(), x, y, z);
            if (location.equals(loc)) {
              return areas.get(i);
            }
          }
        }
      }
      i++;
    }
    return null;
  }

  private Team getTeam(Area a) {
    if (a == Area.RED_SPAWN) {
      return Team.RED;
    } else {
      return Team.BLUE;
    }
  }

  private boolean isInTurret(Player p) {
    for (Turret t : Main.getInstance().turretsList) {
      if (t.getUser() == p) {
        return true;
      }
    }
    return false;
  }

  private Turret getTurret(Player p) {
    for (Turret t : Main.getInstance().turretsList) {
      if (t.getUser() == p) {
        return t;
      }
    }
    return null;
  }

  public static Location getNeededBlockLocation() {
    if (neededBlock != null) {
      return neededBlock;
    } else {
      return new Location(Bukkit.getWorlds().get(0), 0, 0, 0);
    }
  }

  public void setNeededBlockLocation(Location loc) {
    neededBlock = loc;
  }

  public boolean canGetNeededBlock(Player p) {
    if (neededBlock != null) {
      for (Entity e : neededBlock.getWorld().getNearbyEntities(neededBlock, 2, 2, 2)) {
        if (e == p) {
          return true;
        }
      }
      return false;
    } else {
      return false;
    }
  }
}