将.class作为方法(JAVA)(BUKKIT/SPIGOT)(CUSTOM EVENT SYSTEM)中的参数传递



我正在尝试重写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) {
...
}

最新更新