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); } }