Initial commit: EssentialsC v1.1.0
This commit is contained in:
89
src/main/java/cn/infstar/essentialsC/EssentialsC.java
Normal file
89
src/main/java/cn/infstar/essentialsC/EssentialsC.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package cn.infstar.essentialsC;
|
||||
|
||||
import cn.infstar.essentialsC.commands.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public final class EssentialsC extends JavaPlugin {
|
||||
|
||||
private static LangManager langManager;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
// 初始化语言管理器
|
||||
langManager = new LangManager(this);
|
||||
|
||||
registerCommands();
|
||||
getLogger().info("EssentialsC 插件已启用!");
|
||||
getLogger().info("当前语言: " + langManager.getCurrentLanguage());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
getLogger().info("EssentialsC 插件已禁用!");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取语言管理器实例
|
||||
*/
|
||||
public static LangManager getLangManager() {
|
||||
return langManager;
|
||||
}
|
||||
|
||||
private void registerCommands() {
|
||||
try {
|
||||
// 获取 CommandMap
|
||||
Field bukkitCommandMap = Bukkit.getServer().getClass().getDeclaredField("commandMap");
|
||||
bukkitCommandMap.setAccessible(true);
|
||||
org.bukkit.command.CommandMap commandMap = (org.bukkit.command.CommandMap) bukkitCommandMap.get(Bukkit.getServer());
|
||||
|
||||
// 注册所有命令
|
||||
registerCommand(commandMap, "workbench", new WorkbenchCommand());
|
||||
registerCommand(commandMap, "anvil", new AnvilCommand());
|
||||
registerCommand(commandMap, "enchantingtable", new EnchantingTableCommand());
|
||||
registerCommand(commandMap, "cartographytable", new CartographyTableCommand());
|
||||
registerCommand(commandMap, "grindstone", new GrindstoneCommand());
|
||||
registerCommand(commandMap, "loom", new LoomCommand());
|
||||
registerCommand(commandMap, "smithingtable", new SmithingTableCommand());
|
||||
registerCommand(commandMap, "stonecutter", new StonecutterCommand());
|
||||
registerCommand(commandMap, "enderchest", new EnderChestCommand());
|
||||
registerCommand(commandMap, "hat", new HatCommand());
|
||||
registerCommand(commandMap, "suicide", new SuicideCommand());
|
||||
registerCommand(commandMap, "fly", new FlyCommand());
|
||||
registerCommand(commandMap, "heal", new HealCommand());
|
||||
registerCommand(commandMap, "vanish", new VanishCommand());
|
||||
registerCommand(commandMap, "seen", new SeenCommand());
|
||||
registerCommand(commandMap, "admin", new AdminMenuCommand());
|
||||
registerCommand(commandMap, "feed", new FeedCommand());
|
||||
registerCommand(commandMap, "repair", new RepairCommand());
|
||||
registerCommand(commandMap, "essentialsc", new HelpCommand());
|
||||
|
||||
getLogger().info("成功注册 18 个命令!");
|
||||
} catch (Exception e) {
|
||||
getLogger().severe("无法注册命令: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void registerCommand(org.bukkit.command.CommandMap commandMap, String name, cn.infstar.essentialsC.commands.BaseCommand executor) {
|
||||
Command command = new Command(name) {
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
|
||||
return executor.onCommand(sender, this, commandLabel, args);
|
||||
}
|
||||
};
|
||||
|
||||
// 为 essentialsc 命令添加简化别名
|
||||
if (name.equals("essentialsc")) {
|
||||
command.setAliases(java.util.Arrays.asList("essc"));
|
||||
}
|
||||
|
||||
command.setPermission(executor.getPermission());
|
||||
// 注册到默认命名空间,使玩家可以直接使用 /workbench 而不是 /essentialsc:workbench
|
||||
commandMap.register("", command);
|
||||
}
|
||||
}
|
||||
128
src/main/java/cn/infstar/essentialsC/LangManager.java
Normal file
128
src/main/java/cn/infstar/essentialsC/LangManager.java
Normal file
@@ -0,0 +1,128 @@
|
||||
package cn.infstar.essentialsC;
|
||||
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.configuration.file.YamlConfiguration;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
|
||||
public class LangManager {
|
||||
|
||||
private final JavaPlugin plugin;
|
||||
private FileConfiguration config;
|
||||
private FileConfiguration langFile;
|
||||
private String currentLanguage;
|
||||
|
||||
public LangManager(JavaPlugin plugin) {
|
||||
this.plugin = plugin;
|
||||
loadConfig();
|
||||
loadLanguage();
|
||||
}
|
||||
|
||||
private void loadConfig() {
|
||||
File configFile = new File(plugin.getDataFolder(), "config.yml");
|
||||
|
||||
if (!configFile.exists()) {
|
||||
plugin.saveResource("config.yml", false);
|
||||
}
|
||||
|
||||
config = YamlConfiguration.loadConfiguration(configFile);
|
||||
|
||||
// 设置默认值
|
||||
config.addDefault("language", "zh_CN");
|
||||
config.addDefault("settings.enable-feedback", true);
|
||||
config.addDefault("settings.message-prefix", "&6[EssentialsC] &r");
|
||||
config.options().copyDefaults(true);
|
||||
|
||||
try {
|
||||
config.save(configFile);
|
||||
} catch (Exception e) {
|
||||
plugin.getLogger().severe("无法保存配置文件: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private void loadLanguage() {
|
||||
currentLanguage = config.getString("language", "zh_CN");
|
||||
|
||||
File langFolder = new File(plugin.getDataFolder(), "lang");
|
||||
if (!langFolder.exists()) {
|
||||
langFolder.mkdirs();
|
||||
}
|
||||
|
||||
File langFileObj = new File(langFolder, currentLanguage + ".yml");
|
||||
|
||||
// 如果语言文件不存在,从资源中复制
|
||||
if (!langFileObj.exists()) {
|
||||
InputStream inputStream = plugin.getResource("lang/" + currentLanguage + ".yml");
|
||||
if (inputStream != null) {
|
||||
plugin.saveResource("lang/" + currentLanguage + ".yml", false);
|
||||
} else {
|
||||
plugin.getLogger().warning("未找到语言文件: " + currentLanguage + ".yml,使用默认语言 en_US");
|
||||
currentLanguage = "en_US";
|
||||
plugin.saveResource("lang/en_US.yml", false);
|
||||
langFileObj = new File(langFolder, "en_US.yml");
|
||||
}
|
||||
}
|
||||
|
||||
langFile = YamlConfiguration.loadConfiguration(langFileObj);
|
||||
|
||||
// 尝试加载默认语言作为后备
|
||||
if (!currentLanguage.equals("en_US")) {
|
||||
InputStream defaultLangStream = plugin.getResource("lang/en_US.yml");
|
||||
if (defaultLangStream != null) {
|
||||
YamlConfiguration defaultLang = YamlConfiguration.loadConfiguration(
|
||||
new InputStreamReader(defaultLangStream, StandardCharsets.UTF_8)
|
||||
);
|
||||
langFile.setDefaults(defaultLang);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取翻译文本
|
||||
*/
|
||||
public String getString(String path) {
|
||||
String value = langFile.getString(path);
|
||||
if (value == null) {
|
||||
return "&cMissing translation: " + path;
|
||||
}
|
||||
return translateColorCodes(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取翻译文本并替换占位符
|
||||
*/
|
||||
public String getString(String path, Map<String, String> placeholders) {
|
||||
String value = getString(path);
|
||||
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
|
||||
value = value.replace("{" + entry.getKey() + "}", entry.getValue());
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 重新加载配置和语言
|
||||
*/
|
||||
public void reload() {
|
||||
loadConfig();
|
||||
loadLanguage();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前语言
|
||||
*/
|
||||
public String getCurrentLanguage() {
|
||||
return currentLanguage;
|
||||
}
|
||||
|
||||
/**
|
||||
* 翻译颜色代码
|
||||
*/
|
||||
private String translateColorCodes(String text) {
|
||||
return text.replace("&", "§");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
14
src/main/resources/config.yml
Normal file
14
src/main/resources/config.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# EssentialsC 配置文件
|
||||
# 你可以编辑此文件来自定义插件行为
|
||||
|
||||
# 语言设置
|
||||
# 可用语言: en_US, zh_CN (你可以添加更多)
|
||||
language: "zh_CN"
|
||||
|
||||
# 通用设置
|
||||
settings:
|
||||
# 启用或禁用命令反馈消息
|
||||
enable-feedback: true
|
||||
|
||||
# 所有插件消息的前缀
|
||||
message-prefix: "&6[EssentialsC] &r"
|
||||
74
src/main/resources/lang/en_US.yml
Normal file
74
src/main/resources/lang/en_US.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
# English Language File (en_US)
|
||||
# You can customize all messages here
|
||||
|
||||
# Command messages
|
||||
messages:
|
||||
no-permission: "&cYou don't have permission to use this command!\n&7Required permission: {permission}"
|
||||
player-only: "&cThis command can only be executed by players!"
|
||||
hat-success: "&aYou are now wearing {item} on your head!"
|
||||
hat-failed: "&cFailed to wear item on head!"
|
||||
hat-no-item: "&cYou need to hold an item in your hand!"
|
||||
suicide-message: "&e{player} has committed suicide!"
|
||||
fly-enabled: "&aFlight mode enabled!"
|
||||
fly-disabled: "&cFlight mode disabled!"
|
||||
vanish-enabled: "&aYou are now vanished!"
|
||||
vanish-disabled: "&cYou are no longer vanished!"
|
||||
seen-usage: "&cUsage: /seen <player>"
|
||||
admin-menu-title: "&6EssentialsC Admin Menu"
|
||||
admin-time-control: "&eTime Control"
|
||||
admin-weather-control: "&eWeather Control"
|
||||
admin-heal-self: "&aHeal Self"
|
||||
admin-feed-self: "&aFeed Self"
|
||||
admin-repair-hand: "&aRepair Hand Item"
|
||||
admin-vanish: "&dVanish Mode"
|
||||
admin-reload: "&dReload Plugin"
|
||||
admin-time-set: "&aTime set!"
|
||||
admin-weather-set: "&aWeather set!"
|
||||
admin-heal-success: "&aHealed!"
|
||||
admin-feed-success: "&aFed!"
|
||||
admin-repair-success: "&aRepaired!"
|
||||
admin-reload-success: "&aConfig reloaded!"
|
||||
anvil-opened: "&aAnvil opened!"
|
||||
enchantingtable-opened: "&aEnchanting table opened!"
|
||||
heal-self: "&aYour health and hunger have been restored!"
|
||||
heal-other: "&aYou have healed player {player}!"
|
||||
heal-by-other: "&aYou have been healed by admin {admin}!"
|
||||
feed-self: "&aYour hunger has been restored!"
|
||||
feed-other: "&aYou have fed player {player}!"
|
||||
feed-by-other: "&aYou have been fed by admin {admin}!"
|
||||
repair-hand-success: "&aItem in hand repaired!"
|
||||
repair-all-success: "&aRepaired {count} items!"
|
||||
repair-not-damaged: "&cThis item is not damaged!"
|
||||
repair-no-item-in-hand: "&cYou don't have an item in your hand!"
|
||||
repair-no-items: "&cNo repairable items in inventory!"
|
||||
no-permission-repair-all: "&cYou don't have permission to repair all items!"
|
||||
player-not-found: "&cPlayer not found: {player}"
|
||||
no-permission-others: "&cYou don't have permission to heal others!"
|
||||
|
||||
# Help command
|
||||
help:
|
||||
title: "&6========== &eEssentialsC Help &6=========="
|
||||
version: "&7Plugin Version: &f{version}"
|
||||
section-blocks: "&6Functional Block Commands:"
|
||||
section-other: "&6Other Commands:"
|
||||
footer: "&7Permissions required for each command"
|
||||
|
||||
commands:
|
||||
workbench: " &f/workbench &7- Open a workbench"
|
||||
anvil: " &f/anvil &7- Open an anvil"
|
||||
enchantingtable: " &f/enchantingtable &7- Open an enchanting table"
|
||||
cartographytable: " &f/cartographytable &7- Open a cartography table"
|
||||
grindstone: " &f/grindstone &7- Open a grindstone"
|
||||
loom: " &f/loom &7- Open a loom"
|
||||
smithingtable: " &f/smithingtable &7- Open a smithing table"
|
||||
stonecutter: " &f/stonecutter &7- Open a stonecutter"
|
||||
enderchest: " &f/enderchest &7- Open your ender chest"
|
||||
hat: " &f/hat &7- Wear held item as a hat"
|
||||
suicide: " &f/suicide &7- Commit suicide"
|
||||
fly: " &f/fly &7- Toggle flight mode"
|
||||
heal: " &f/heal &7- Restore health and hunger"
|
||||
vanish: " &f/vanish &7- Toggle vanish mode"
|
||||
seen: " &f/seen &7- View player information"
|
||||
admin: " &f/admin &7- Open admin menu"
|
||||
feed: " &f/feed &7- Restore hunger"
|
||||
repair: " &f/repair &7- Repair hand or all items"
|
||||
74
src/main/resources/lang/zh_CN.yml
Normal file
74
src/main/resources/lang/zh_CN.yml
Normal file
@@ -0,0 +1,74 @@
|
||||
# Chinese Language File (zh_CN)
|
||||
# 中文语言文件
|
||||
|
||||
# 命令消息
|
||||
messages:
|
||||
no-permission: "&c你没有权限执行此命令!\n&7需要权限: {permission}"
|
||||
player-only: "&c该命令只能由玩家执行!"
|
||||
hat-success: "&a你现在将 {item} 戴在头上!"
|
||||
hat-failed: "&c无法将物品戴在头上!"
|
||||
hat-no-item: "&c你需要在手中持有物品!"
|
||||
suicide-message: "&e{player} 自杀了!"
|
||||
fly-enabled: "&a飞行模式已启用!"
|
||||
fly-disabled: "&c飞行模式已禁用!"
|
||||
vanish-enabled: "&a你已进入隐身模式!"
|
||||
vanish-disabled: "&c你已退出隐身模式!"
|
||||
seen-usage: "&c用法: /seen <玩家名>"
|
||||
admin-menu-title: "&6EssentialsC 管理菜单"
|
||||
admin-time-control: "&e时间控制"
|
||||
admin-weather-control: "&e天气控制"
|
||||
admin-heal-self: "&a治疗自己"
|
||||
admin-feed-self: "&a喂饱自己"
|
||||
admin-repair-hand: "&a修复手中物品"
|
||||
admin-vanish: "&d隐身模式"
|
||||
admin-reload: "&d重载插件"
|
||||
admin-time-set: "&a时间已设置!"
|
||||
admin-weather-set: "&a天气已设置!"
|
||||
admin-heal-success: "&a已治疗!"
|
||||
admin-feed-success: "&a已喂饱!"
|
||||
admin-repair-success: "&a已修复!"
|
||||
admin-reload-success: "&a配置已重载!"
|
||||
anvil-opened: "&a已打开铁砧!"
|
||||
enchantingtable-opened: "&a已打开附魔台!"
|
||||
heal-self: "&a你的生命值和饱食度已补满!"
|
||||
heal-other: "&a你已治疗了玩家 {player}!"
|
||||
heal-by-other: "&a你被管理员 {admin} 治疗了!"
|
||||
feed-self: "&a你的饱食度已补满!"
|
||||
feed-other: "&a你已喂饱玩家 {player}!"
|
||||
feed-by-other: "&a你被管理员 {admin} 喂饱了!"
|
||||
repair-hand-success: "&a手中物品已修复!"
|
||||
repair-all-success: "&a已修复 {count} 件物品!"
|
||||
repair-not-damaged: "&c该物品没有损坏!"
|
||||
repair-no-item-in-hand: "&c你手中没有物品!"
|
||||
repair-no-items: "&c背包中没有可修复的物品!"
|
||||
no-permission-repair-all: "&c你没有权限修复所有物品!"
|
||||
player-not-found: "&c未找到玩家: {player}"
|
||||
no-permission-others: "&c你没有权限治疗其他玩家!"
|
||||
|
||||
# 帮助命令
|
||||
help:
|
||||
title: "&6========== &eEssentialsC 帮助 &6=========="
|
||||
version: "&7插件版本: &f{version}"
|
||||
section-blocks: "&6功能方块命令:"
|
||||
section-other: "&6其他功能命令:"
|
||||
footer: "&7需要权限才能使用各个命令"
|
||||
|
||||
commands:
|
||||
workbench: " &f/workbench &7- 打开工作台"
|
||||
anvil: " &f/anvil &7- 打开铁砧"
|
||||
enchantingtable: " &f/enchantingtable &7- 打开附魔台"
|
||||
cartographytable: " &f/cartographytable &7- 打开制图台"
|
||||
grindstone: " &f/grindstone &7- 打开砂轮"
|
||||
loom: " &f/loom &7- 打开织布机"
|
||||
smithingtable: " &f/smithingtable &7- 打开锻造台"
|
||||
stonecutter: " &f/stonecutter &7- 打开切石机"
|
||||
enderchest: " &f/enderchest &7- 打开末影箱"
|
||||
hat: " &f/hat &7- 将手中物品戴在头上"
|
||||
suicide: " &f/suicide &7- 自杀"
|
||||
fly: " &f/fly &7- 切换飞行模式"
|
||||
heal: " &f/heal &7- 恢复生命值和饱食度"
|
||||
vanish: " &f/vanish &7- 切换隐身模式"
|
||||
seen: " &f/seen &7- 查看玩家信息"
|
||||
admin: " &f/admin &7- 打开管理菜单"
|
||||
feed: " &f/feed &7- 补满饱食度"
|
||||
repair: " &f/repair &7- 修复手中或所有物品"
|
||||
92
src/main/resources/paper-plugin.yml
Normal file
92
src/main/resources/paper-plugin.yml
Normal file
@@ -0,0 +1,92 @@
|
||||
name: EssentialsC
|
||||
description: A CMI-like essentials plugin for Paper servers
|
||||
version: '${version}'
|
||||
|
||||
main: cn.infstar.essentialsC.EssentialsC
|
||||
api-version: '1.21'
|
||||
load: POSTWORLD
|
||||
|
||||
authors: [ Coldsmiles_7 ]
|
||||
website: www.infstar.cn
|
||||
|
||||
permissions:
|
||||
essentialsc.command.workbench:
|
||||
description: Allows use of /workbench command
|
||||
default: op
|
||||
essentialsc.command.anvil:
|
||||
description: Allows use of /anvil command
|
||||
default: op
|
||||
essentialsc.command.enchantingtable:
|
||||
description: Allows use of /enchantingtable command
|
||||
default: op
|
||||
essentialsc.command.cartographytable:
|
||||
description: Allows use of /cartographytable command
|
||||
default: op
|
||||
essentialsc.command.grindstone:
|
||||
description: Allows use of /grindstone command
|
||||
default: op
|
||||
essentialsc.command.loom:
|
||||
description: Allows use of /loom command
|
||||
default: op
|
||||
essentialsc.command.smithingtable:
|
||||
description: Allows use of /smithingtable command
|
||||
default: op
|
||||
essentialsc.command.stonecutter:
|
||||
description: Allows use of /stonecutter command
|
||||
default: op
|
||||
essentialsc.command.enderchest:
|
||||
description: Allows use of /enderchest command
|
||||
default: op
|
||||
essentialsc.command.hat:
|
||||
description: Allows use of /hat command
|
||||
default: op
|
||||
essentialsc.command.suicide:
|
||||
description: Allows use of /suicide command
|
||||
default: op
|
||||
essentialsc.command.fly:
|
||||
description: Allows use of /fly command
|
||||
default: op
|
||||
essentialsc.command.heal:
|
||||
description: Allows use of /heal command
|
||||
default: op
|
||||
essentialsc.command.vanish:
|
||||
description: Allows use of /vanish command
|
||||
default: op
|
||||
essentialsc.command.seen:
|
||||
description: Allows use of /seen command
|
||||
default: op
|
||||
essentialsc.command.admin:
|
||||
description: Allows use of /admin command
|
||||
default: op
|
||||
essentialsc.command.feed:
|
||||
description: Allows use of /feed command
|
||||
default: op
|
||||
essentialsc.command.repair:
|
||||
description: Allows use of /repair command
|
||||
default: op
|
||||
essentialsc.command.help:
|
||||
description: Allows use of /essentialsc help command
|
||||
default: true
|
||||
essentialsc.*:
|
||||
description: All EssentialsC permissions
|
||||
default: false
|
||||
children:
|
||||
essentialsc.command.workbench: true
|
||||
essentialsc.command.anvil: true
|
||||
essentialsc.command.enchantingtable: true
|
||||
essentialsc.command.cartographytable: true
|
||||
essentialsc.command.grindstone: true
|
||||
essentialsc.command.loom: true
|
||||
essentialsc.command.smithingtable: true
|
||||
essentialsc.command.stonecutter: true
|
||||
essentialsc.command.enderchest: true
|
||||
essentialsc.command.hat: true
|
||||
essentialsc.command.suicide: true
|
||||
essentialsc.command.fly: true
|
||||
essentialsc.command.heal: true
|
||||
essentialsc.command.vanish: true
|
||||
essentialsc.command.seen: true
|
||||
essentialsc.command.admin: true
|
||||
essentialsc.command.feed: true
|
||||
essentialsc.command.repair: true
|
||||
essentialsc.command.help: true
|
||||
Reference in New Issue
Block a user