Java错误:无法解析为变量

时间:2013-02-01 21:00:34

标签: java minecraft bukkit

我正在尝试用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()));

是:

插件无法解析为变量

请帮忙!

2 个答案:

答案 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。