- Баллы
- 61
- Имя в Minecraft
- _SEVENTYNINE_
Нужно при финише паркура добавить игрока в ArrayList, а после того, как в листе будет 3 человека, выдать сообщение и очистить его. Всё, связанное с местами, я решил реализовать в отдельном классе.
Классы:
При ЗАПУСКЕ выдаёт ошибку
Классы:
Код:
public class CordRegister implements Listener {
static CordRegister cordregister;
CordRegister() {}
Spots spotinstance = new Spots();
public static CordRegister getCordRegister() {
return cordregister;
}
static HashMap<Player, Location> pla = new HashMap<Player, Location>();
@EventHandler
public void CoordRegister(PlayerMoveEvent e) {
Player p = e.getPlayer();
Block b = e.getTo().getBlock().getRelative(BlockFace.DOWN);
if (e.getTo().getBlock().getRelative(BlockFace.DOWN).getType() == Material.GOLD_BLOCK) {
if (pla.get(p) == null) {
pla.put(p, p.getLocation());
p.sendMessage("Parkour started");
}
if (pla.get(p) != p.getLocation()) {
if (!pla.containsValue(p.getLocation())) {
if (pla.get(p).getBlockX() != p.getLocation().getBlockX() && pla.get(p).getBlockY() != p.getLocation().getBlockY() && pla.get(p).getBlockZ() != p.getLocation().getBlockZ()) {
pla.replace(p, p.getLocation());
if (b.hasMetadata("finish")) {
p.sendMessage("Parkour completed");
spotinstance.setSpot(p);
pla.remove(p);
if (Spots.isSpotThree()) {
Bukkit.getServer().broadcastMessage(Spots.getSpots().parkourpassed.toString());
spotinstance.spot.clear();
}
} else {
p.sendMessage("Checkpoint");
}
}
}
}
}
}
}
Код:
public Spots() {}
static Spots spots;
public static Spots getSpots() {
return spots;
}
public static ArrayList<Player> spot = new ArrayList<>();
public void setSpot (Player player) {
spot.add(player);
}
public static String[] getParkourLeaderBoard() {
String[] playerspots = {
spot.get(0).getPlayer().getName(),
spot.get(1).getPlayer().getName(),
spot.get(2).getPlayer().getName(),
};
return playerspots;
}
public static boolean isSpotThree() {
if (spot.size() == 2) {
return true;
} else {
return false;
}
}
public String[] parkourpassed = {"Parkour has ended!", "Winners:",
"#1 " + Spots.spot.get(0).getName(),
"#2 " + Spots.spot.get(1).getName(),
"#3 " + Spots.spot.get(2).getName()};
При ЗАПУСКЕ выдаёт ошибку
Код:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(Unknown Source) ~[?:1.8.0_191]
at java.util.ArrayList.get(Unknown Source) ~[?:1.8.0_191]
at seventy.parkour.Spots.<init>(Spots.java:40) ~[?:?]
at seventy.parkour.CordRegister.<init>(CordRegister.java:20) ~[?:?]
at seventy.parkour.Main.onEnable(Main.java:28) ~[?:?]
at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[spigot.jar:git-Spigot-4d24e36-5193f76]
at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:352) [spigot.jar:git-Spigot-4d24e36-5193f76]
at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:416) [spigot.jar:git-Spigot-4d24e36-5193f76]
at org.bukkit.craftbukkit.v1_14_R1.CraftServer.enablePlugin(CraftServer.java:458) [spigot.jar:git-Spigot-4d24e36-5193f76]
at org.bukkit.craftbukkit.v1_14_R1.CraftServer.enablePlugins(CraftServer.java:372) [spigot.jar:git-Spigot-4d24e36-5193f76]
at net.minecraft.server.v1_14_R1.MinecraftServer.a(MinecraftServer.java:440) [spigot.jar:git-Spigot-4d24e36-5193f76]
at net.minecraft.server.v1_14_R1.DedicatedServer.init(DedicatedServer.java:258) [spigot.jar:git-Spigot-4d24e36-5193f76]
at net.minecraft.server.v1_14_R1.MinecraftServer.run(MinecraftServer.java:758) [spigot.jar:git-Spigot-4d24e36-5193f76]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]