Войти или зарегистрироваться

Помогите Использование TownyAPI, и получение Resident для дальнейшего использования.

  • Автор темы Автор темы ZDCoder
  • Дата начала Дата начала

ZDCoder

Активный участник
Пользователь
Баллы
76
Хотел я значит добавить в город нового игрока с помощью TownyAPI, но вот проблема появилась.
PHP:
                Resident target = TownyUniverse.getInstance().getResident(targetPlayer.getName());
Оно выкидывает исключение NullPointerException, но код продолжает выполнятся дальше.

Всю логику я описываю в событии PlayerCommandPreProcessEvent. Пробовал делать это в новом потоке, пробовал разные методы получения Resident'a, проверял TownyAPI чтобы он не был null, targetPlayer сто процентов существует и находится в сети.

Просто впервые работаю с этой библиотекой, может я что то делаю не так ? Направьте на верный путь. :)
 
Забыл упомянуть.

Версия апи: 0.98.0.0.
Исключение:
PHP:
[14:14:50] [Server thread/WARN]: [TownyAddon] Task #2066701 for TownyAddon v0.1 generated an exception
java.lang.NullPointerException: null
    at townyaddon.main.EventListener.lambda$handlePlayerCommandPreProcessEvent$0(EventListener.java:33) ~[?:?]
    at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:100) ~[patched_1.16.5.jar:git-Purpur-1171]
    at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:468) ~[patched_1.16.5.jar:git-Purpur-1171]
    at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1503) ~[patched_1.16.5.jar:git-Purpur-1171]
    at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:449) ~[patched_1.16.5.jar:git-Purpur-1171]
    at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1416) ~[patched_1.16.5.jar:git-Purpur-1171]
    at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1142) ~[patched_1.16.5.jar:git-Purpur-1171]
    at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:293) ~[patched_1.16.5.jar:git-Purpur-1171]
    at java.lang.Thread.run(Thread.java:834) [?:?]

33 строку я написал выше.
 
TownyAPI.getInstance().getResident(player) по-моему
У Towny по-моему есть доки, поищи
 
Подозреваю, что TownyUniverse.getInstance() нулл, depend в плагин умл добавил?
 
Подозреваю, что TownyUniverse.getInstance() нулл, depend в плагин умл добавил?
depend не добавлял. TownyUniverse навряд ли null, я пробовал вывести TownyAPI.getInstance() когда доставал резидента через него, он так же не был null.
 
попробуй по uuid
Resident resident = TownyUniverse.getInstance().getResident(player.getUniqueId());
 
Проверь, просто там больше нечему null'ом быть. Если только player.getName(), но, раз player точно нет, то только это.
Я сейчас ещё гляну эту функцию, мейби там где-то выбрасывается это исключение намеренно..
 
И сейчас попробую все варианты получения, через имя, через игрока, через uuid, в TownyUniverse и TownyAPI классах.
 
Вообще если игрок точно не нулл, посмотри, загрузился ли вообще towny
 
upload_2022-6-24_17-24-18.pngВозвращает null, но ведь я просто инциализирую переменную, даже нигде её не использую. Не понимаю почему оно выбрасывает исключение..
 
Вообще если игрок точно не нулл, посмотри, загрузился ли вообще towny
Towny загрузился. Сейчас попробую несколько вариантов получения резидента, выведу каждый обьект в чат, имя игрока, и сам обьект игрока тоже выведу. Отпишу потом сюда.
 
Перепробовал всё под ряд, оно создаёт резидентов, и если я пытаюсь их вывести, то выводит ник, ну т.е. метод toString() у объекта. Но всё равно каким-то образом жалуется на создание резидента.

КТО НИБУДЬ можете скинуть правильный способ добавления игрока в город ?
 

Вложения:

  • upload_2022-6-24_19-16-9.png
    upload_2022-6-24_19-16-9.png
    32,9 КБ · Просмотры: 14
Ты код то полностью покажи. У меня этот код прекрасно работает.
PHP:
    @EventHandler
    public void onCommandPreProcess(PlayerCommandPreprocessEvent e) {
        if (e.getMessage().equals("/test")) {
            TownyAPI towny = TownyAPI.getInstance();
            Resident resident = towny.getResident(e.getPlayer());
            if (resident != null)
                e.getPlayer().sendMessage(resident.getName());
        }
    }
КТО НИБУДЬ можете скинуть правильный способ добавления игрока в город ?
PHP:
    public boolean addPlayerToTown(Player player, Town town) {
        Resident resident = townyAPI.getResident(player);
        if (resident == null) return false;
        try {
            resident.setTown(town);
            return true;
        } catch (AlreadyRegisteredException e) {
            e.printStackTrace();
        }
        return false;
    }
 
Я сейчас ещё гляну эту функцию, мейби там где-то выбрасывается это исключение намеренно..
Судя по стеку, исключение выбрасывается прям в твоём коде, а не внутри ядра или апи Towny.

Тебе скинули код, я все равно рекомендую разобраться, чтобы получить новый опыт.

Варианты произошедшего следующие:
1) Ты перепутал номер строки (не перекомпилил/не залил/не перезагрузил)
2) TownyUniverse.getInstance() == null
3) targetPlayer == null
4) targetPlayer.getName() == null

Других вариантов тут быть не может чисто технически.

Я больше склоняюсь к первому пункту, поскольку на последнем скрине ты как раз вывел необходимые переменные в консоль (убедился, что они не null).
Так, например, возможно на следующей строке ты используешь полученный Resident, но он == null.
Или, может быть, у тебя на сервере две версии твоего плагина - одна актуальная и рабочая, другая неактуальная и кривая
 
Последнее редактирование:
Назад
Верх