如何在编写 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

}

Documentation