Вопрос Не работает команда в плагине

Фионит

Пользователь
Сообщения
160
Решения
1
Что в ошибке не так?
Код:
[13:21:15] [Server thread/INFO]: Fionitos issued server command: /t ask
[13:21:15] [Server thread/ERROR]: null
org.bukkit.command.CommandException: Unhandled exception executing command 't' in plugin Towny v0.97.5.0
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.17.1.jar:git-Paper-399]
    at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.17.1.jar:git-Paper-399]
    at org.bukkit.craftbukkit.v1_17_R1.CraftServer.dispatchCommand(CraftServer.java:869) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2262) ~[app:?]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2073) ~[app:?]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2054) ~[app:?]
    at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[app:?]
    at net.minecraft.network.protocol.game.ServerboundChatPacket.a(ServerboundChatPacket.java:6) ~[app:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[app:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[app:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[app:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1426) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:192) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[app:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1404) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1397) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[app:?]
    at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1375) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1286) ~[patched_1.17.1.jar:git-Paper-399]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[patched_1.17.1.jar:git-Paper-399]
    at java.lang.Thread.run(Unknown Source) ~[?:?]
Caused by: java.lang.NullPointerException: Cannot invoke "org.bukkit.entity.Player.getName()" because "target" is null
    at org.fionitos.townyask.Commands.TaskCommand.onCommand(TaskCommand.java:41) ~[TownyAsk.jar:?]
    at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.17.1.jar:git-Paper-399]
    ... 21 more
Класс команды:
Java:
package org.fionitos.townyask.Commands;

import com.palmergames.bukkit.towny.TownyAPI;
import com.palmergames.bukkit.towny.object.Resident;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.ComponentBuilder;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;

import java.util.UUID;

public class TaskCommand implements CommandExecutor {

    private Resident getResidentOrThrow(UUID uniqueId) {
        return null;
    }

    public TaskCommand() {
    }

    @Override
    public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
        if (!(sender instanceof Player)) return true;

        if(command.getName().equalsIgnoreCase("town")) {
            if (args.length > 0) {
                if (args[0].equalsIgnoreCase("ask"))

                    for (Player player : Bukkit.getOnlinePlayers()) {

                        Player target = sender.getServer().getPlayer(args[0]);

                        TextComponent msg = new TextComponent("§f[Принять в город]");
                        assert target != null;
                        msg.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("Вы отправите приглашение игроку" + target.getName()).create()));
                        msg.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/t invite" + target.getName()));

                        Resident resident = getResidentOrThrow(player.getUniqueId());

                        if (resident.isMayor()) {
                            player.sendMessage(ChatColor.GRAY +"Игрок" + target.getName() + "хочет попроситься в городу" + msg);
                        }
                    }
                    return true;
                }
            }
        return false;
    }
}
 
Может быть во второй строке имелось ввиду args[1]?
Потому что ты пытаешься получить игрока с ником ask
я изменил
Java:
[ERROR] .... null

org.bukkit.command.CommandException: Unhandled exception executing command 't' in plugin Towny v0.97.5.0

at org.bukkit.command.PluginCommand.execute(PluginCommand.java:47) ~[patched_1.17.1.jar:git-Paper-399]

at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:159) ~[patched_1.17.1.jar:git-Paper-399]

at org.bukkit.craftbukkit.v1_17_R1.CraftServer.dispatchCommand(CraftServer.java:869) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.server.network.ServerGamePacketListenerImpl.handleCommand(ServerGamePacketListenerImpl.java:2262) ~[app:?]

at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2073) ~[app:?]

at net.minecraft.server.network.ServerGamePacketListenerImpl.handleChat(ServerGamePacketListenerImpl.java:2054) ~[app:?]

at net.minecraft.network.protocol.game.ServerboundChatPacket.handle(ServerboundChatPacket.java:46) ~[app:?]

at net.minecraft.network.protocol.game.ServerboundChatPacket.a(ServerboundChatPacket.java:6) ~[app:?]

at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[app:?]

at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[app:?]

at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[app:?]

at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1426) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.server.MinecraftServer.executeTask(MinecraftServer.java:192) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[app:?]

at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1404) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1397) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[app:?]

at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:1375) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1286) ~[patched_1.17.1.jar:git-Paper-399]

at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:319) ~[patched_1.17.1.jar:git-Paper-399]

at java.lang.Thread.run(Unknown Source) ~[?:?]

Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1

at org.fionitos.townyask.Commands.TaskCommand.onCommand(TaskCommand.java:38) ~[TownyAsk.jar:?]

at org.bukkit.command.PluginCommand.execute(PluginCommand.java:45) ~[patched_1.17.1.jar:git-Paper-399]

... 21 more
 
Попробуй хоть немного сам разобраться

Смотрим стектрейс:

Исключение выпало на org.fionitos.townyask.Commands.TaskCommand.onCommand(TaskCommand.java:38)
Исключение класса ArrayIndexOutOfBoundsException с сообщением Index 1 out of bounds for length 1
Такая ошибка выпадает, если ты обращаешься к массиву, размер которого меньше, чем твой запрос. В этом случае массив содержит 1 элемент, а ты обращаешься ко второму ([1] - вызов индекса 1, т.е. второго элемента в массиве)

Этого достаточно, чтобы понять и исправить ошибку. Если стектрейс и твой же код будут читать вместо тебя, ты не научишься решать ошибки самостоятельно

Если моё объяснение непонятно, нужно сначала изучить основы жавы
 
Попробуй хоть немного сам разобраться

Смотрим стектрейс:

Исключение выпало на org.fionitos.townyask.Commands.TaskCommand.onCommand(TaskCommand.java:38)
Исключение класса ArrayIndexOutOfBoundsException с сообщением Index 1 out of bounds for length 1
Такая ошибка выпадает, если ты обращаешься к массиву, размер которого меньше, чем твой запрос. В этом случае массив содержит 1 элемент, а ты обращаешься ко второму ([1] - вызов индекса 1, т.е. второго элемента в массиве)

Этого достаточно, чтобы понять и исправить ошибку. Если стектрейс и твой же код будут читать вместо тебя, ты не научишься решать ошибки самостоятельно

Если моё объяснение непонятно, нужно сначала изучить основы жавы
я уже понял в чем была ошибка, но тоже спасибо )
 
Назад
Сверху Снизу