Произошла внутренняя ошибка сервера при попытке выполнить эту команду. моя команда

У меня проблема с моей командой.

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

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

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

package me.mcmatt.squidcp;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import com.sk89q.worldedit.bukkit.WorldEditPlugin;

public class Main extends JavaPlugin {


  public void onEnable() {
    Bukkit.getServer().getLogger().info("Squid CP booted up! Version: " + Bukkit.getPluginManager().getPlugin("SquidCarePackages").getDescription().getVersion());

  }
  public void onDisable() {
    Bukkit.getServer().getLogger().info("Squid CP shut down!");
  }

  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (commandLabel.equalsIgnoreCase("squid")) {
      if (!(sender instanceof Player)) {
        sender.sendMessage(ChatColor.RED + "You must be a player to run this command");
      } else {
        Player player = (Player) sender;
        if (!(args[1].toString().equalsIgnoreCase("set"))) {
          player.sendMessage("Gratz");

        }
      }
    }

    return true;

  }

  public WorldEditPlugin getWorldEdit() {
    Plugin p = Bukkit.getServer().getPluginManager().getPlugin("WorldEdit");
    if (p instanceof WorldEditPlugin) return (WorldEditPlugin) p;
    else return null;

  }

}

1 ответ

Внутренняя ошибка, скорее всего, происходит из-за ArrayIndexOutOfBoundsException бросается при выполнении squid Команда без предоставления достаточных аргументов. Ваш код предполагает, что args массив имеет по крайней мере длину 2 и, следовательно, второй аргумент, args[1], существует. args[0] это первый String в массиве. При вводе просто "/squid" или даже "/squid set" и без указания каких-либо дополнительных аргументов, возникает исключение, так как args массив пуст или не содержит второй элемент. Проверьте, args массив имеет правильную длину, добавив проверку, такую ​​как if (args.length == 2) {} или даже if (args.length > 1) {},

Я предполагаю, что вы хотели получить доступ только к первому String в args массив. изменения args[1] в args[0] позволит команде работать так, как вы, вероятно, хотели. Тем не менее, было бы хорошо по-прежнему убедиться, что массив имеет правильную длину, чтобы избежать возникновения этой ошибки, когда игрок неправильно использует команду, предоставляя слишком мало аргументов или вообще не используя их.

Другие вопросы по тегам