diff --git a/README.md b/README.md index 8fe44eb..c531438 100644 --- a/README.md +++ b/README.md @@ -66,9 +66,12 @@ permissions: # 传送请求过期时间 expireTime: 30 -messages: ... # 见源文件 ``` +### 消息配置文件 ([messages.yml](src/main/resources/messages.yml)) + +详见源文件。 + ### 玩家数据配置文件 (data/\.yml) ```yaml diff --git a/pom.xml b/pom.xml index 5423d24..da9074f 100644 --- a/pom.xml +++ b/pom.xml @@ -3,6 +3,13 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + + 8 + 8 + UTF-8 + UTF-8 + cc.carm.plugin moeteleport @@ -21,25 +28,16 @@ GitHub Actions ${project.url}/actions/workflows/maven.yml + CarmJos Carm Jos carm@carm.cc https://work.carm.cc - - Main Developer - - - 8 - 8 - UTF-8 - UTF-8 - - diff --git a/src/main/java/cc/carm/plugin/moeteleport/Main.java b/src/main/java/cc/carm/plugin/moeteleport/Main.java index a6f74fa..c270913 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/Main.java +++ b/src/main/java/cc/carm/plugin/moeteleport/Main.java @@ -1,6 +1,7 @@ package cc.carm.plugin.moeteleport; import cc.carm.plugin.moeteleport.listener.UserListener; +import cc.carm.plugin.moeteleport.manager.ConfigManager; import cc.carm.plugin.moeteleport.util.ColorParser; import org.bukkit.Bukkit; import org.bukkit.command.CommandExecutor; @@ -23,8 +24,7 @@ public class Main extends JavaPlugin { long startTime = System.currentTimeMillis(); log("加载配置文件..."); - saveDefaultConfig(); - reloadConfig(); + ConfigManager.initConfig(); log("注册监听器..."); regListener(new UserListener()); diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/TpAcceptCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/TpAcceptCommand.java deleted file mode 100644 index 4122f16..0000000 --- a/src/main/java/cc/carm/plugin/moeteleport/command/TpAcceptCommand.java +++ /dev/null @@ -1,4 +0,0 @@ -package cc.carm.plugin.moeteleport.command; - -public class TpAcceptCommand { -} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/TpaCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/TpaCommand.java deleted file mode 100644 index 77fa700..0000000 --- a/src/main/java/cc/carm/plugin/moeteleport/command/TpaCommand.java +++ /dev/null @@ -1,4 +0,0 @@ -package cc.carm.plugin.moeteleport.command; - -public class TpaCommand { -} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/TpaDenyCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/TpaDenyCommand.java deleted file mode 100644 index 35b8adc..0000000 --- a/src/main/java/cc/carm/plugin/moeteleport/command/TpaDenyCommand.java +++ /dev/null @@ -1,4 +0,0 @@ -package cc.carm.plugin.moeteleport.command; - -public class TpaDenyCommand { -} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpAcceptCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpAcceptCommand.java new file mode 100644 index 0000000..643217e --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpAcceptCommand.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.command.tpa; + +public class TpAcceptCommand { +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java new file mode 100644 index 0000000..6b6999a --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaCommand.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.command.tpa; + +public class TpaCommand { +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaDenyCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaDenyCommand.java new file mode 100644 index 0000000..0410da3 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaDenyCommand.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.command.tpa; + +public class TpaDenyCommand { +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaHereCommand.java b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaHereCommand.java new file mode 100644 index 0000000..5284cdc --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/command/tpa/TpaHereCommand.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.command.tpa; + +public class TpaHereCommand { +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java new file mode 100644 index 0000000..8e3ce3a --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginConfig.java @@ -0,0 +1,17 @@ +package cc.carm.plugin.moeteleport.configuration; + +import cc.carm.plugin.moeteleport.configuration.values.ConfigValue; +import cc.carm.plugin.moeteleport.manager.ConfigManager; + +import java.util.HashMap; + +public class PluginConfig { + + public static HashMap getPermissions() { + return ConfigManager.getPermissions(); + } + + public static final ConfigValue EXPIRE_TIME = new ConfigValue<>("expireTime", Integer.class, 30); + public static final ConfigValue DEFAULT_HOME = new ConfigValue<>("defaultHome", Integer.class, 1); + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java new file mode 100644 index 0000000..1f2e5dd --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/PluginMessages.java @@ -0,0 +1,34 @@ +package cc.carm.plugin.moeteleport.configuration; + +import cc.carm.plugin.moeteleport.configuration.message.ConfigMessage; +import cc.carm.plugin.moeteleport.configuration.message.ConfigMessageList; + +public class PluginMessages { + + public static final ConfigMessageList NO_LAST_LOCATION = new ConfigMessageList("no-last-location"); + + public static final ConfigMessageList TPA = new ConfigMessageList("tpa"); + public static final ConfigMessageList TPA_HERE = new ConfigMessageList("tpahere"); + public static final ConfigMessageList TPA_ACCEPT = new ConfigMessageList("tpaccept"); + public static final ConfigMessageList TPA_DENY = new ConfigMessageList("tpadeny"); + + public static final ConfigMessageList ACCEPTED = new ConfigMessageList("accepted"); + public static final ConfigMessageList DENIED = new ConfigMessageList("denied"); + + public static final ConfigMessageList TELEPORTING = new ConfigMessageList("teleporting"); + public static final ConfigMessageList DANGEROUS = new ConfigMessageList("dangerous"); + + public static class Request { + public static final ConfigMessageList MULTI = new ConfigMessageList("multi-requests"); + public static final ConfigMessageList TIMEOUT = new ConfigMessageList("request-timeout"); + public static final ConfigMessageList NOT_FOUND = new ConfigMessageList("no-request"); + public static final ConfigMessageList NOT_FOUND_PLAYER = new ConfigMessageList("no-request-player"); + } + + public static class Home { + public static final ConfigMessageList HEADER = new ConfigMessageList("home-list-header"); + public static final ConfigMessage LIST_OBJECT = new ConfigMessage("home-list-object"); + } + + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java new file mode 100644 index 0000000..ff2bf62 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/file/FileConfig.java @@ -0,0 +1,64 @@ +package cc.carm.plugin.moeteleport.configuration.file; + + +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.IOException; + +public class FileConfig { + + private final JavaPlugin plugin; + + private final String fileName; + + private File file; + private FileConfiguration config; + + public FileConfig(final JavaPlugin plugin) { + this(plugin, "config.yml"); + } + + public FileConfig(final JavaPlugin plugin, final String name) { + this.plugin = plugin; + this.fileName = name; + initFile(); + } + + private void initFile() { + this.file = new File(plugin.getDataFolder(), fileName); + if (!this.file.exists()) { + if (!this.file.getParentFile().exists()) { + boolean success = this.file.getParentFile().mkdirs(); + } + plugin.saveResource(fileName, true); + } + this.config = YamlConfiguration.loadConfiguration(this.file); + } + + public File getFile() { + return file; + } + + public FileConfiguration getConfig() { + return config; + } + + public void save() { + try { + getConfig().save(getFile()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void reload() { + if (getFile().exists()) { + this.config = YamlConfiguration.loadConfiguration(getFile()); + } else { + initFile(); + } + } +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java new file mode 100644 index 0000000..28ea100 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessage.java @@ -0,0 +1,32 @@ +package cc.carm.plugin.moeteleport.configuration.message; + +import cc.carm.plugin.moeteleport.configuration.values.ConfigValue; +import cc.carm.plugin.moeteleport.manager.ConfigManager; +import cc.carm.plugin.moeteleport.util.MessageUtil; +import org.bukkit.command.CommandSender; + +import java.util.Collections; + +public class ConfigMessage extends ConfigValue { + + public ConfigMessage(String configSection) { + this(configSection, null); + } + + public ConfigMessage(String configSection, String defaultValue) { + super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); + } + + public void send(CommandSender sender) { + MessageUtil.send(sender, get()); + } + + public void sendWithPlaceholders(CommandSender sender) { + MessageUtil.sendWithPlaceholders(sender, get()); + } + + public void sendWithPlaceholders(CommandSender sender, String[] params, Object[] values) { + MessageUtil.sendWithPlaceholders(sender, Collections.singletonList(get()), params, values); + } + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java new file mode 100644 index 0000000..af68508 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/message/ConfigMessageList.java @@ -0,0 +1,29 @@ +package cc.carm.plugin.moeteleport.configuration.message; + +import cc.carm.plugin.moeteleport.configuration.values.ConfigValueList; +import cc.carm.plugin.moeteleport.manager.ConfigManager; +import cc.carm.plugin.moeteleport.util.MessageUtil; +import org.bukkit.command.CommandSender; + +public class ConfigMessageList extends ConfigValueList { + + public ConfigMessageList(String configSection) { + super(ConfigManager.getMessageConfig(), configSection, String.class); + } + + public ConfigMessageList(String configSection, String[] defaultValue) { + super(ConfigManager.getMessageConfig(), configSection, String.class, defaultValue); + } + + public void send(CommandSender sender) { + MessageUtil.send(sender, get()); + } + + public void sendWithPlaceholders(CommandSender sender) { + MessageUtil.sendWithPlaceholders(sender, get()); + } + + public void sendWithPlaceholders(CommandSender sender, String[] params, Object[] values) { + MessageUtil.sendWithPlaceholders(sender, get(), params, values); + } +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValue.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValue.java new file mode 100644 index 0000000..59e251b --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValue.java @@ -0,0 +1,58 @@ +package cc.carm.plugin.moeteleport.configuration.values; + +import cc.carm.plugin.moeteleport.configuration.file.FileConfig; +import cc.carm.plugin.moeteleport.manager.ConfigManager; +import org.bukkit.configuration.file.FileConfiguration; + +public class ConfigValue { + + FileConfig source; + + String configSection; + Class clazz; + V defaultValue; + + public ConfigValue(String configSection, Class clazz) { + this(configSection, clazz, null); + } + + public ConfigValue(String configSection, Class clazz, V defaultValue) { + this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue); + } + + public ConfigValue(FileConfig source, String configSection, Class clazz, V defaultValue) { + this.source = source; + this.configSection = configSection; + this.clazz = clazz; + this.defaultValue = defaultValue; + } + + public FileConfiguration getConfiguration() { + return this.source.getConfig(); + } + + public V get() { + if (getConfiguration().contains(this.configSection)) { + Object val = getConfiguration().get(this.configSection, this.defaultValue); + return this.clazz.isInstance(val) ? this.clazz.cast(val) : this.defaultValue; + } else { + // 如果没有默认值,就把配置写进去,便于配置 + return setDefault(); + } + } + + public void set(V value) { + getConfiguration().set(this.configSection, value); + this.save(); + } + + public void save() { + this.source.save(); + } + + public V setDefault() { + set(this.defaultValue); + return this.defaultValue; + } + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java new file mode 100644 index 0000000..d8ebfdb --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/configuration/values/ConfigValueList.java @@ -0,0 +1,71 @@ +package cc.carm.plugin.moeteleport.configuration.values; + +import cc.carm.plugin.moeteleport.configuration.file.FileConfig; +import cc.carm.plugin.moeteleport.manager.ConfigManager; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class ConfigValueList { + FileConfig source; + String configSection; + Class clazz; + + V[] defaultValue; + + public ConfigValueList(String configSection, Class clazz) { + this(ConfigManager.getPluginConfig(), configSection, clazz); + } + + public ConfigValueList(String configSection, Class clazz, V[] defaultValue) { + this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue); + } + + public ConfigValueList(FileConfig configuration, String configSection, Class clazz) { + this(configuration, configSection, clazz, null); + } + + public ConfigValueList(FileConfig configuration, String configSection, Class clazz, V[] defaultValue) { + this.source = configuration; + this.configSection = configSection; + this.clazz = clazz; + this.defaultValue = defaultValue; + } + + public FileConfiguration getConfiguration() { + return this.source.getConfig(); + } + + + public ArrayList get() { + List list = getConfiguration().getList(this.configSection); + if (list == null) { + if (defaultValue != null) { + return new ArrayList<>(Arrays.asList(defaultValue)); + } else { + return new ArrayList<>(); + } + } else { + ArrayList result = new ArrayList<>(); + + for (Object object : list) { + if (this.clazz.isInstance(object)) { + result.add(this.clazz.cast(object)); + } + } + return result; + } + } + + public void set(ArrayList value) { + getConfiguration().set(this.configSection, value); + this.save(); + } + + public void save() { + this.source.save(); + } + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java new file mode 100644 index 0000000..dcba48e --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/ConfigManager.java @@ -0,0 +1,63 @@ +package cc.carm.plugin.moeteleport.manager; + +import cc.carm.plugin.moeteleport.Main; +import cc.carm.plugin.moeteleport.configuration.PluginConfig; +import cc.carm.plugin.moeteleport.configuration.file.FileConfig; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; + +import java.util.HashMap; +import java.util.Set; +import java.util.stream.Collectors; + +public class ConfigManager { + + private static FileConfig config; + private static FileConfig messageConfig; + + private static HashMap permissionsMap; + + public static void initConfig() { + ConfigManager.config = new FileConfig(Main.getInstance(), "config.yml"); + ConfigManager.messageConfig = new FileConfig(Main.getInstance(), "messages.yml"); + permissionsMap = loadPermissions(); + } + + public static FileConfig getPluginConfig() { + return config; + } + + public static FileConfig getMessageConfig() { + return messageConfig; + } + + public static HashMap getPermissions() { + return permissionsMap; + } + + public static HashMap loadPermissions() { + FileConfiguration config = getPluginConfig().getConfig(); + ConfigurationSection section = config.getConfigurationSection("permissions"); + if (section == null) return new HashMap<>(); + Set permissionNodes = section.getKeys(false); + if (permissionNodes.isEmpty()) return new HashMap<>(); + return permissionNodes.stream() + .collect(Collectors.toMap( + s -> s, s -> section.getInt(s, PluginConfig.DEFAULT_HOME.get()), + (a, b) -> b, HashMap::new + )); + } + + public static void reload() { + getPluginConfig().reload(); + getMessageConfig().reload(); + permissionsMap = loadPermissions(); + } + + public static void saveConfig() { + getPluginConfig().save(); + getMessageConfig().save(); + } + + +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java b/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java new file mode 100644 index 0000000..d473ab5 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/manager/UserManager.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.manager; + +public class UserManager { +} diff --git a/src/main/java/cc/carm/plugin/moeteleport/user/UserData.java b/src/main/java/cc/carm/plugin/moeteleport/user/UserData.java new file mode 100644 index 0000000..931aad8 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/user/UserData.java @@ -0,0 +1,4 @@ +package cc.carm.plugin.moeteleport.user; + +public class UserData { +} diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index e10ed5c..b036fe9 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -9,42 +9,4 @@ permissions: "home.vip": 10 # 最多可以设置10个家 # 传送请求过期时间 -expireTime: 30 - -messages: - no-last-location: - - "&f您当前没有进行传送,无法返回上个地点。" - tpa: - - "&6%(player) &f请求传送到您身边,您有30秒的时间处理。" - - "&a&l[同意] &f输入 &e/tpaccept &f同意该请求。" - - "&c&l[拒绝] &f输入 &e/tpadeny &f拒绝该请求。" - tpahere: - - "&6%(player) &f请求传送您到Ta身边,您有30秒的时间处理。" - - "&a&l[同意] &f输入 &e/tpaccept &f同意该请求。" - - "&c&l[拒绝] &f输入 &e/tpadeny &f拒绝该请求。" - tpaccept: - - "&f您同意了 &6%(player) &f的传送请求。" - tpadeny: - - "&f您&c拒绝&f了 &6%(player) &f的传送请求。" - accepted: - - "&6%(player) &f同意了您的传送请求。" - denied: - - "&6%(player) &c拒绝&f了您的传送请求。" - - no-request: - - "&f您当前没有任何待处理的传送请求。" - no-request-player: - - "&f您当前没有收到来自 &6%(player) &f的传送请求。" - multi-requests: - - "&f您当前有条请求待处理,请输入 &6%(command) <玩家名> &f决定处理谁的请求。" - - "&f您也可以再次输入 &6%(command) &f直接处理最近的一条请求。" - request-timeout: - - "&f来自 &6%(player) &f的传送请求已超时。" - teleporting: - - "&f正在传送到 &6&(location) &f..." - dangerous: - - "&f目标地点不安全,传送被取消。若您执意传送可再次输入 &6/tpaccept &f。" - - home-list-header: - - "&f您当前设定的所有家:" - home-list-object: "&8#&f%(id) &6(location)" \ No newline at end of file +expireTime: 30 \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml new file mode 100644 index 0000000..8e0732c --- /dev/null +++ b/src/main/resources/messages.yml @@ -0,0 +1,36 @@ +no-last-location: + - "&f您当前没有进行传送,无法返回上个地点。" +tpa: + - "&6%(player) &f请求传送到您身边,您有30秒的时间处理。" + - "&a&l[同意] &f输入 &e/tpaccept &f同意该请求。" + - "&c&l[拒绝] &f输入 &e/tpadeny &f拒绝该请求。" +tpahere: + - "&6%(player) &f请求传送您到Ta身边,您有30秒的时间处理。" + - "&a&l[同意] &f输入 &e/tpaccept &f同意该请求。" + - "&c&l[拒绝] &f输入 &e/tpadeny &f拒绝该请求。" +tpaccept: + - "&f您同意了 &6%(player) &f的传送请求。" +tpadeny: + - "&f您&c拒绝&f了 &6%(player) &f的传送请求。" +accepted: + - "&6%(player) &f同意了您的传送请求。" +denied: + - "&6%(player) &c拒绝&f了您的传送请求。" + +no-request: + - "&f您当前没有任何待处理的传送请求。" +no-request-player: + - "&f您当前没有收到来自 &6%(player) &f的传送请求。" +multi-requests: + - "&f您当前有条请求待处理,请输入 &6%(command) <玩家名> &f决定处理谁的请求。" + - "&f您也可以再次输入 &6%(command) &f直接处理最近的一条请求。" +request-timeout: + - "&f来自 &6%(player) &f的传送请求已超时。" +teleporting: + - "&f正在传送到 &6&(location) &f..." +dangerous: + - "&f目标地点不安全,传送被取消。若您执意传送可再次输入 &6/tpaccept &f。" + +home-list-header: + - "&f您当前设定的所有家:" +home-list-object: "&8#&f%(id) &6(location)" \ No newline at end of file