1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Массив с аренами хелп

Тема в разделе "Разработка плагинов для новичков", создана пользователем CamedoZzZ, 23 июл 2018.

Статус темы:
Закрыта.
  1. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Вообщем перейду сразу к делу!
    Имеется класс с хранением арен..
    Код:
    public class Arena extends ArenaManager{
        private List<String> players = new ArrayList<>(); // Лист с игроками
        private int time; // Время арены
        private int start = 2; // Кол-во игроков для старта
        private int max; // Максимальное кол-во игроков
        private String name; // Имя арены
        private Location spawn, lobby, end; // Локации
        private List<String> waiters = new ArrayList<>(); // Лист с ожидающими
       
    
        public Arena(String name, int time, int start, int max, Location spawn, Location lobby, Location end) {
            this.time = time;
            this.max = max;
            this.name = name;
            this.spawn = spawn;
            this.lobby = lobby;
            this.end = end;
       
        } //
        public List<String> getPlayers() { 
            return players;
        }
        ... И дальше возвращение переменных...

    В другом классе регистрация этих арен, добавление, и поиск арены по иммени
    Код:
    public class ArenaManager {
        //private static ArenaManager am = new ArenaManager();
        public List<Arena> arenas = new ArrayList<>();
       
        public void registerNewArena(String name, int time, int start, int max, Location spawn, Location lobby, Location end) { // Как я и говорил, тут мы создаем арену, тоже самое, только тут мы ее еще будем хранить в листе
    
            Arena arena = new Arena(name, time, start, max, spawn, lobby, end);
    
            arenas.add(arena);
        }
    public void addPlayer(Player p, String arenaname) { // Добавление игрока в арену
                Arena a = getArena(arenaname);
                p.setHealth(p.getMaxHealth()); // Лечим игрока
                p.setFireTicks(0); // Еще лечим
                p.teleport(a.getLobby()); // Телепорт игрока в лобби
                a.getPlayers().add(p.getName()); // Добавляем игрока к игрокам на арене
                int playersLeft = a.getStart() - a.getPlayers().size(); // Кол-во игроков минимум - кол-во игроков на арене
                if (playersLeft == 0) { // Если это число == 0, то старт арены
                }
    
           }
    public Arena getArena(String name) {
            for(Arena a : arenas) {
                if(a.getName().equalsIgnoreCase(name)) {
                    return a;
                }
            }
            return null;
        }
    
    Есть Команды на создание и вход в эти арены
    Код:
        public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
            if(cmd.getName().equalsIgnoreCase("create")) {
                return Create(sender, args);
            }
            if(cmd.getName().equalsIgnoreCase("join")) {
                return addplayer(sender, args);
            }
            if(cmd.getName().equalsIgnoreCase("check")) {
                return check(sender, args);
            }
            return false;
        }
     
        public boolean Create(CommandSender sender, String[] args) {
            File file = new File(prison.getDataFolder(), "config.yml");;
            Player p = (Player)sender;
            if(p != (Player)sender) return false;
            Location spawn = p.getLocation();
            Location lobby = p.getLocation();
            Location end = p.getLocation();
            am.registerNewArena(args[0], 200, 2, 4 , spawn, lobby, end);
            prison.getLogger().info("GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOD");
            p.sendMessage("Арена создана ");
            Arena m = am.getArena(args[0]);
            p.sendMessage("Арена создана "+ m.getName());
            ArenaUtil.saveArena(m, file);
           return true;
        }
     
        public boolean addplayer(CommandSender sender, String[] args) {
            am.addPlayer((Player)sender, args[0]);
           return true;
        }
    
    В чем собсна проблема.
    Арена создаётся, все хорошо (проверил записью в yml), пишется название арены при создании, тоесть не коверкается.
    При попытке войти, выдаёт вот эту ошибку
    Код:
    [13:30:24] [Server thread/INFO]: Graff issued server command: /create test
    [13:30:24] [Server thread/INFO]: [PrisonBreak] GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOD
    [13:30:28] [Server thread/INFO]: Graff issued server command: /join test
    [13:30:28] [Server thread/ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'join' in plugin PrisonBreak v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServer.java:641) ~[craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.handleCommand(PlayerConnection.java:1162) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:997) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:45) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PacketPlayInChat.a(PacketPlayInChat.java:1) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_171]
        at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_171]
        at net.minecraft.server.v1_8_R3.SystemUtils.a(SourceFile:44) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:715) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:374) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:654) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:557) [craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_171]
    Caused by: java.lang.NullPointerException
        at prison.main.ArenaManager.addPlayer(ArenaManager.java:23) ~[?:?]
        at prison.main.Commands.addplayer(Commands.java:53) ~[?:?]
        at prison.main.Commands.onCommand(Commands.java:28) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit.jar:git-Spigot-db6de12-18fbb24]
        ... 15 more
    
    Указывает на строчки : 23. p.teleport(a.getLobby()); // Телепорт игрока в лобби / Видимо не может получит локацию
    53: am.addPlayer((Player)sender, args[0]); Ваще безпонятия, должно быть норм
    28: Сама команда
    Код:
    if(cmd.getName().equalsIgnoreCase("join")) {
                return addplayer(sender, args);
            }
    Застрял на этом, не могу понять, прошу помощи :3
     
  2. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Если находит имя, он возвращает эту арену (По идее)
    Код:
    if(a.getName().equalsIgnoreCase(name)) {
                    return a;
                }
    Имя арены пишу правильно, всё равно получается возвращает null. Чет не врублюсь
     
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Твой мозг не осилил даже заюзать HashMap. Рано тебе в плагины лезть.
     
  4. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Сейчас бы критиковать новичков, вместо того чтобы помочь.
     
  5. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну ты и сам знаешь, что у тебя npe. Иди чини. И почему не критиковать? Так и останешься нубом.
     
  6. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Спасибо за мотивацию.
     
  7. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Уже продебажил, понял что арена не записывается, то есть на этой строчке am.registerNewArena(args[0], 20, 2, 4, spawn, lobby, end); выходит ошибка, пытаюсь разобраться
     
  8. Автор темы
    CamedoZzZ

    CamedoZzZ Активный участник Пользователь

    Баллы:
    61
    Вопрос решён, всем спасибо за внимание:lol:
     
Статус темы:
Закрыта.

Поделиться этой страницей