我正在尝试重写Bukkit的事件系统,它可以如下使用:
Bukkit.getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onEvent(PlayerJoinEvent e) {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}
}, this);
然而,这很耗时,而且需要时间才能写出。为了(大幅度地(改进我的工作流程,我正试图将这个系统改写成更可行、更灵活的系统。
以下是如何使用我理想的格式/方法:
EventBus.register(PlayerJoinEvent.class, e -> {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}, this);
目前,我有这个:
public static void register(Class<? extends Event> clazz, Consumer<Event> consumer, JavaPlugin plugin) {
consumer.accept(clazz.newInstance());
// Bukkit.getPluginManager().registerEvents(e, plugin); // ???
}
我的理论是创建一个更可用的类来实现Listener,如当前使用示例所示,这样我就可以使用提供的Consumer<Event>
来实例化它。
我的问题是,我需要将PlayerJoinEvent.class
作为参数传递到public void onEvent(<here> e) {
中。
我怎样才能做到这一点?它有几个问题,我不知道这次如何将其从概念变成现实。
我现在不知道该去哪里,我希望我能提供足够的信息。
您可以使用泛型来实现这一点,这样您就可以在方法中拥有一个类型的"变量"。
public static <T extends Event> void register(Class<T> clazz, Consumer<T> consumer, JavaPlugin plugin) {
...
}