我正在尝试用Java创建一个minecraft插件,bukkit。
@EventHandler
public void onItemDrop(PlayerDropItemEvent e) {
/*
* Dropping items
*/
Item item = e.getItemDrop();
item.setMetadata("NODROP", new FixedMetadataValue(plugin, e.getPlayer()));
if (!e.getPlayer().hasPermission("nodrop.drop")) {
e.getItemDrop().remove();
e.getPlayer().sendMessage(colorizeText(ChatColor.RED + getConfig().getString("drop-message")));
}
}
我得到的错误是<插件'
item.setMetadata("NODROP", new FixedMetadataValue(plugin, e.getPlayer()));
是:
插件无法解析为变量
请帮忙!
答案 0 :(得分:0)
所以需要发生的是方法体内的一行代码:
Plugin plugin = new Plugin();
或者您可以将plugin
声明为实例变量:
public class Foo
{
private Plugin plugin; //initialize later
...
public void onItemDrop(PlayerDropItemEvent e) {
...
}
}
答案 1 :(得分:0)
我不认为@ Woot4Moo的答案是正确的。很坦率地说;当你来运行你的插件时,它会抛出错误。
上述错误可以通过以下两种方式之一修复:
将插件更改为
如果您的EventListener位于主插件类(扩展JavaPlugin
的那个)中,那么您只需将plugin
部分更改为this
即可。
item.setMetadata("NODROP", new FixedMetadataValue(this, e.getPlayer()));
获取插件的实例
如果您的EventListener位于插件的另一部分,那么当您声明侦听器时,将其更改为getServer().getPluginManager().registerEvents(this, new SomeEventListener(this)
并创建一个构造函数,该构造函数将发送插件实例并将其存储。
public SomeEventListener(JavaPlugin instance) {
this.plugin = instance;
}
然后您可以直接保留item.setMetadata。