2016-04-25 7 views
0

Jetzt, nachdem ich die 'Befehle' in 'commands' in der plugin.yml geändert habe, erhalte ich einen weiteren Fehler in meinem cmd, wenn ich meinen Server starte. Der Fehler sagt '.Jar Datei enthält nicht plugin.yml'.Befehl in meinem bukkitplugin funktioniert nicht

Das ist mein plugin.yml ab jetzt:

name: Wand 
version: 1.0 
main: me.Pixel.Main 
commands: 
wand: 

Und das ist meine Hauptdatei zur Zeit:

package me.Pixel; 

import java.util.ArrayList; 
import java.util.List; 

import org.bukkit.ChatColor; 
import org.bukkit.Effect; 
import org.bukkit.Material; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.block.Action; 
import org.bukkit.event.player.PlayerInteractEvent; 
import org.bukkit.inventory.ItemStack; 
import org.bukkit.inventory.meta.ItemMeta; 
import org.bukkit.plugin.java.JavaPlugin; 

public class Main extends JavaPlugin implements Listener { 
    public Main plugin; 
    public List<String> spells = new ArrayList<String>(); 
    public getTargets getTargets = new getTargets(); 
    public Spark spark = new Spark(this); 
    public PoisonWave poisonwave = new PoisonWave(this); 
    public DarkSpark darkSpark = new DarkSpark(this); 

    @Override 
    public void onEnable() { 
     plugin = this; 
     getServer().getPluginManager().registerEvents(this, this); 
     spells.add("Spark"); 
     spells.add("PoisonWave"); 
     spells.add("DarkSpark"); 
    } 

    @Override 
    public boolean onCommand(CommandSender sender, Command command, 
      String label, String[] args) { 
     if(label.equalsIgnoreCase("wand")) { 
      if(!(sender instanceof Player)) { 
       sender.sendMessage(ChatColor.RED + "You need to be an in-game player to perform this action!"); 
      } else { 
       Player p = (Player) sender; 
       if(sender.hasPermission("wand.wand")) { 
        ItemStack stack = new ItemStack(Material.BLAZE_ROD); 
        ItemMeta stackMeta = stack.getItemMeta(); 
        stackMeta.setDisplayName(ChatColor.RED + "Empire Wand"); 
        stack.setItemMeta(stackMeta); 
        p.getInventory().addItem(stack); 
        ChatUtilities.sendMessage(p, "You have got yourself a powerful Empire Wand!"); 
       } else { 
        ChatUtilities.sendMessage(p, ChatColor.RED + "ERROR: No Permission!"); 
       } 
      } 
     } 
     return false; 
    } 

    @EventHandler 
    public void onClick(PlayerInteractEvent e) { 
     if((e.getAction() == Action.RIGHT_CLICK_AIR) || e.getAction() == Action.RIGHT_CLICK_BLOCK) { 
      Player p = e.getPlayer(); 
      ItemStack stack = p.getItemInHand(); 
      if(stack != null && stack.getType() == Material.BLAZE_ROD && stack.hasItemMeta() && stack.getItemMeta().getDisplayName().equals(ChatColor.RED + "Empire Wand")) { 
       int SpellSelected = stack.getDurability(); 
       if(SpellSelected < 2) { 
        stack.setDurability((short) (SpellSelected + 1)); 
        p.getWorld().playEffect(p.getLocation(), Effect.STEP_SOUND, 119, 30); 
       } else { 
        stack.setDurability((short) 0); 
       } 
       ChatUtilities.sendMessage(p, "Selected: " + spells.get(SpellSelected)); 
      } 
     } 
     if(e.getAction() == Action.LEFT_CLICK_AIR || e.getAction() == Action.LEFT_CLICK_BLOCK) { 
      Player p = e.getPlayer(); 
      ItemStack stack = p.getItemInHand(); 
      if(stack != null && stack.getType() == Material.BLAZE_ROD && stack.hasItemMeta() && stack.getItemMeta().getDisplayName().equals(ChatColor.RED + "Empire Wand")) { 
       int SpellSelected = stack.getDurability(); 
       if(SpellSelected == 1) { 
        this.spark.onCast(p); 
       } else if (SpellSelected == 0) { 
        this.poisonwave.onCast(p); 
       } 
      } 
     } 
    } 
} 

Antwort

0

Die plugin.yml Datei Fall senstitive ist, muss der Name der Liste der Befehle alle Klein (commands statt Commands) sein. Da Sie es derzeit groß geschrieben haben, registriert Bukkit/Spigot keine Befehle, was zu einer Meldung "Unknown command. Type "/help" for help." führt, wenn Sie den Befehl /wand testen (ich gehe davon aus, dass dies der Fehler ist, den Sie bekommen, wie Sie es nicht getan haben. describe the problem nor the expected behavior , aber das ist, was passiert ist, als ich den Code getestet habe und den Namen der Befehlsliste korrigiert habe, dass der Befehl ausgeführt wurde).

-2

Möglicherweise müssen Inventar des Spielers nach dem Hinzufügen der Artikel mit p.updateInventory() aktualisieren . In Ihrem Fall wäre es so etwas wie dieses:

p.getInventory().addItem(stack); 
p.updateInventory(); 
+0

Bukkit automatisch das Inventar des Spielers aktualisiert nach dem Entfernen oder Hinzufügen einer 'ItemStack', wird der Befehl in diesem Fall nicht, weil die' commands' Liste in der 'plugin.yml' Datei arbeitet aktiviert wird , also sind keine Befehle registriert. –

+0

Ah, richtig, habe das nicht aufgegriffen. – TheReturningVoid

1
name: Wand 
version: 1.0 
main: me.Pixel.Main 
commands: 
    wand: 

Ihre Datei plugin.yml ist nicht gültig. 'Befehle' müssen Kleinbuchstaben sein und es müssen 2 Leerzeichen vor dem Zauberstab stehen.

Auch sollten Sie nicht Befehle auf diese Weise machen. Sie sollten externe Klassen implementieren, die die CommandExecutor-Schnittstelle implementieren.

Ich denke, wenn Sie es so machen, denke ich, dass Sie den Befehl registrieren müssen. So:

getCommand("wand").setExecutor(this); 
+0

Gemäß den [YAML-Spezifikationen] (http://yaml.org/spec/1.2/2009-07-21/spec.html) kann eine Einrückung ein einzelnes Leerzeichen sein, so dass nur die Befehlsliste benötigt wird unkapitalisiert sein. Bukkit/Spigot registriert den Befehl mit nur einem Leerzeichen. Das Registrieren von Befehlen durch Überschreiben der 'onCommand'-Methode ist absolut gültig und wird im [Bukkit Wiki-Plugin-Lernprogramm] (http://wiki.bukkit.org/Plugin_Tutorial) verwendet. –

+0

Oh, seltsam, ich habe immer zwei Leerzeichen für meine Befehle verwendet, ich habe etwas gelernt: P Oh, und ich habe das auch gelernt, da ich es nie so mache, war ich mir nicht sicher. Danke für die Information. ;) – sach

+0

Also ... Wo setze ich den 'getCommand ("Zauberstab) .setExecutor (this);' in meiner Datei? und muss ich etwas dafür löschen? – Pixel