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

Помогите Ошибка в консоли при подсвечивании ближайших игроков

Тема в разделе "Разработка плагинов для новичков", создана пользователем TheKrealisYT, 17 ноя 2020.

  1. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Я пишу плагин на команду /wallhack, при написании ее все игроки в радиусе 30 блоков подсвечиваются.
    Но у меня вылезает ошибка. когда рядом кто-то есть и игрок пишет /wh, то пишет, что wallhack активирован, но выдает ошибку и не подсвечивается игрок.

    Вот ошибка:
    [10:45:40 ERROR]: null
    org.bukkit.command.CommandException: Unhandled exception executing command 'wh' in plugin kAddon v1.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:151) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:685) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.PlayerConnection.handleCommand(PlayerConnection.java:1473) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.PlayerConnection.a(PlayerConnection.java:1278) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:45) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.PacketPlayInChat.a(PacketPlayInChat.java:5) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.PlayerConnectionUtils.lambda$ensureMainThread$0(PlayerConnectionUtils.java:14) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_251]
    at java.util.concurrent.FutureTask.run(Unknown Source) [?:1.8.0_251]
    at net.minecraft.server.v1_12_R1.SystemUtils.a(SourceFile:46) [PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:849) [PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:427) [PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:773) [PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:665) [PaperSpigot.jar:git-Paper-"5d8b3d49"]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_251]
    Caused by: java.lang.NullPointerException
    at ru.main.addon.commands.WallHack.lambda$0(WallHack.java:51) ~[?:?]
    at java.util.ArrayList.forEach(Unknown Source) ~[?:1.8.0_251]
    at ru.main.addon.commands.WallHack.onCommand(WallHack.java:51) ~[?:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[PaperSpigot.jar:git-Paper-"5d8b3d49"]
    ... 15 more
    Пишет, что в 51 строчке ошибка

    Вот код:
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if(!(sender instanceof Player)) {
    sender.sendMessage("Команду можно использовать только от имени игрока!");
    if(!sender.hasPermission("kaddon.wh")) {
    sender.sendMessage(ChatColor.RED + "Недостаточно прав!");
    }

    }
    final List<Player> players = new ArrayList<Player>();
    for (final Player player1 : Bukkit.getOnlinePlayers()) {
    if (player1.getWorld() == ((Player)sender).getWorld() && player1 != sender) {
    players.add(player1);
    }

    }
    if (players.size() == 0) {
    sender.sendMessage(ChatColor.RED + "\u041d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u043e\u0432!");
    return true;
    }


    final Player player = (Player)sender;
    List<UUID> nrbPlayers = new ArrayList<UUID>();
    for (Entity e : player.getNearbyEntities(30, 30, 30)) {
    if (e.getType().equals(EntityType.PLAYER)) nrbPlayers.add(e.getUniqueId());
    }
    if (nrbPlayers.size() == 0) {
    player.sendMessage(ChatColor.RED + "Поблизости игроков нет!");
    } else {
    player.sendMessage(ChatColor.GREEN + "WallHack активирован!");
    > 51 строчка nrbPlayers.forEach(p -> Bukkit.getPlayer(p).addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 300, 1)));
    }

    return false;
    }
    }
     
  2. __Void__

    __Void__ Участник Пользователь

    Баллы:
    36
    Я не уверен, но мне кажется, что
    Код:
    Bukkit.getPlayer(p)
    периодически возвращает null. Проверьте на всякий случай.
    Вот вам мой вариант решения (выдать всем игрокам в радиусе 30 блоков свечение):
    Код:
    Player playerSender =  (Player) sender;
    Location senderLoc = playerSender.getLocation();
    
    playerSender.getWorld().getPlayers().stream().filter(p -> p.getLocation().distanceSquared(senderLoc) <= 900)
            .forEach(p -> p.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, 300, 0)));
    
    И вообще, выдавать свечение в вашем случае не вариант, будет видно всем. Говорили же - используйте пакеты.
    Я даже тему на бакките нашел: https://bukkit.org/threads/glowing-for-one-person.446790/
    почитайте
     
  3. Автор темы
    TheKrealisYT

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

    Баллы:
    66
    Имя в Minecraft:
    _TheKrealisYT_
    Большое вам спасибо! Про пакеты почитаю обязательно
     

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