1
mirror of https://github.com/CarmJos/MoeTeleport.git synced 2024-09-19 21:35:56 +00:00

完成配置读取部分

This commit is contained in:
Carm Jos 2021-12-16 02:21:47 +08:00
parent 7f3ef03f78
commit 0c8cd6dee4
22 changed files with 443 additions and 64 deletions

View File

@ -66,9 +66,12 @@ permissions:
# 传送请求过期时间
expireTime: 30
messages: ... # 见源文件
```
### 消息配置文件 ([messages.yml](src/main/resources/messages.yml))
详见源文件。
### 玩家数据配置文件 (data/\<UUID\>.yml)
```yaml

18
pom.xml
View File

@ -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">
<modelVersion>4.0.0</modelVersion>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<groupId>cc.carm.plugin</groupId>
<artifactId>moeteleport</artifactId>
@ -21,25 +28,16 @@
<system>GitHub Actions</system>
<url>${project.url}/actions/workflows/maven.yml</url>
</ciManagement>
<developers>
<developer>
<id>CarmJos</id>
<name>Carm Jos</name>
<email>carm@carm.cc</email>
<url>https://work.carm.cc</url>
<roles>
<role>Main Developer</role>
</roles>
</developer>
</developers>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
<repositories>
<repository>

View File

@ -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());

View File

@ -1,4 +0,0 @@
package cc.carm.plugin.moeteleport.command;
public class TpAcceptCommand {
}

View File

@ -1,4 +0,0 @@
package cc.carm.plugin.moeteleport.command;
public class TpaCommand {
}

View File

@ -1,4 +0,0 @@
package cc.carm.plugin.moeteleport.command;
public class TpaDenyCommand {
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.command.tpa;
public class TpAcceptCommand {
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.command.tpa;
public class TpaCommand {
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.command.tpa;
public class TpaDenyCommand {
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.command.tpa;
public class TpaHereCommand {
}

View File

@ -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<String, Integer> getPermissions() {
return ConfigManager.getPermissions();
}
public static final ConfigValue<Integer> EXPIRE_TIME = new ConfigValue<>("expireTime", Integer.class, 30);
public static final ConfigValue<Integer> DEFAULT_HOME = new ConfigValue<>("defaultHome", Integer.class, 1);
}

View File

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

View File

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

View File

@ -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<String> {
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);
}
}

View File

@ -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<String> {
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);
}
}

View File

@ -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<V> {
FileConfig source;
String configSection;
Class<V> clazz;
V defaultValue;
public ConfigValue(String configSection, Class<V> clazz) {
this(configSection, clazz, null);
}
public ConfigValue(String configSection, Class<V> clazz, V defaultValue) {
this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue);
}
public ConfigValue(FileConfig source, String configSection, Class<V> 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;
}
}

View File

@ -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<V> {
FileConfig source;
String configSection;
Class<V> clazz;
V[] defaultValue;
public ConfigValueList(String configSection, Class<V> clazz) {
this(ConfigManager.getPluginConfig(), configSection, clazz);
}
public ConfigValueList(String configSection, Class<V> clazz, V[] defaultValue) {
this(ConfigManager.getPluginConfig(), configSection, clazz, defaultValue);
}
public ConfigValueList(FileConfig configuration, String configSection, Class<V> clazz) {
this(configuration, configSection, clazz, null);
}
public ConfigValueList(FileConfig configuration, String configSection, Class<V> clazz, V[] defaultValue) {
this.source = configuration;
this.configSection = configSection;
this.clazz = clazz;
this.defaultValue = defaultValue;
}
public FileConfiguration getConfiguration() {
return this.source.getConfig();
}
public ArrayList<V> 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<V> result = new ArrayList<>();
for (Object object : list) {
if (this.clazz.isInstance(object)) {
result.add(this.clazz.cast(object));
}
}
return result;
}
}
public void set(ArrayList<V> value) {
getConfiguration().set(this.configSection, value);
this.save();
}
public void save() {
this.source.save();
}
}

View File

@ -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<String, Integer> 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<String, Integer> getPermissions() {
return permissionsMap;
}
public static HashMap<String, Integer> loadPermissions() {
FileConfiguration config = getPluginConfig().getConfig();
ConfigurationSection section = config.getConfigurationSection("permissions");
if (section == null) return new HashMap<>();
Set<String> 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();
}
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.manager;
public class UserManager {
}

View File

@ -0,0 +1,4 @@
package cc.carm.plugin.moeteleport.user;
public class UserData {
}

View File

@ -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)"
expireTime: 30

View File

@ -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)"