Java Bukkit棒插件

Java Bukkit棒插件,java,minecraft,bukkit,Java,Minecraft,Bukkit,我制作了一个插件,添加了推荐/staffwands。它会给一根棍子,这是给一根棍子的。这是一个魔杖插件 但我想确保,如果游戏中的普通玩家只是得到一根棍子,它就不会是一根魔杖,只有当你这样做时,它才会是一根魔杖。我已经用权限和魔杖做了一个类,我只是需要这方面的帮助。下面是代码,如果您能提供任何建议,那就太好了: package me.capz.stick; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import o

我制作了一个插件,添加了推荐
/staffwands
。它会给一根棍子,这是给一根棍子的。这是一个魔杖插件

但我想确保,如果游戏中的普通玩家只是得到一根棍子,它就不会是一根魔杖,只有当你这样做时,它才会是一根魔杖。我已经用权限和魔杖做了一个类,我只是需要这方面的帮助。下面是代码,如果您能提供任何建议,那就太好了:

package me.capz.stick;
import org.bukkit.Bukkit;    
import org.bukkit.ChatColor;    
import org.bukkit.EntityEffect;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Egg;
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.entity.EntityDamageByEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class stick extends JavaPlugin implements Listener {

    public void onEnable() {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
    }
    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if(cmd.getName().equalsIgnoreCase("StaffWand")) {
            if(!sender.hasPermission("StaffWand.staff")) {
                sender.sendMessage(ChatColor.RED + "Only Staff can use this!");
                if(sender.hasPermission("StaffWand.staff")) {
                    sender.sendMessage(ChatColor.GREEN + "Here is your staff wand!");
                    ItemStack item = new ItemStack(Material.STICK);
                    ((Player)sender).getInventory().addItem(item); return true;
                }
            }
        }
        return false;               
    }

    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
        Player player = e.getPlayer();
        if (!(e.getAction() == Action.RIGHT_CLICK_AIR)) return;

        if (!(e.getItem().getType() == Material.STICK)) return;

        Egg egg = e.getPlayer().launchProjectile(Egg.class);
        egg.setFireTicks(20);

        if(!(player.getInventory().contains(Material.MAGMA_CREAM)))return;
        player.getInventory().removeItem(new ItemStack(Material.MAGMA_CREAM));
        if(!player.getInventory().contains(Material.MAGMA_CREAM))return;
        player.sendMessage("Magma_Cream needed!");
        egg.setBounce(true);
        egg.playEffect(EntityEffect.HURT);
    }

    @EventHandler
    public void onEntityDamage(EntityDamageByEntityEvent e) {
        if (e.getDamager() instanceof Egg) {
            Egg egg = (Egg) e.getDamager();
            if (egg.getShooter() instanceof Player) {
                Player shooter = (Player) egg.getShooter();
                if (shooter.getItemInHand().getType() == Material.STICK) {
                    e.setDamage(10.0);  
                }   
            }   
        }
    }
}

您必须向
ItemStack
添加某种类型的元数据。我建议添加知识,因为这是不可能改变的:

ItemStack wand = new ItemStack(Material.STICK); //create the ItemStack
ItemMeta meta = wand.getItemMeta(); //get the ItemMeta

List<String> lore = new ArrayList<String>(); //create a List<String> for the lore
lore.add(ChatColor.GRAY + "Staff Wand"); //add "§7Staff Wand" to the lore

meta.setLore(lore); //set the ItemMeta's lore to the List<String>
wand.setItemMeta(meta); //set the ItemStack's meta.
ItemStack wand=新的ItemStack(Material.STICK)//创建ItemStack
ItemMeta=wand.getItemMeta()//获取项目元数据
List lore=new ArrayList()//为知识创建一个列表
添加(ChatColor.GRAY+“棍棒”)//在传说中添加“§7Staff魔杖”
梅塔·塞洛尔(lore)//将ItemMeta的知识设置为列表
wand.setItemMeta(meta)//设置ItemStack的meta。
然后,您可以通过检查知识是否等于上述知识来检查棍棒是否为棍棒:

public boolean isStaffWand(ItemStack item){
  //make sure the item is not null, it is a stick, it has item meta, and it has lore
  //to avoid a NullPointerException
  if(item != null && item.getType().equals(Material.STICK) && item.hasItemMeta() && item.getItemMeta().hasLore()){

    List<String> lore = new ArrayList<String>();//create the lore List<String>
    lore.add(ChatColor.GRAY + "Staff Wand");//add "§7Staff Wand" to the lore
    //this lore is now the same as the lore created in the above code block

    //check if the item's lore equals the lore above
    if(item.getItemMeta().getLore().equals(lore)){
      return true; //"item" is a Staff Wand
    }
  }
  return false; //"item" is not a Staff Wand
}
公共布尔值isStaffWand(ItemStack项){
//确保物品不为空,它是一根棍子,它有物品元,它有知识
//要避免NullPointerException
if(item!=null&&item.getType().equals(Material.STICK)&&item.hasItemMeta()&&item.getItemMeta().hasLore()){
List lore=new ArrayList();//创建lore列表
lore.add(ChatColor.GRAY+“杖棒”);//在lore中添加“§7杖棒”
//此知识现在与在上述代码块中创建的知识相同
//检查物品的知识是否等于上面的知识
if(item.getItemMeta().getLore().equals(lore)){
return true;/“item”是一个标尺
}
}
返回false;/“项目”不是工作人员棒
}

我通过选择代码,然后使用ctrl-K将代码移到代码块中。还从代码示例中删除了一堆空行。我没有得到您的oncommand():inside
!sender.hasPermission()
阻止您放置的
sender.hasPermission()
。这毫无意义。