Files
PlayerBlockLife/src/main/java/com/playerblocklife/SetLifeBlocksCommand.java
xiaobai 8b502459b0 1.0.1:Fix bug:[21:01:10 INFO]: [PBL] §a========================================
[21:01:10 INFO]: [PBL] §ePlayerBlockLife v1.0.1-1.20.4 已启用
              [21:01:10 INFO]: [PBL] §e作者: [YourName]
              [21:01:10 INFO]: [PBL] §a========================================
2026-02-13 22:03:17 +08:00

184 lines
8.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.playerblocklife;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.UUID;
public class SetLifeBlocksCommand implements CommandExecutor {
private final PlayerBlockLife plugin;
public SetLifeBlocksCommand(PlayerBlockLife plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
// 检查命令是否启用
if (!plugin.getConfigManager().isCommandEnabled("setlifeblocks")) {
String message = plugin.getMessageManager().getMessage("game.errors.command_disabled",
"&c此命令已被禁用");
sender.sendMessage(message);
return true;
}
if (!(sender instanceof Player)) {
String message = plugin.getMessageManager().getMessage("game.errors.no_permission",
"&c只有玩家可以使用此命令");
sender.sendMessage(message);
return true;
}
Player player = (Player) sender;
UUID playerId = player.getUniqueId();
if (args.length > 0 && args[0].equalsIgnoreCase("help")) {
showHelp(player);
return true;
}
// 检查管理员权限和配置
if (args.length > 0 && args[0].equalsIgnoreCase("other")) {
// 检查是否允许管理员使用
if (!plugin.getConfigManager().isAdminUseAllowed("setlifeblocks") || !player.hasPermission("playerblocklife.admin")) {
String message = plugin.getMessageManager().getMessage("game.errors.no_permission",
"&c你没有权限使用此命令");
player.sendMessage(message);
return true;
}
if (args.length < 2) {
String usage = plugin.getMessageManager().getCommandMessage("setlifeblocks", "usage",
"&c用法: /setlifeblocks [reset|other|help]");
player.sendMessage(usage);
return true;
}
Player target = Bukkit.getPlayer(args[1]);
if (target == null) {
String message = plugin.getMessageManager().getMessage("game.errors.player_not_found",
"&c找不到玩家: {player}");
message = message.replace("{player}", args[1]);
player.sendMessage(message);
return true;
}
setBlocksForPlayer(target, player);
return true;
}
// 检查是否允许玩家自己使用
if (!plugin.getConfigManager().isSelfUseAllowed("setlifeblocks")) {
String message = plugin.getMessageManager().getMessage("game.errors.no_permission",
"&c你没有权限使用此命令");
player.sendMessage(message);
return true;
}
setBlocksForPlayer(player, null);
return true;
}
private void setBlocksForPlayer(Player target, Player executor) {
UUID targetId = target.getUniqueId();
MessageManager msgManager = plugin.getMessageManager();
if (plugin.getBlockManager().hasLifeBlocks(targetId)) {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.errors.player_already_has_blocks",
"&c玩家 {player} 已经有生命方块了!");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
String alreadyHas = msgManager.getCommandMessage("setlifeblocks", "already_has",
"&c你已经有生命方块了使用 /checklifeblocks 查看位置");
target.sendMessage(alreadyHas);
}
return;
}
if (!plugin.getSkinManager().isSkinLoaded(targetId)) {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.skin_loading",
"&e玩家 {player} 的皮肤正在加载中,请稍候...");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
target.sendMessage("§e你的皮肤正在加载中请稍候...");
target.sendMessage("§7(如果长时间未加载完成,请重新加入服务器)");
}
plugin.getSkinManager().loadPlayerSkinAsync(target);
Bukkit.getScheduler().runTaskLater(plugin, () -> {
boolean success = plugin.getBlockManager().setLifeBlocks(target, target.getLocation());
if (success) {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.blocks_generated_for_other",
"&a已为玩家 {player} 生成生命方块!");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
String successMsg = msgManager.getCommandMessage("setlifeblocks", "success",
"&a已为你生成 {blocks} 个生命方块!");
ConfigManager config = plugin.getConfigManager();
successMsg = successMsg.replace("{blocks}", String.valueOf(config.getBlocksPerPlayer()));
target.sendMessage(successMsg);
}
} else {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.errors.failed_to_generate_blocks",
"&c为玩家 {player} 生成生命方块失败!");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
target.sendMessage("§c生成失败请稍后再试或联系管理员");
}
}
}, 40L);
return;
}
boolean success = plugin.getBlockManager().setLifeBlocks(target, target.getLocation());
if (success) {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.blocks_generated_for_other",
"&a已为玩家 {player} 生成生命方块!");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
String successMsg = msgManager.getCommandMessage("setlifeblocks", "success",
"&a已为你生成 {blocks} 个生命方块!");
ConfigManager config = plugin.getConfigManager();
successMsg = successMsg.replace("{blocks}", String.valueOf(config.getBlocksPerPlayer()));
target.sendMessage(successMsg);
}
} else {
if (executor != null && !targetId.equals(executor.getUniqueId())) {
String message = msgManager.getMessage("game.errors.failed_to_generate_blocks",
"&c为玩家 {player} 生成生命方块失败!");
message = message.replace("{player}", target.getName());
executor.sendMessage(message);
} else {
target.sendMessage("§c生成失败请确保周围有足够空间");
}
}
}
private void showHelp(Player player) {
String helpMessage = plugin.getMessageManager().getCommandMessage("setlifeblocks", "help",
"&6=== PlayerBlockLife 帮助 ===\n" +
"&e/setlifeblocks &7- 设置你的生命方块\n" +
"&e/setlifeblocks reset &7- 重置生命方块位置\n" +
"&e/setlifeblocks other <玩家> &7- 为其他玩家设置(管理员)\n" +
"&e/setlifeblocks help &7- 显示此帮助");
player.sendMessage(helpMessage);
}
}