如何在编写 spigot 插件时注册事件?
How to register an event in coding a spigot plugin?
我试过每次玩家吃东西时随机化药水效果。我使用了这段代码,但没有任何反应:
package de.jobebe.randomizer;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
}
@Override
public void onDisable() {
}
@EventHandler
public void onChowDown(PlayerItemConsumeEvent e) {
int rnd = ThreadLocalRandom.current().nextInt(PotionEffectType.values().length);
e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.values()[rnd], 200, 1));
}
}
我研究了一下,但我发现我必须在 onEnable 方法中注册一个事件。但如果我那样尝试
getServer().getPluginManager().registerEvents(this, this);
它在 Eclipse 中抛出一个错误,因为该方法需要一个监听器。我可以以不同的方式注册此活动吗?
您应该使该方法实现 Listener,这样就可以了:
package de.jobebe.randomizer;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Main extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onChowDown(PlayerItemConsumeEvent e) {
int rnd = ThreadLocalRandom.current().nextInt(PotionEffectType.values().length);
e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.values()[rnd], 200, 1));
}
}
现在,它将正常工作。
如果你想注册另一个监听器,你应该用监听器的工具创建一个 class,就像主 class :
public class MyListener implements Listener {
// here all your event
}
我试过每次玩家吃东西时随机化药水效果。我使用了这段代码,但没有任何反应:
package de.jobebe.randomizer;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Main extends JavaPlugin {
@Override
public void onEnable() {
}
@Override
public void onDisable() {
}
@EventHandler
public void onChowDown(PlayerItemConsumeEvent e) {
int rnd = ThreadLocalRandom.current().nextInt(PotionEffectType.values().length);
e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.values()[rnd], 200, 1));
}
}
我研究了一下,但我发现我必须在 onEnable 方法中注册一个事件。但如果我那样尝试
getServer().getPluginManager().registerEvents(this, this);
它在 Eclipse 中抛出一个错误,因为该方法需要一个监听器。我可以以不同的方式注册此活动吗?
您应该使该方法实现 Listener,这样就可以了:
package de.jobebe.randomizer;
import java.util.concurrent.ThreadLocalRandom;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Main extends JavaPlugin implements Listener {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(this, this);
}
@EventHandler
public void onChowDown(PlayerItemConsumeEvent e) {
int rnd = ThreadLocalRandom.current().nextInt(PotionEffectType.values().length);
e.getPlayer().addPotionEffect(new PotionEffect(PotionEffectType.values()[rnd], 200, 1));
}
}
现在,它将正常工作。
如果你想注册另一个监听器,你应该用监听器的工具创建一个 class,就像主 class :
public class MyListener implements Listener {
// here all your event
}