Java 我的世界插件事件处理程序?
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");
}
}
我认为最简单的方法就是在某处存储一个布尔值,以确定是否启用死亡后踢球。 /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");
}
}
}
此实现有一个仅启用和禁用的全局标志,但我相信您可以使其持久化或特定于播放器。
如果你想在全局范围内enable/disable死亡事件中的踢球,使用布尔值是可行的方法。
您只需将其作为字段添加到 class:
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.
}
}
我正在制作一个服务器插件,可以在玩家死亡时将其踢出。我已经解决了所有问题,但我希望能够打开和关闭它。我见过使用布尔值,但是当我将 @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");
}
}
我认为最简单的方法就是在某处存储一个布尔值,以确定是否启用死亡后踢球。 /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");
}
}
}
此实现有一个仅启用和禁用的全局标志,但我相信您可以使其持久化或特定于播放器。
如果你想在全局范围内enable/disable死亡事件中的踢球,使用布尔值是可行的方法。
您只需将其作为字段添加到 class:
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.
}
}