-3

我正在尝试使用 Java,bukkit 创建一个 minecraft 插件。

@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")));
    }
}

我得到的错误是'plugin' on

    item.setMetadata("NODROP", new FixedMetadataValue(plugin, e.getPlayer()));

这是:

插件无法解析为变量

请帮忙!

4

2 回答 2

0

所以需要在方法体中写出这样的一行代码:

Plugin plugin = new Plugin();

或者您可以声明plugin为实例变量:

public class Foo  
{
    private Plugin plugin;  //initialize later  
    ...
    public void onItemDrop(PlayerDropItemEvent e) {  
     ...
   }  
}
于 2013-02-01T21:04:50.547 回答
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 保持原样。

于 2013-02-01T21:21:25.507 回答