java - Bukkit:我怎么称呼一个事件?

标签 java minecraft bukkit

我刚开始编写 Bukkit,我一直在尝试编写一个插件,为某个玩家启用 pvp,并且可以禁用它,但仅限于他们自己。它工作正常,直到我发现我需要一个事件来完成这项工作,但我还没有了解到我需要的事件。在网上看了一些视频/东西后,我找不到任何可以帮助我的东西。如果你能告诉我我将如何做到这一点,那就太好了。另外,如果您能解释更多有关事件的信息,我们也将不胜感激:)

package me.impatheimpaler.test;

import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class togglepvp extends JavaPlugin implements Listener{

    public void onEnable() {

    }

    public void onDisable() {

    }

    List<String> toggled = new ArrayList<String>();

    public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
        if (cmd.getName().equalsIgnoreCase("togglepvp")) {
            if (!(sender instanceof Player)) {
                 sender.sendMessage("Only a Player can run this command.");
                 return false;
            }
            Player player = (Player) sender;
            if (toggled.contains(player.getName())) {
                 player.sendMessage(ChatColor.RED + "Outgoing PvP - ON");
                 toggled.add(player.getName());
                 return true;
            }
            player.sendMessage(ChatColor.GREEN + "Outgoing PvP - OFF");
            toggled.remove(player.getName());
            return true;
        }
    }
}

最佳答案

要调用事件,您可以使用:

Bukkit.getServer().getPluginManager().callEvent(myEvent)

但是,根据你的问题,我认为你的意思是你想监听一个事件,这样你就可以在事件发生时执行某些操作。为此,首先让您想要收听的类实现 Listener

public class MyHandlerClass implements Listener{
  //code
}

接下来,您必须在 Main 类中注册事件,该类是 extends JavaPlugin。为此,找到您的 onEnable() 方法,然后调用 this.getServer().getPluginManager().registerEvents(Listener, this),其中 Listener 是你的监听类:

@Override
public void onEnable(){
  this.getServer().getPluginManager().registerEvents(new MyHandlerClass(), this);
  //other code
}

接下来,要实际处理事件,请在您的处理程序类(实现 Listener 的类)中创建一个函数,其中一个参数是 extends Event,并且具有它上面的 @EventHandler 注释,为了检测一个实体损坏另一个实体,您可以使用事件 EntityDamageByEntityEvent:

@EventHandler
public void entityDamageByEntity(EntityDamageByEntityEvent event){
  //your code here
  //use event.getEntity() to get the entity damaged, and event.getDamager() to get the damager
}

每当一个实体被另一个实体损坏时,entityDamageByEntity() 将被自动调用,您所要做的就是处理该事件。

如果您想取消事件,可以使用 event.setCancelled(true)

关于java - Bukkit:我怎么称呼一个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808651/

相关文章:

java - 获取玩家正在看的方向?

java - Bukkit不会加载插件: name is not defined

java - 与 JTextPane 一起使用时,JScrollPane 不显示

java - Gradle 构建在 :compileJava: `No matching variant` 处失败

java - 读取字节,转换为整数

java - 我如何检测 Bukkit 生成的鹅卵石?

java - 如何更改/分配 java .jar 的进程名称

java - BuildTools.jar Minecraft 服务器安装无法正常工作

java - Jframe - 绘制矩形不起作用

Java通过 protected getter访问私有(private)父类(super class)成员