Spigot Unregister событие с помощью команды - PullRequest
0 голосов
/ 22 января 2019

Я создал плагин, который регистрирует событие, я хочу сделать команду, которая отменяет его регистрацию, как мне это сделать, я уже искал 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");
}





}`

1 Ответ

0 голосов
/ 22 января 2019

Вместо того, чтобы отменить регистрацию события, вы должны упростить его и добавить 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.

Youтакже можно использовать метод 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.

Проверьте эти методы:

...