Initial commit: EssentialsC v1.1.0
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class AdminMenuCommand extends BaseCommand implements Listener {
|
||||
|
||||
private static final int MENU_SIZE = 27;
|
||||
|
||||
public AdminMenuCommand() {
|
||||
super("essentialsc.command.admin");
|
||||
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
openMenu(player);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void openMenu(Player player) {
|
||||
String title = getLang().getString("admin-menu-title");
|
||||
Inventory menu = Bukkit.createInventory(null, MENU_SIZE, title);
|
||||
|
||||
// 时间控制
|
||||
addItem(menu, 10, Material.CLOCK, getLang().getString("admin-time-control"),
|
||||
Arrays.asList("§7左键: 设为白天", "§7右键: 设为夜晚"));
|
||||
addItem(menu, 11, Material.SUNFLOWER, getLang().getString("admin-weather-control"),
|
||||
Arrays.asList("§7左键: 晴天", "§7右键: 雨天"));
|
||||
|
||||
// 状态恢复
|
||||
addItem(menu, 13, Material.GOLDEN_APPLE, getLang().getString("admin-heal-self"),
|
||||
Arrays.asList("§7补满生命值和饱食度"));
|
||||
addItem(menu, 14, Material.BREAD, getLang().getString("admin-feed-self"),
|
||||
Arrays.asList("§7补满饱食度"));
|
||||
addItem(menu, 15, Material.ANVIL, getLang().getString("admin-repair-hand"),
|
||||
Arrays.asList("§7修复当前手持物品"));
|
||||
|
||||
// 管理员功能
|
||||
addItem(menu, 21, Material.ENDER_PEARL, getLang().getString("admin-vanish"),
|
||||
Arrays.asList("§7点击切换隐身状态"));
|
||||
addItem(menu, 22, Material.BOOK, getLang().getString("admin-reload"),
|
||||
Arrays.asList("§7重新加载配置文件"));
|
||||
|
||||
player.openInventory(menu);
|
||||
}
|
||||
|
||||
private void addItem(Inventory inv, int slot, Material material, String name, java.util.List<String> lore) {
|
||||
ItemStack item = new ItemStack(material);
|
||||
ItemMeta meta = item.getItemMeta();
|
||||
if (meta != null) {
|
||||
meta.setDisplayName(name);
|
||||
meta.setLore(lore);
|
||||
item.setItemMeta(meta);
|
||||
}
|
||||
inv.setItem(slot, item);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onMenuClick(InventoryClickEvent event) {
|
||||
String title = getLang().getString("admin-menu-title");
|
||||
if (!event.getView().getTitle().equals(title)) return;
|
||||
if (!(event.getWhoClicked() instanceof Player player)) return;
|
||||
|
||||
event.setCancelled(true);
|
||||
ItemStack clicked = event.getCurrentItem();
|
||||
if (clicked == null || !clicked.hasItemMeta()) return;
|
||||
|
||||
String name = clicked.getItemMeta().getDisplayName();
|
||||
String timeControl = getLang().getString("admin-time-control");
|
||||
String weatherControl = getLang().getString("admin-weather-control");
|
||||
String healSelf = getLang().getString("admin-heal-self");
|
||||
String feedSelf = getLang().getString("admin-feed-self");
|
||||
String repairHand = getLang().getString("admin-repair-hand");
|
||||
String vanish = getLang().getString("admin-vanish");
|
||||
String reload = getLang().getString("admin-reload");
|
||||
|
||||
switch (name) {
|
||||
case String t when t.equals(timeControl) -> {
|
||||
if (event.isLeftClick()) player.getWorld().setTime(1000);
|
||||
else player.getWorld().setTime(13000);
|
||||
player.sendMessage(getLang().getString("admin-time-set"));
|
||||
}
|
||||
case String w when w.equals(weatherControl) -> {
|
||||
if (event.isLeftClick()) player.getWorld().setStorm(false);
|
||||
else player.getWorld().setStorm(true);
|
||||
player.sendMessage(getLang().getString("admin-weather-set"));
|
||||
}
|
||||
case String h when h.equals(healSelf) -> {
|
||||
player.setHealth(player.getMaxHealth());
|
||||
player.setFoodLevel(20);
|
||||
player.sendMessage(getLang().getString("admin-heal-success"));
|
||||
}
|
||||
case String f when f.equals(feedSelf) -> {
|
||||
player.setFoodLevel(20);
|
||||
player.setSaturation(20f);
|
||||
player.sendMessage(getLang().getString("admin-feed-success"));
|
||||
}
|
||||
case String r when r.equals(repairHand) -> {
|
||||
var item = player.getInventory().getItemInMainHand();
|
||||
if (item.getItemMeta() instanceof org.bukkit.inventory.meta.Damageable d) {
|
||||
d.setDamage(0);
|
||||
item.setItemMeta((org.bukkit.inventory.meta.ItemMeta) d);
|
||||
player.sendMessage(getLang().getString("admin-repair-success"));
|
||||
}
|
||||
}
|
||||
case String v when v.equals(vanish) -> {
|
||||
new VanishCommand().execute(player, new String[]{});
|
||||
openMenu(player); // 刷新菜单
|
||||
}
|
||||
case String rl when rl.equals(reload) -> {
|
||||
plugin.reloadConfig();
|
||||
player.sendMessage(getLang().getString("admin-reload-success"));
|
||||
}
|
||||
default -> {} // 忽略其他点击
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class AnvilCommand extends BaseCommand {
|
||||
|
||||
public AnvilCommand() {
|
||||
super("essentialsc.command.anvil");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
player.openAnvil(null, true);
|
||||
player.sendMessage(getLang().getString("anvil-opened"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import cn.infstar.essentialsC.EssentialsC;
|
||||
import cn.infstar.essentialsC.LangManager;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class BaseCommand implements CommandExecutor {
|
||||
|
||||
protected String permission;
|
||||
protected static cn.infstar.essentialsC.EssentialsC plugin;
|
||||
|
||||
public BaseCommand(String permission) {
|
||||
this.permission = permission;
|
||||
if (plugin == null) {
|
||||
plugin = cn.infstar.essentialsC.EssentialsC.getPlugin(cn.infstar.essentialsC.EssentialsC.class);
|
||||
}
|
||||
}
|
||||
|
||||
public String getPermission() {
|
||||
return permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取语言管理器
|
||||
*/
|
||||
protected LangManager getLang() {
|
||||
return EssentialsC.getLangManager();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
|
||||
if (!(sender instanceof Player player)) {
|
||||
sender.sendMessage(getLang().getString("messages.player-only"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!player.hasPermission(permission)) {
|
||||
String message = getLang().getString("messages.no-permission",
|
||||
java.util.Map.of("permission", permission));
|
||||
player.sendMessage(message);
|
||||
return true;
|
||||
}
|
||||
|
||||
return execute(player, args);
|
||||
}
|
||||
|
||||
protected abstract boolean execute(Player player, String[] args);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class CartographyTableCommand extends BaseCommand {
|
||||
|
||||
public CartographyTableCommand() {
|
||||
super("essentialsc.command.cartographytable");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 使用 Paper API 打开制图台(标题跟随客户端语言)
|
||||
player.openCartographyTable(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class EnchantingTableCommand extends BaseCommand {
|
||||
|
||||
public EnchantingTableCommand() {
|
||||
super("essentialsc.command.enchantingtable");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
player.openEnchanting(null, true);
|
||||
player.sendMessage(getLang().getString("enchantingtable-opened"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class EnderChestCommand extends BaseCommand {
|
||||
|
||||
public EnderChestCommand() {
|
||||
super("essentialsc.command.enderchest");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 打开玩家的末影箱(标题由客户端决定)
|
||||
player.openInventory(player.getEnderChest());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class FeedCommand extends BaseCommand {
|
||||
|
||||
public FeedCommand() {
|
||||
super("essentialsc.command.feed");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
if (args.length == 0) {
|
||||
// 喂饱自己
|
||||
feedPlayer(player);
|
||||
player.sendMessage(getLang().getString("messages.feed-self"));
|
||||
} else {
|
||||
// 检查是否有喂饱他人的权限
|
||||
if (!player.hasPermission("essentialsc.command.feed.others")) {
|
||||
player.sendMessage(getLang().getString("messages.no-permission-others"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
if (target == null) {
|
||||
player.sendMessage(getLang().getString("messages.player-not-found", Map.of("player", args[0])));
|
||||
return true;
|
||||
}
|
||||
|
||||
feedPlayer(target);
|
||||
player.sendMessage(getLang().getString("messages.feed-other", Map.of("player", target.getName())));
|
||||
target.sendMessage(getLang().getString("messages.feed-by-other", Map.of("admin", player.getName())));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void feedPlayer(Player player) {
|
||||
player.setFoodLevel(20);
|
||||
player.setSaturation(20f);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class FlyCommand extends BaseCommand {
|
||||
|
||||
public FlyCommand() {
|
||||
super("essentialsc.command.fly");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
boolean currentFlyState = player.getAllowFlight();
|
||||
|
||||
if (currentFlyState) {
|
||||
player.setAllowFlight(false);
|
||||
player.setFlying(false);
|
||||
player.sendMessage(getLang().getString("messages.fly-disabled"));
|
||||
} else {
|
||||
player.setAllowFlight(true);
|
||||
player.setFlying(true);
|
||||
player.sendMessage(getLang().getString("messages.fly-enabled"));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class GrindstoneCommand extends BaseCommand {
|
||||
|
||||
public GrindstoneCommand() {
|
||||
super("essentialsc.command.grindstone");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 使用 Paper API 打开砂轮(标题跟随客户端语言)
|
||||
player.openGrindstone(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class HatCommand extends BaseCommand {
|
||||
|
||||
public HatCommand() {
|
||||
super("essentialsc.command.hat");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
ItemStack handItem = player.getInventory().getItemInMainHand();
|
||||
|
||||
if (handItem == null || handItem.isEmpty()) {
|
||||
player.sendMessage(getLang().getString("messages.hat-no-item"));
|
||||
return true;
|
||||
}
|
||||
|
||||
ItemStack helmet = player.getInventory().getHelmet();
|
||||
|
||||
// 如果头盔栏有物品,先放回背包
|
||||
if (helmet != null && !helmet.isEmpty()) {
|
||||
player.getInventory().setHelmet(handItem);
|
||||
player.getInventory().setItemInMainHand(helmet);
|
||||
} else {
|
||||
player.getInventory().setHelmet(handItem);
|
||||
player.getInventory().setItemInMainHand(null);
|
||||
}
|
||||
|
||||
player.updateInventory();
|
||||
|
||||
String itemName = handItem.getType().toString();
|
||||
String message = getLang().getString("messages.hat-success",
|
||||
Map.of("item", itemName));
|
||||
player.sendMessage(message);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class HealCommand extends BaseCommand {
|
||||
|
||||
public HealCommand() {
|
||||
super("essentialsc.command.heal");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
if (args.length == 0) {
|
||||
// 治疗自己
|
||||
healPlayer(player);
|
||||
player.sendMessage(getLang().getString("messages.heal-self"));
|
||||
} else {
|
||||
// 检查是否有治疗他人的权限
|
||||
if (!player.hasPermission("essentialsc.command.heal.others")) {
|
||||
player.sendMessage(getLang().getString("messages.no-permission-others"));
|
||||
return true;
|
||||
}
|
||||
|
||||
Player target = Bukkit.getPlayer(args[0]);
|
||||
if (target == null) {
|
||||
player.sendMessage(getLang().getString("messages.player-not-found", Map.of("player", args[0])));
|
||||
return true;
|
||||
}
|
||||
|
||||
healPlayer(target);
|
||||
player.sendMessage(getLang().getString("messages.heal-other", Map.of("player", target.getName())));
|
||||
target.sendMessage(getLang().getString("messages.heal-by-other", Map.of("admin", player.getName())));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void healPlayer(Player player) {
|
||||
player.setHealth(player.getMaxHealth());
|
||||
player.setFoodLevel(20);
|
||||
player.setSaturation(20f);
|
||||
player.clearActivePotionEffects();
|
||||
player.setFireTicks(0);
|
||||
}
|
||||
}
|
||||
113
src/main/java/cn/infstar/essentialsC/commands/HelpCommand.java
Normal file
113
src/main/java/cn/infstar/essentialsC/commands/HelpCommand.java
Normal file
@@ -0,0 +1,113 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import cn.infstar.essentialsC.EssentialsC;
|
||||
import cn.infstar.essentialsC.LangManager;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class HelpCommand extends BaseCommand {
|
||||
|
||||
public HelpCommand() {
|
||||
super("essentialsc.command.help");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
LangManager lang = getLang();
|
||||
String version = plugin.getDescription().getVersion();
|
||||
|
||||
player.sendMessage(lang.getString("help.title"));
|
||||
player.sendMessage(lang.getString("help.version",
|
||||
java.util.Map.of("version", version)));
|
||||
player.sendMessage("");
|
||||
|
||||
// 功能方块命令(检查权限后显示)
|
||||
boolean hasBlockCommands = false;
|
||||
StringBuilder blockCommands = new StringBuilder();
|
||||
|
||||
if (player.hasPermission("essentialsc.command.workbench")) {
|
||||
blockCommands.append(lang.getString("help.commands.workbench")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.anvil")) {
|
||||
blockCommands.append(lang.getString("help.commands.anvil")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.enchantingtable")) {
|
||||
blockCommands.append(lang.getString("help.commands.enchantingtable")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.cartographytable")) {
|
||||
blockCommands.append(lang.getString("help.commands.cartographytable")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.grindstone")) {
|
||||
blockCommands.append(lang.getString("help.commands.grindstone")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.loom")) {
|
||||
blockCommands.append(lang.getString("help.commands.loom")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.smithingtable")) {
|
||||
blockCommands.append(lang.getString("help.commands.smithingtable")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.stonecutter")) {
|
||||
blockCommands.append(lang.getString("help.commands.stonecutter")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.enderchest")) {
|
||||
blockCommands.append(lang.getString("help.commands.enderchest")).append("\n");
|
||||
hasBlockCommands = true;
|
||||
}
|
||||
|
||||
if (hasBlockCommands) {
|
||||
player.sendMessage(lang.getString("help.section-blocks"));
|
||||
player.sendMessage(blockCommands.toString().trim());
|
||||
player.sendMessage("");
|
||||
}
|
||||
|
||||
// 其他命令(检查权限后显示)
|
||||
boolean hasOtherCommands = false;
|
||||
StringBuilder otherCommands = new StringBuilder();
|
||||
|
||||
if (player.hasPermission("essentialsc.command.hat")) {
|
||||
otherCommands.append(lang.getString("help.commands.hat")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.suicide")) {
|
||||
otherCommands.append(lang.getString("help.commands.suicide")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.fly")) {
|
||||
otherCommands.append(lang.getString("help.commands.fly")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.heal")) {
|
||||
otherCommands.append(lang.getString("help.commands.heal")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.vanish")) {
|
||||
otherCommands.append(lang.getString("help.commands.vanish")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.seen")) {
|
||||
otherCommands.append(lang.getString("help.commands.seen")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
if (player.hasPermission("essentialsc.command.admin")) {
|
||||
otherCommands.append(lang.getString("help.commands.admin")).append("\n");
|
||||
hasOtherCommands = true;
|
||||
}
|
||||
|
||||
if (hasOtherCommands) {
|
||||
player.sendMessage(lang.getString("help.section-other"));
|
||||
player.sendMessage(otherCommands.toString().trim());
|
||||
player.sendMessage("");
|
||||
}
|
||||
|
||||
player.sendMessage(lang.getString("help.footer"));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class LoomCommand extends BaseCommand {
|
||||
|
||||
public LoomCommand() {
|
||||
super("essentialsc.command.loom");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 使用 Paper API 打开织布机(标题跟随客户端语言)
|
||||
player.openLoom(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
|
||||
public class PaperCommand extends Command {
|
||||
|
||||
private final BaseCommand baseCommand;
|
||||
|
||||
public PaperCommand(String name, BaseCommand baseCommand) {
|
||||
super(name);
|
||||
this.baseCommand = baseCommand;
|
||||
this.setPermission(baseCommand.permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||
return baseCommand.onCommand(sender, this, commandLabel, args);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.Damageable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class RepairCommand extends BaseCommand {
|
||||
|
||||
public RepairCommand() {
|
||||
super("essentialsc.command.repair");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
if (args.length > 0 && args[0].equalsIgnoreCase("all")) {
|
||||
// 检查是否有修复全部的权限
|
||||
if (!player.hasPermission("essentialsc.command.repair.all")) {
|
||||
player.sendMessage(getLang().getString("messages.no-permission-repair-all"));
|
||||
return true;
|
||||
}
|
||||
|
||||
int repairedCount = repairAll(player);
|
||||
if (repairedCount > 0) {
|
||||
player.sendMessage(getLang().getString("messages.repair-all-success", java.util.Map.of("count", String.valueOf(repairedCount))));
|
||||
} else {
|
||||
player.sendMessage(getLang().getString("messages.repair-no-items"));
|
||||
}
|
||||
} else {
|
||||
// 修复手中物品
|
||||
ItemStack item = player.getInventory().getItemInMainHand();
|
||||
if (item == null || item.getType().isAir()) {
|
||||
player.sendMessage(getLang().getString("messages.repair-no-item-in-hand"));
|
||||
return true;
|
||||
}
|
||||
|
||||
if (repairItem(item)) {
|
||||
player.sendMessage(getLang().getString("messages.repair-hand-success"));
|
||||
} else {
|
||||
player.sendMessage(getLang().getString("messages.repair-not-damaged"));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean repairItem(ItemStack item) {
|
||||
if (item.getItemMeta() instanceof Damageable damageable) {
|
||||
if (damageable.hasDamage()) {
|
||||
Damageable newMeta = (Damageable) damageable.clone();
|
||||
newMeta.setDamage(0);
|
||||
item.setItemMeta((org.bukkit.inventory.meta.ItemMeta) newMeta);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int repairAll(Player player) {
|
||||
int count = 0;
|
||||
ItemStack[] contents = player.getInventory().getContents();
|
||||
|
||||
for (ItemStack item : contents) {
|
||||
if (item != null && !item.getType().isAir()) {
|
||||
if (repairItem(item)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 也修复盔甲栏
|
||||
ItemStack[] armor = player.getInventory().getArmorContents();
|
||||
for (ItemStack item : armor) {
|
||||
if (item != null && !item.getType().isAir()) {
|
||||
if (repairItem(item)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
player.updateInventory();
|
||||
return count;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.OfflinePlayer;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
|
||||
public class SeenCommand extends BaseCommand {
|
||||
|
||||
public SeenCommand() {
|
||||
super("essentialsc.command.seen");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
if (args.length == 0) {
|
||||
player.sendMessage(getLang().getString("messages.seen-usage"));
|
||||
return true;
|
||||
}
|
||||
|
||||
OfflinePlayer target = Bukkit.getOfflinePlayer(args[0]);
|
||||
if (!target.hasPlayedBefore() && !target.isOnline()) {
|
||||
player.sendMessage(getLang().getString("messages.player-not-found", Map.of("player", args[0])));
|
||||
return true;
|
||||
}
|
||||
|
||||
StringBuilder info = new StringBuilder();
|
||||
info.append("§6========== §e玩家信息 §6==========\n");
|
||||
info.append("§7玩家名称: §f").append(target.getName()).append("\n");
|
||||
|
||||
if (target.isOnline()) {
|
||||
info.append("§7状态: §a在线\n");
|
||||
Player onlinePlayer = target.getPlayer();
|
||||
if (onlinePlayer != null) {
|
||||
info.append("§7所在世界: §f").append(onlinePlayer.getWorld().getName()).append("\n");
|
||||
}
|
||||
} else {
|
||||
info.append("§7状态: §c离线\n");
|
||||
long lastSeen = target.getLastSeen();
|
||||
if (lastSeen > 0) {
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
info.append("§7最后上线: §f").append(sdf.format(new Date(lastSeen))).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
info.append("§7首次加入: §f").append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(target.getFirstPlayed()))).append("\n");
|
||||
info.append("§6=============================");
|
||||
|
||||
player.sendMessage(info.toString());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class SmithingTableCommand extends BaseCommand {
|
||||
|
||||
public SmithingTableCommand() {
|
||||
super("essentialsc.command.smithingtable");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 使用 Paper API 打开锻造台(标题跟随客户端语言)
|
||||
player.openSmithingTable(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class StonecutterCommand extends BaseCommand {
|
||||
|
||||
public StonecutterCommand() {
|
||||
super("essentialsc.command.stonecutter");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 使用 Paper API 打开切石机(标题跟随客户端语言)
|
||||
player.openStonecutter(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class SuicideCommand extends BaseCommand {
|
||||
|
||||
public SuicideCommand() {
|
||||
super("essentialsc.command.suicide");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
String message = getLang().getString("messages.suicide-message",
|
||||
Map.of("player", player.getName()));
|
||||
player.setHealth(0);
|
||||
// 消息会在玩家死亡后显示,所以这里不发送
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
public class VanishCommand extends BaseCommand {
|
||||
|
||||
private static final Set<UUID> vanishedPlayers = new HashSet<>();
|
||||
|
||||
public VanishCommand() {
|
||||
super("essentialsc.command.vanish");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(@NotNull Player player, String[] args) {
|
||||
UUID uuid = player.getUniqueId();
|
||||
|
||||
if (vanishedPlayers.contains(uuid)) {
|
||||
// 取消隐身
|
||||
vanishedPlayers.remove(uuid);
|
||||
showPlayerToAll(player);
|
||||
player.sendMessage(getLang().getString("messages.vanish-disabled"));
|
||||
} else {
|
||||
// 开启隐身
|
||||
vanishedPlayers.add(uuid);
|
||||
hidePlayerFromAll(player);
|
||||
player.sendMessage(getLang().getString("messages.vanish-enabled"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void hidePlayerFromAll(Player player) {
|
||||
for (Player online : player.getServer().getOnlinePlayers()) {
|
||||
if (online != player) {
|
||||
online.hidePlayer(plugin, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showPlayerToAll(Player player) {
|
||||
for (Player online : player.getServer().getOnlinePlayers()) {
|
||||
if (online != player) {
|
||||
online.showPlayer(plugin, player);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static boolean isVanished(Player player) {
|
||||
return vanishedPlayers.contains(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package cn.infstar.essentialsC.commands;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
public class WorkbenchCommand extends BaseCommand {
|
||||
|
||||
public WorkbenchCommand() {
|
||||
super("essentialsc.command.workbench");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean execute(Player player, String[] args) {
|
||||
// 打开工作台(标题由客户端语言决定)
|
||||
player.openWorkbench(null, true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user