我在做一个服务器插件,可以在玩家死的时候踢他们。我已经解决了所有的问题,但我希望能够切换它。我看过使用布尔值,但当我将@EventHandler放在一个布尔值中时,它会对我大喊大叫,我认为我做得不对……所以我想问题是,有没有办法在执行"/kdoff“时,@EventHandler只有在执行"/kd”之后才会执行。我觉得你可以用onDisable()做一些事情,但老实说,我不完全确定它们是如何工作的。
package me.Cats.KickDead;
import org.bukkit.ChatColor;
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.EntityDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;
public class Main extends JavaPlugin
implements Listener {
@Override
public void onEnable() { // on server start-up
System.out.println("Death Kick is enabled");
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { // enables command
if (label.equalsIgnoreCase("kd")) {
if (sender instanceof Player) { //player
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will now be sent to the &8&lShadow Realm&b. &r(&0&aOn&r)")); // Yu-gi-oh Reference
return true;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to send someone to the &8&lShadow Realm&r&b.")); // Yet another Yu-gi-oh reference
}
if(label.equalsIgnoreCase("kdoff")) {
if(sender instanceof Player) {
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will be allowed on the &a&lMoral Plane&r&b. &r(&0&4Off&r)")); // Yu-gi-oh Reference
return false;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to allow people to walk this &a&lMoral Plane&r&b."));
}
else { //console
sender.sendMessage("Currently only works if ran by a player. I'm a bit lazy...");
return true;
}
}
}
return false;
}
@EventHandler // if a player dies they're kicked
public void onDeath(EntityDeathEvent event) {
Player player = (Player)event.getEntity();
player.kickPlayer(ChatColor.RED + "" + ChatColor.BOLD + "You Died");
}
}发布于 2021-06-06 15:02:54
我认为最简单的方法就是在某个地方存储一个布尔值,以确定是否启用了kick on death。/kd和/kdoff命令可以设置它,只要有人死了,你只要检查它是否被启用,就可以决定是否应该踢他们。
OnDisabled是当插件被禁用时调用的事件,通常是指服务器关闭时(尽管也有其他时间!)。您不希望完全禁用该插件,因为那样您将无法捕获/kd命令。
public class Main extends JavaPlugin
implements Listener {
public static boolean kickOnDeath = true;
@Override
public void onEnable() { // on server start-up
if (kickOnDeath) {
System.out.println("Death Kick is enabled");
}
getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
}
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) { // enables command
if (label.equalsIgnoreCase("kd")) {
if (sender instanceof Player) { //player
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will now be sent to the &8&lShadow Realm&b. &r(&0&aOn&r)")); // Yu-gi-oh Reference
kickOnDeath = true;
return true;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to send someone to the &8&lShadow Realm&r&b.")); // Yet another Yu-gi-oh reference
} else { //console
sender.sendMessage("Currently only works if ran by a player. I'm a bit lazy...");
return true;
}
} else if (label.equalsIgnoreCase("kdoff")) {
if (sender instanceof Player) {
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will be allowed on the &a&lMoral Plane&r&b. &r(&0&4Off&r)")); // Yu-gi-oh Reference
kickOnDeath = false;
return true;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to allow people to walk this &a&lMoral Plane&r&b."));
} else { //console
sender.sendMessage("Currently only works if ran by a player. I'm a bit lazy...");
return true;
}
}
return false;
}
@EventHandler // if a player dies they're kicked
public void onDeath(EntityDeathEvent event) {
if (kickOnDeath) {
Player player = (Player)event.getEntity();
player.kickPlayer(ChatColor.RED + "" + ChatColor.BOLD + "You Died");
}
}
}这个实现有一个全局标志,只启用和禁用,但我相信你可以让它持久化或特定于玩家。
发布于 2021-06-06 15:29:49
如果您想要全局启用/禁用kicking on death事件,则可以使用布尔值。
你只需要把它作为一个字段添加到类中:
public class Main extends JavaPlugin
implements Listener {
private boolean enabled = true; // Added this line.
@Override
public void onEnable() { // on server start-up
System.out.println("Death Kick is enabled");
getServer().getPluginManager().registerEvents(this, this);
}
...现在,您可以在调用命令时设置enabled字段的值:
if (label.equalsIgnoreCase("kd")) {
if (sender instanceof Player) { //player
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will now be sent to the &8&lShadow Realm&b. &r(&0&aOn&r)")); // Yu-gi-oh Reference
enabled = true; // Added this line to set the enable flag.
return true;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to send someone to the &8&lShadow Realm&r&b.")); // Yet another Yu-gi-oh reference
}
else if(label.equalsIgnoreCase("kdoff")) {
if(sender instanceof Player) {
Player player = (Player) sender;
if (player.hasPermission("kickdead.use")) {
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&bPlayers will be allowed on the &a&lMoral Plane&r&b. &r(&0&4Off&r)")); // Yu-gi-oh Reference
enabled = false; // Added this line to set the enable flag.
return false;
}
player.sendMessage(ChatColor.translateAlternateColorCodes('&', "&cYour deck lacks the power to allow people to walk this &a&lMoral Plane&r&b."));
}现在,您可以检查onDeath侦听器中enabled字段的值,并执行相应的操作:
@EventHandler
public void onDeath(EntityDeathEvent event) {
if (enabled) {
// Kill player.
}
}https://stackoverflow.com/questions/67856413
复制相似问题