Pixel
Pixel

Reputation: 69

Command in my bukkitplugin not working

Now that I have changed the 'Commands' to 'commands' in the plugin.yml I get another error in my cmd when I run my server. The error says '.Jar file does not contain plugin.yml'.

This is my plugin.yml as of now:

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

And this is my Main file currently:

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);
                }
            }
        }
    }
}

Upvotes: 0

Views: 165

Answers (3)

Adrian Sohn
Adrian Sohn

Reputation: 1271

The plugin.yml file is case senstitive, the name of the list of commands needs to be all lowercase (commands instead of Commands). Since you currently have it capitalized, Bukkit/Spigot doesn't register any commands thus resulting in an "Unknown command. Type "/help" for help." message if you test the /wand command (I'm assuming this is the error you're getting, as you didn't describe the problem nor the expected behavior, but this is what happened when I tested the code, and correcting the name of the commands list made the command execute).

Upvotes: 0

Sacha Lewin
Sacha Lewin

Reputation: 76

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

Your plugin.yml file isn't valid. 'commands' must be all lower case, and there must be 2 spaces before wand.

Also, you should not make commands that way. You should make external classes implementing the CommandExecutor Interface.

I think, if you do it this way, I think you must register the command. Like this:

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

Upvotes: 1

TheReturningVoid
TheReturningVoid

Reputation: 111

You might need to update the player's inventory after adding the item with p.updateInventory(). In your case, it would be something like this:

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

Upvotes: -2

Related Questions