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()
。这毫无意义。