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

feat(rename): 支持地标点与家传送点的重命名功能

This commit is contained in:
Carm Jos 2023-02-19 04:52:24 +08:00
parent f728d1f7e6
commit 0d1fdccb79
27 changed files with 235 additions and 64 deletions

View File

@ -11,9 +11,9 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<deps.easyplugin.version>1.4.19</deps.easyplugin.version>
<deps.easyplugin.version>1.5.2</deps.easyplugin.version>
<deps.easysql.version>0.4.6</deps.easysql.version>
<deps.mineconfig.version>2.3.1</deps.mineconfig.version>
<deps.mineconfig.version>2.3.3</deps.mineconfig.version>
</properties>
<groupId>cc.carm.plugin</groupId>

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command;
import cc.carm.lib.easyplugin.command.CommandHandler;
import cc.carm.plugin.moeteleport.command.parent.*;
import cc.carm.plugin.moeteleport.command.sub.*;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.sub;
package cc.carm.plugin.moeteleport.command.base;
import cc.carm.lib.easyplugin.command.SubCommand;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.HomeCommands;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.storage.UserData;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.sub;
package cc.carm.plugin.moeteleport.command.base;
import cc.carm.lib.easyplugin.command.SubCommand;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.TeleportCommands;
import cc.carm.plugin.moeteleport.command.sub.TeleportCommands;
import cc.carm.plugin.moeteleport.storage.UserData;
import cc.carm.plugin.moeteleport.teleport.TeleportRequest;
import org.bukkit.Bukkit;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.sub;
package cc.carm.plugin.moeteleport.command.base;
import cc.carm.lib.easyplugin.command.SubCommand;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.manager.WarpManager;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.moeteleport.command.parent;
package cc.carm.plugin.moeteleport.command.sub;
import cc.carm.lib.easyplugin.command.SubCommand;
import cc.carm.plugin.moeteleport.MoeTeleport;

View File

@ -1,11 +1,8 @@
package cc.carm.plugin.moeteleport.command.parent;
package cc.carm.plugin.moeteleport.command.sub;
import cc.carm.lib.easyplugin.command.CommandHandler;
import cc.carm.plugin.moeteleport.command.MainCommands;
import cc.carm.plugin.moeteleport.command.home.HomeCreateCommand;
import cc.carm.plugin.moeteleport.command.home.HomeDeleteCommand;
import cc.carm.plugin.moeteleport.command.home.HomeListCommand;
import cc.carm.plugin.moeteleport.command.home.HomeTeleportCommand;
import cc.carm.plugin.moeteleport.command.sub.home.*;
import cc.carm.plugin.moeteleport.conf.PluginConfig;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import org.bukkit.command.Command;
@ -26,6 +23,7 @@ public class HomeCommands extends CommandHandler {
registerSubCommand(new HomeListCommand(this, "list", "ls"));
registerSubCommand(new HomeCreateCommand(this, "set", "create"));
registerSubCommand(new HomeDeleteCommand(this, "delete", "remove", "del"));
registerSubCommand(new HomeRenameCommand(this, "rename", "rn"));
}

View File

@ -1,4 +1,4 @@
package cc.carm.plugin.moeteleport.command.parent;
package cc.carm.plugin.moeteleport.command.sub;
import cc.carm.lib.easyplugin.command.SubCommand;
import cc.carm.plugin.moeteleport.Main;

View File

@ -1,10 +1,10 @@
package cc.carm.plugin.moeteleport.command.parent;
package cc.carm.plugin.moeteleport.command.sub;
import cc.carm.lib.easyplugin.command.CommandHandler;
import cc.carm.plugin.moeteleport.command.MainCommands;
import cc.carm.plugin.moeteleport.command.teleport.TeleportCancelCommand;
import cc.carm.plugin.moeteleport.command.teleport.TeleportHandleCommand;
import cc.carm.plugin.moeteleport.command.teleport.TeleportRequestCommand;
import cc.carm.plugin.moeteleport.command.sub.teleport.TeleportCancelCommand;
import cc.carm.plugin.moeteleport.command.sub.teleport.TeleportHandleCommand;
import cc.carm.plugin.moeteleport.command.sub.teleport.TeleportRequestCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.teleport.TeleportRequest;
import org.bukkit.command.CommandSender;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.parent;
package cc.carm.plugin.moeteleport.command.sub;
import cc.carm.lib.easyplugin.command.CommandHandler;
import cc.carm.plugin.moeteleport.command.MainCommands;
import cc.carm.plugin.moeteleport.command.warp.*;
import cc.carm.plugin.moeteleport.command.sub.warp.*;
import cc.carm.plugin.moeteleport.conf.PluginConfig;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import org.bukkit.command.Command;
@ -24,6 +24,7 @@ public class WarpCommands extends CommandHandler {
registerSubCommand(new WarpInfoCommand(this, "info", "i"));
registerSubCommand(new WarpCreateCommand(this, "set", "create"));
registerSubCommand(new WarpDeleteCommand(this, "delete", "remove", "del"));
registerSubCommand(new WarpRenameCommand(this, "rename", "rn"));
}

View File

@ -1,9 +1,9 @@
package cc.carm.plugin.moeteleport.command.home;
package cc.carm.plugin.moeteleport.command.sub.home;
import cc.carm.lib.easyplugin.command.SimpleCompleter;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.HomeCommands;
import cc.carm.plugin.moeteleport.command.sub.HomeSubCommand;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.command.base.HomeSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
import cc.carm.plugin.moeteleport.storage.UserData;

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command.home;
package cc.carm.plugin.moeteleport.command.sub.home;
import cc.carm.plugin.moeteleport.command.parent.HomeCommands;
import cc.carm.plugin.moeteleport.command.sub.HomeSubCommand;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.command.base.HomeSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
import cc.carm.plugin.moeteleport.storage.UserData;

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command.home;
package cc.carm.plugin.moeteleport.command.sub.home;
import cc.carm.plugin.moeteleport.command.parent.HomeCommands;
import cc.carm.plugin.moeteleport.command.sub.HomeSubCommand;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.command.base.HomeSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.storage.UserData;
import org.bukkit.command.CommandSender;

View File

@ -0,0 +1,71 @@
package cc.carm.plugin.moeteleport.command.sub.home;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.command.base.HomeSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
import cc.carm.plugin.moeteleport.storage.UserData;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class HomeRenameCommand extends HomeSubCommand {
public HomeRenameCommand(@NotNull HomeCommands parent, String name, String... aliases) {
super(parent, name, aliases);
}
@Override
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) throws Exception {
if (!(sender instanceof Player)) {
PluginMessages.NOT_PLAYER.send(sender);
return null;
}
if (args.length < 2) return getParent().noArgs(sender);
String homeName = args[0];
String newName = args[1];
if (homeName.equals(newName)) return getParent().noArgs(sender);
if (newName.length() > 32) { // 超过家的名字长度限定
PluginMessages.HOME.NAME_TOO_LONG.send(sender);
return null;
}
Player player = (Player) sender;
UserData data = getData(player);
Map.Entry<String, DataLocation> locationInfo = data.getHomeLocation(homeName);
if (locationInfo == null) {
PluginMessages.HOME.NOT_FOUND.send(player);
return null;
}
Map.Entry<String, DataLocation> newInfo = data.getHomeLocation(newName);
if (newInfo != null) {
PluginMessages.HOME.ALREADY_EXITS.send(player);
return null;
}
PluginMessages.HOME.RENAMED.send(player, newName, locationInfo.getKey());
data.setHomeLocation(newName, locationInfo.getValue().getBukkitLocation());
data.delHomeLocation(homeName);
return null;
}
@Override
public List<String> tabComplete(JavaPlugin plugin, CommandSender sender, String[] args) {
if (args.length == 1) {
return listHomes(sender, args[args.length - 1]);
} else return Collections.emptyList();
}
}

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.home;
package cc.carm.plugin.moeteleport.command.sub.home;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.HomeCommands;
import cc.carm.plugin.moeteleport.command.sub.HomeSubCommand;
import cc.carm.plugin.moeteleport.command.sub.HomeCommands;
import cc.carm.plugin.moeteleport.command.base.HomeSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
import cc.carm.plugin.moeteleport.storage.UserData;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.teleport;
package cc.carm.plugin.moeteleport.command.sub.teleport;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.TeleportCommands;
import cc.carm.plugin.moeteleport.command.sub.TeleportSubCommand;
import cc.carm.plugin.moeteleport.command.sub.TeleportCommands;
import cc.carm.plugin.moeteleport.command.base.TeleportSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.teleport.TeleportRequest;
import org.bukkit.command.CommandSender;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.teleport;
package cc.carm.plugin.moeteleport.command.sub.teleport;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.TeleportCommands;
import cc.carm.plugin.moeteleport.command.sub.TeleportSubCommand;
import cc.carm.plugin.moeteleport.command.sub.TeleportCommands;
import cc.carm.plugin.moeteleport.command.base.TeleportSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.storage.UserData;
import cc.carm.plugin.moeteleport.teleport.TeleportRequest;

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command.teleport;
package cc.carm.plugin.moeteleport.command.sub.teleport;
import cc.carm.plugin.moeteleport.command.parent.TeleportCommands;
import cc.carm.plugin.moeteleport.command.sub.TeleportSubCommand;
import cc.carm.plugin.moeteleport.command.sub.TeleportCommands;
import cc.carm.plugin.moeteleport.command.base.TeleportSubCommand;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;

View File

@ -1,9 +1,9 @@
package cc.carm.plugin.moeteleport.command.teleport;
package cc.carm.plugin.moeteleport.command.sub.teleport;
import cc.carm.lib.easyplugin.command.SimpleCompleter;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.TeleportCommands;
import cc.carm.plugin.moeteleport.command.sub.TeleportSubCommand;
import cc.carm.plugin.moeteleport.command.sub.TeleportCommands;
import cc.carm.plugin.moeteleport.command.base.TeleportSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.teleport.TeleportRequest;
import org.bukkit.Bukkit;

View File

@ -1,9 +1,9 @@
package cc.carm.plugin.moeteleport.command.warp;
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.lib.easyplugin.command.SimpleCompleter;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpSubCommand;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command.warp;
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpSubCommand;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;

View File

@ -1,7 +1,7 @@
package cc.carm.plugin.moeteleport.command.warp;
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpSubCommand;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;

View File

@ -1,8 +1,8 @@
package cc.carm.plugin.moeteleport.command.warp;
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.lib.easyplugin.command.SimpleCompleter;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpSubCommand;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;

View File

@ -0,0 +1,71 @@
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.plugin.moeteleport.Main;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.List;
public class WarpRenameCommand extends WarpSubCommand {
public WarpRenameCommand(@NotNull WarpCommands parent, String name, String... aliases) {
super(parent, name, aliases);
}
@Override
public Void execute(JavaPlugin plugin, CommandSender sender, String[] args) throws Exception {
if (!(sender instanceof Player)) {
PluginMessages.NOT_PLAYER.send(sender);
return null;
}
if (args.length < 2) return getParent().noArgs(sender);
String oldName = args[0];
String newName = args[1];
if (oldName.equals(newName)) return getParent().noArgs(sender);
if (newName.length() > 16) { // 超过地标的名字长度限定
PluginMessages.WARP.NAME_TOO_LONG.send(sender);
return null;
}
Player player = (Player) sender;
WarpInfo info = getWarp(oldName);
if (info == null) {
PluginMessages.WARP.NOT_FOUND.send(player);
return null;
}
WarpInfo newInfo = getWarp(oldName);
if (newInfo != null) {
PluginMessages.WARP.ALREADY_EXITS.send(player);
return null;
}
PluginMessages.WARP.RENAMED.send(player, newName, info.getLocation());
Main.getInstance().getScheduler().runAsync(() -> {
getManager().setWarp(newName, player.getUniqueId(), info.getLocation());
getManager().delWarp(oldName);
});
return null;
}
@Override
public List<String> tabComplete(JavaPlugin plugin, CommandSender sender, String[] args) {
if (args.length == 1) {
return listWarpNames(sender, args[args.length - 1], true);
} else return Collections.emptyList();
}
}

View File

@ -1,10 +1,9 @@
package cc.carm.plugin.moeteleport.command.warp;
package cc.carm.plugin.moeteleport.command.sub.warp;
import cc.carm.plugin.moeteleport.MoeTeleport;
import cc.carm.plugin.moeteleport.command.parent.WarpCommands;
import cc.carm.plugin.moeteleport.command.sub.WarpSubCommand;
import cc.carm.plugin.moeteleport.command.sub.WarpCommands;
import cc.carm.plugin.moeteleport.command.base.WarpSubCommand;
import cc.carm.plugin.moeteleport.conf.PluginMessages;
import cc.carm.plugin.moeteleport.manager.TeleportManager;
import cc.carm.plugin.moeteleport.model.WarpInfo;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;

View File

@ -54,6 +54,7 @@ public class PluginConfig extends ConfigurationRoot {
map.put("delHome", "home delete");
map.put("listHomes", "home list");
map.put("listHome", "home list");
map.put("renameHome", "home rename");
map.put("warp", "warp to");
map.put("setWarp", "warp set");
@ -61,6 +62,7 @@ public class PluginConfig extends ConfigurationRoot {
map.put("warpInfo", "warp info");
map.put("listWarps", "warp list");
map.put("listWarp", "warp list");
map.put("renameWarp", "warp rename");
}).build();
}

View File

@ -1,6 +1,7 @@
package cc.carm.plugin.moeteleport.conf;
import cc.carm.lib.configuration.core.ConfigurationRoot;
import cc.carm.lib.configuration.core.annotation.HeaderComment;
import cc.carm.lib.easyplugin.utils.ColorParser;
import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageListBuilder;
import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageValueBuilder;
@ -17,6 +18,13 @@ import org.jetbrains.annotations.NotNull;
import java.util.function.BiFunction;
@HeaderComment({
"MoeTeleport 传送插件的消息配置文件",
"如特定的消息不需要任何提示,可直接留下单行空内容消息。",
"支持 支持 &+颜色代码(原版颜色)、§(#XXXXXX)(RGB颜色) 与 &<#XXXXXX>(前后标注RGB颜色渐变)。",
" "
})
public class PluginMessages extends ConfigurationRoot {
public static @NotNull CraftMessageListBuilder<BaseComponent[]> list() {
@ -95,7 +103,9 @@ public class PluginMessages extends ConfigurationRoot {
"&8-&7&o 若地标点已存在,且您是地标点的设立者,",
"&8-&7&o 则会覆盖原有的地标点位置。",
"&8#&f warp delete &d[地标名]",
"&8-&7 删除一个自己设立的地标点。"
"&8-&7 删除一个自己设立的地标点。",
"&8#&f warp rename &d<原地标名> &d<新地标名>",
"&8-&7 重命名一个自己设立的地标点。"
).build();
public static final ConfiguredMessageList<BaseComponent[]> HOMES = list().defaults(
@ -110,7 +120,9 @@ public class PluginMessages extends ConfigurationRoot {
"&8-&7 设定一个家的位置。",
"&8-&7&o 若不填写家的名称则默认为“home”",
"&8#&f home delete &d[家名]",
"&8-&7 删除一个家的位置。"
"&8-&7 删除一个家的位置。",
"&8#&f home rename &d<原家名> &d<新家名>",
"&8-&7 重命名一个家传送点的名称。"
).build();
}
@ -257,6 +269,11 @@ public class PluginMessages extends ConfigurationRoot {
"&7或输入 &5/setHome <家名称> &7覆盖之前的家传送点。"
).params("max").build();
public static final ConfiguredMessageList<BaseComponent[]> ALREADY_EXITS = list()
.defaults("&f您已存在名为 &d%(name) &f的家传送点换个名字叭~")
.params("name")
.build();
public static final ConfiguredMessageList<BaseComponent[]> NOT_FOUND = list()
.defaults("&f您还没有设置这个家请先输入 &5/setHome <家名称> &f设置一个吧")
.build();
@ -275,6 +292,10 @@ public class PluginMessages extends ConfigurationRoot {
"&8原先位置为 &5%(location) &8。"
).params("name", "location").build();
public static final ConfiguredMessageList<BaseComponent[]> RENAMED = list().defaults(
"&f成功以 &d%(newName) 重命名原先的家传送点 &d&o%(oldName) &f。"
).params("newName", "oldName").build();
public static class LIST extends ConfigurationRoot {
public static final ConfiguredMessageList<BaseComponent[]> HEADER = list().defaults(
@ -336,6 +357,14 @@ public class PluginMessages extends ConfigurationRoot {
"&8原先位置为 &5%(location) &8。"
).params("name", "location").build();
public static final ConfiguredMessageList<BaseComponent[]> ALREADY_EXITS = list()
.defaults("&f已存在名为 &d%(name) &f的地标点换个名字叭~")
.params("name")
.build();
public static final ConfiguredMessageList<BaseComponent[]> RENAMED = list().defaults(
"&f成功以 &d%(newName) 重命名原先的地标点 &d&o%(oldName) &f。"
).params("newName", "oldName").build();
public static class LIST extends ConfigurationRoot {