Frage von LPlay, 12

An Internal Error (Eclipse)?

Immer, wenn ich in letzter Zeit ein Plugin mit einem Command schreibe, welcher Argumente haben soll, und ich diesen dann ohne Args eingebe bekomme ich einen Internal Error, wieso??

CODE:

package me.GUI.main;

import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.material.MaterialData; import org.bukkit.plugin.java.JavaPlugin;

import me.GUI.Events.GUIClickEvent;

public class Main extends JavaPlugin {

public static String SpielerName = "";

@Override
public void onEnable() {
    System.out.println("BAN GUI AKTIV!");
    Bukkit.getPluginManager().registerEvents(new GUIClickEvent(), this);
}

@Override
public void onDisable() {
    System.out.println("BAN GUI NICHT MEHR AKTIV!");
}

public static String Username = "";

@SuppressWarnings("deprecation")
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

    if (args.length == 1) {
        Player p = (Player) sender;
        Username = args[0];
        if (p.hasPermission("Gban.use")) {

            Inventory gban = Bukkit.createInventory(null, 9 * 1, "§cBAN MENU");

            ItemStack Port = new ItemStack(Material.ENDER_PEARL);
            ItemMeta PortMeta = Port.getItemMeta();
            PortMeta.setDisplayName("§5Zu §d" + Username + " §5Teleportieren");
            Port.setItemMeta(PortMeta);

            ItemStack Kick = new ItemStack(Material.IRON_SWORD);
            ItemMeta KickMeta = Kick.getItemMeta();
            KickMeta.setDisplayName("§e" + Username + " §6kicken");
            Kick.setItemMeta(KickMeta);

            ItemStack Ban = new ItemStack(Material.DIAMOND_SWORD);
            ItemMeta BanMeta = Ban.getItemMeta();
            BanMeta.setDisplayName("§c" + Username + " §4Bannen");
            Ban.setItemMeta(BanMeta);
            
            ItemStack PH = new ItemStack(Material.STAINED_GLASS_PANE);
            ItemMeta PHmeta = PH.getItemMeta();
            PHmeta.setDisplayName(" ");
            PH.setItemMeta(PHmeta);
            PH.setData(new MaterialData(15));
            
            gban.setItem(0, Port);
            gban.setItem(4, Kick);
            gban.setItem(8, Ban);
            gban.setItem(1, PH);
            gban.setItem(2, PH);
            gban.setItem(3, PH);
            gban.setItem(5, PH);
            gban.setItem(6, PH);
            gban.setItem(7, PH);

            p.openInventory(gban);
            return true;
        } else {
            p.sendMessage("§cKeine Permissions! §7[§eGban.use§7]");
            return true;
        }
    } else {
        Player p = (Player) sender;
        Username = args[0];
        p.sendMessage("§cBitte nutze: §e/gban <Spieler>");
        return true;
    }
}

}

Aber wenn ich 2 Argumente anstatt 1 angebe, dann bekomme ich meine Message nur bei GAR KEINEM Argument nicht... -.- Woran liegts??? ._.

Antwort
von CactusCoder1, 3

Also als aller erstes wäre es für die meisten wichtig zu wissen das du ein Minecraft Plugin schreibst (Ich hatte damit halbes Jahr erfahrung , hab es sofort wieder erkannt xD). Da Minecraft Plugins zwar auf Java basieren , da Spigot und Bukkit damit geschrieben wurde nun denn , zurück zu deiner Frage.

Also Versteh ich das richtig du beziehst dich mit 

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)

und du fragst dich jetzt nun , warum du bei den Parametern (String[] args) übergeben musst .

Das liegt daran das du diese Methode von Bukkit aufrufst und dort ist es festgelegt dass du diesen Paramter brauchst (Da du ja , die Methode komplett implementierst und dein Senf hinzufügst).

War das deine Frage und wenn ja , hoffe ich ich habe es verständlich gesagt :D

LG

Keine passende Antwort gefunden?

Fragen Sie die Community