Помогите Использование другого класса

Статус
Закрыто для дальнейших ответов.

CreeperPro35

Активный участник
Пользователь
Баллы
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]
 
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()};
Рано объявляешь. Как выше написали - массив ещё пуст, а ты уже пытаешься получить оттуда что-либо.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх