事件驱动设计
事件监听器
事件监听器需要实现Listener接口,然后在方法上面加@EventHandler注解
/**
* @author houyunfei
*/
public class MyEventHandler implements Listener {
/**
* 玩家加入服务器事件,事件处理器
*
* @param event
*/
@EventHandler
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Location location = player.getLocation();
World world = location.getWorld();
event.setJoinMessage(ChatColor.GREEN + "欢迎 " + player.getName() + " 加入服务器!" + "当前所在世界:" + world.getName());
}
/**
* 当玩家想要攻击羊时,取消攻击,并且让羊毛随机变色
*/
@EventHandler
public void onPlayerAttackSheep(EntityDamageByEntityEvent event) {
Entity damager = event.getDamager();
Entity entity = event.getEntity();
if (damager instanceof Player) {
// 如果攻击者是玩家
if (entity instanceof Sheep) {
// 如果被攻击的实体是羊
Sheep sheep = (Sheep) entity;
DyeColor[] colors = DyeColor.values();
// 随机一个颜色
int randomIndex = new Random().nextInt(colors.length - 1);
DyeColor randomColor = colors[randomIndex];
sheep.setColor(randomColor);
event.setCancelled(true);
}
}
}
}
我们在这里实现了两个事件监听,一个是用户登录,向用户发送一条消息,第二个是当玩家攻击羊的时候,取消攻击事件,变成使羊随机变色。
然后我们在主类中进行事件的注册,用下面的两种方式都可以。
@Override
public void onEnable() {
// Plugin startup logic
// this.getServer().getPluginManager().registerEvents(new MyEventHandler(), this);
Bukkit.getPluginManager().registerEvents(new MyEventHandler(), this);
}
效果: