Java 我的bukkitplugin中的命令不起作用
现在我已经将plugin.yml中的“Commands”改为“Commands”,在运行服务器时,我的cmd中又出现了一个错误。错误显示“.Jar文件不包含plugin.yml” 这是我现在的plugin.yml:Java 我的bukkitplugin中的命令不起作用,java,plugins,bukkit,Java,Plugins,Bukkit,现在我已经将plugin.yml中的“Commands”改为“Commands”,在运行服务器时,我的cmd中又出现了一个错误。错误显示“.Jar文件不包含plugin.yml” 这是我现在的plugin.yml: name: Wand version: 1.0 main: me.Pixel.Main commands: wand: 这是我目前的主要文件: package me.Pixel; import java.util.ArrayList; import java.util.List
name: Wand
version: 1.0
main: me.Pixel.Main
commands:
wand:
这是我目前的主要文件:
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);
}
}
}
}
}
在使用p.updateInventory添加项目后,您可能需要更新播放器的库存。在您的情况下,可能是这样的:
p.getInventory().addItem(stack);
p.updateInventory();
plugin.yml文件区分大小写,命令列表的名称必须是所有小写命令,而不是命令。由于您当前已将其大写,因此Bukkit/spiget不会注册任何命令,从而导致出现未知命令。键入/help以获取帮助。消息如果您测试/wand命令,我假设这是您得到的错误,您没有,但这是我测试代码时发生的情况,更正命令列表的名称使命令执行
name: Wand
version: 1.0
main: me.Pixel.Main
commands:
wand:
您的plugin.yml文件无效。'“命令”必须全部小写,并且在魔杖前必须有2个空格
此外,您不应该以这种方式发出命令。您应该使外部类实现CommandExecutor接口
我想,如果你这样做,我想你必须注册这个命令。
像这样:
getCommand("wand").setExecutor(this);
Bukkit在删除或添加ItemStack后会自动更新播放器的资源清册,在这种情况下,该命令不起作用,因为plugin.yml文件中的命令列表是大写的,因此没有注册任何命令。根据,缩进可以是单个空格字符,因此只有命令列表需要取消大写。Bukkit/spiget只使用单个空格缩进注册命令。通过重写onCommand方法注册命令是完全有效的,并且在中使用。哦,奇怪的是,我的命令总是使用两个空格,我学到了一些东西:P哦,我也学到了,因为我从来没有这样做过,我不确定。谢谢你的信息;所以“getCommandwand.setExecutorthis;”放在哪里在我的档案里?我需要为它删除一些东西吗?你不需要使用它。只需将命令设置为plugin.yml中的命令