Java Minecraft Plugin EventHandler?



我正在制作一个服务器插件,在玩家死亡时踢他们。我已经解决了所有这些问题,但我想能够打开和关闭它。我见过使用布尔值,但当我把@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"); 

}

}

我认为最简单的方法就是在某个地方存储一个布尔值,以确定是否启用了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"); 
}
}

}

这个实现有一个全局标志,它只启用和禁用,但我相信你可以使它持久化或特定于玩家。

如果您想全局启用/禁用踢腿死亡事件,那么使用布尔值是一种方法。

您只需要将其作为字段添加到类中即可:

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.
}
}

最新更新