@EventHandler事件不起作用

时间:2014-07-14 01:28:14

标签: minecraft bukkit

我正在尝试对我的插件进行简单的添加,这样当有人加入时,他们会收到一条消息“Heyyyyyyy”。我的插件也有一些命令。

这是我的Main课程:

package me.ben.test;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

@Override
public void onEnable() {
    this.getServer().getPluginManager().registerEvents(new Click(), this);
    getLogger().info("The Plugin Has Been Enabled!");
}

@Override
public void onDisable() {
    getLogger().info("The Plugin Has Been Disabled!");
}

public boolean onCommand(CommandSender sender, Command cmd, String label,
        String[] args) {

    if (cmd.getName().equalsIgnoreCase("hello") && sender instanceof Player) {

        Player player = (Player) sender;

        player.sendMessage("Hello, " + player.getName() + "!");

        return true;

    } else if (cmd.getName().equalsIgnoreCase("isonline")
            && args.length == 1) {

        Player target = Bukkit.getServer().getPlayer(args[0]);
        if (target == null) {

            sender.sendMessage(ChatColor.AQUA + "Player " + args[0]
                    + " is not online.");

            return true;

        } else if (target != null) {

            sender.sendMessage(ChatColor.AQUA + "Player " + args[0]
                    + " is online.");

            return true;

        } else {
            return false;
        }

    }

    return false;
}

}

这是我的Click课程:

package me.ben.test;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Click extends JavaPlugin implements Listener {
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.getPlayer().sendMessage("Heyyyyyyy");
    }
}

所有@EventHandler内容都不起作用所以我快速做了这个简单的事情。

2 个答案:

答案 0 :(得分:1)

您只能有一个扩展JavaPlugin的类。从extends JavaPlugin班级中删除Click - 只有您的主要班级extend JavaPlugin

查看Bukkit's official plugin tutorial以获取有关编码Bukkit插件的帮助。

答案 1 :(得分:0)

您在Listener课程中使用Main,但您没有在那里处理任何事件,只有在您希望该课程能够处理bukkit事件时才使用它。

如果您愿意,可以在Listener课程中使用Main,但是您需要在主课程中使用处理事件的方法,但它会变得凌乱在大项目......

您也不需要在主要课程的任何地方扩展JavaPlugin

如果您想使用您的主要课程:

public class Main extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("The Plugin Has Been Enabled!");
    }

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.getPlayer().sendMessage("Heyyyyyyy");
    }
}

如果要使用分隔的类来处理事件:

public class Main extends JavaPlugin {

    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(new Click(), this);
        getLogger().info("The Plugin Has Been Enabled!");
    }
}

public class Click implements Listener {

    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent event) {
        event.getPlayer().sendMessage("Heyyyyyyy");
    }
}

请勿忘记您需要正确创建plugin.yml文件,否则无法正常工作。