2017-12-07 6 views
-1

Ich hatte in letzter Zeit mit Bukkit-Codierung ein Problem konfrontiert. Wenn ich das Plugin starte und einfach/akitz Command Label oder Name es erscheint mit einem internen Fehler, aber wenn ich/akitz {subcommand} es funktioniert gut! hier funktioniert alles gut, aber nur die/akitz < - allein wenn ich es tippe, erscheint ein Fehler! hier ist der Code:Interner Fehler im Unterbefehl Bukkit

package me.frostgamersa; 

import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Main extends JavaPlugin { 
@Override 
public void onEnable() { 

} 

@Override 
public void onDisable() { 

} 

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 
    if (label.equalsIgnoreCase("akitz")) { 
     Player player = (Player) sender; 

     if (args.length == 0 || args.length < 2) { 
      player.sendMessage("§cIncorrect Arguements"); 

      if (args[0].equalsIgnoreCase("legend")) { 
       player.sendMessage("§bYou have been Granted §3Legend §bKit!"); 
       CustomItems.givela(player); 
       CustomItems.givels(player); 
       player.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
       return true; 
      } 
      if (args[0].equalsIgnoreCase("god")) { 
       player.sendMessage("§bYou have been Granted §3God §bKit!"); 
       CustomItems.givega(player); 
       CustomItems.givegs(player); 
       player.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
       return true; 
      } else { 
       player.sendMessage("§cIncorrect Arguements!"); 
       return true; 
      } 
     } 
+4

Was ist der Fehler? –

+0

Sie schließen die if-Anweisung nicht 'if (args.length == 0 || args.length <2) {' – ItzBenteThePig

+0

Weil Sie zuerst prüfen, ob die Länge der Argumente ** null ist **, und versuchen Sie dann, ** erstes ** Argument ('if args [0] .equals ....') im Befehl ohne Argumente. Also denke ich Konsole druckt ArrayOfBoundsException. Wegen irgendeiner Ausnahme, die in 'onCommand' Methode aufgetreten ist, sehen Sie die Nachricht 'Interner Fehler ...' – i0xHeX

Antwort

0

Dies ist, wie Befehl wie ..

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

    Player p = (Player) sender; 

    if (cmd.getName().equalsIgnoreCase("akitz")) { 

     if (args.length != 1) { 

      p.sendMessage("§cIncorrect argument count!"); 

     } 

     if (args[0].equalsIgnoreCase("legend")) { 

      p.sendMessage("§bYou got a kit §3Legend"); 
      CustomItems.givela(p); 
      CustomItems.givels(p); 
      p.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
      return true; 

     } 

     if (args[0].equalsIgnoreCase("god")) { 

      p.sendMessage("§bYou got a kit §3God"); 
      CustomItems.givega(p); 
      CustomItems.givegs(p); 
      p.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
      return true; 

     } 

     if (!args[0].equalsIgnoreCase("legend") | !args[0].equalsIgnoreCase("god")) { 

      p.sendMessage("§cIncorrect argument!"); 

     } 

    } 

    return false; 

} 

auch aussehen sollte, lassen Sie Ihre Klasse CommandExecutor implementieren und diese zu Ihrem onEnable Methode hinzufügen ..

public void onEnable() { 

     getCommand("akitz").setExecutor(this); 

} 

die Befehlsregister wird nur für sicher

0

Spoonfeed incoming:

package me.frostgamersa; 

import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Main extends JavaPlugin { 
@Override 
public void onEnable() { 

} 

@Override 
public void onDisable() { 

} 

@Override 
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { 
    if (label.equalsIgnoreCase("akitz")) { 
     Player player = (Player) sender; 

     if (args.length < 2) { 
      player.sendMessage("§cIncorrect Arguements"); 
     } else { 
      if (args[0].equalsIgnoreCase("legend")) { 
       player.sendMessage("§bYou have been Granted §3Legend §bKit!"); 
       CustomItems.givela(player); 
       CustomItems.givels(player); 
       player.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
       return true; 
      } 

      if (args[0].equalsIgnoreCase("god")) { 
       player.sendMessage("§bYou have been Granted §3God §bKit!"); 
       CustomItems.givega(player); 
       CustomItems.givegs(player); 
       player.getInventory().addItem(new ItemStack(Material.GOLDEN_APPLE, 64)); 
       return true; 
      } else { 
       player.sendMessage("§cIncorrect Arguements!"); 
       return true; 
      } 
     } 
    } 
} 

würde ich auch onEnable und EinschSperre Sie empfehlen entfernen, als diejenigen, die nicht erforderlich sind, und da du nichts in ihnen haben, es ist nur Platz mit bis das braucht es nicht.

Sie sollten auch überprüfen, ob der Absender ein Player ist, bevor Sie ihn umsetzen, da dies zu Fehlern führen kann, wenn die Konsole einen Befehl ausführt.