gpt4 book ai didi

java - Spigot 使用命令取消注册事件

转载 作者:行者123 更新时间:2023-12-01 19:43:52 24 4
gpt4 key购买 nike

我制作了一个注册事件的插件,我想制作一个取消注册它的命令,我该怎么做,我已经搜索了2个小时,但什么也没找到。我想让/Pvpeventon 启动事件并/Pvpeventoff 关闭它这是我已经编写的代码: 包me.leopa.R1.FFA;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;

import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.java.JavaPlugin;




public class MainFFA extends JavaPlugin implements Listener{
@Override
public void onEnable() {
System.out.println("[INFO Leopa] Start");
super.onEnable();
}

@Override
public void onDisable() {
System.out.println("[INFO Leopa] Stop");
super.onDisable();
}

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {

if(command.getName().equalsIgnoreCase("PVPEVENTon")) {
getServer().getPluginManager().registerEvents(this, this);
}

if(command.getName().equalsIgnoreCase("PVPEVENToff")) {
getServer().getPluginManager().
}
return super.onCommand(sender, command, label, args);


}
@EventHandler
public void onDeathPVPEVENT(PlayerDeathEvent pvpevent) {
Player p = pvpevent.getEntity();
p.sendMessage("HI");
}





}`

最佳答案

您应该简化事件并添加boolean,而不是取消注册事件作为变量,变成 false何时应禁用 PVP 以及 true如果允许 PVP:

//Some Listener class
...
private YourPlugin plugin; //example
...
@EventHandler
public void playerDeath(PlayerDeathEvent event) {
if(plugin.isEventMode()) { //TODO when event mode is on }
}

插件类

...
public class YourPlugin extends JavaPlugin {
...
private boolean eventMode; //false per default
...

public boolean toggleEventMode() {
eventMode = !eventMode; //negation so if it is true it will be turned into false if it is false it will be turned to true
return eventMode;
}
public boolean isEventMode() {
return eventMode;
}
}

命令切换事件模式:

//is declared somewhere
boolean eventMode = plugin.toggleEventMode();
//true if eventMode is on false if not.

注意您还可以使用 setEventMode方法。

您还可以使用 unregisterAll取消注册 Listener 中所有事件的方法或Plugin :

HandlerList.unregisterAll(this); //takes a listener or a plugin. In your case you got all stuff in one class it should still work.

检查这些方法:

关于java - Spigot 使用命令取消注册事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54297764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com