diff --git a/pom.xml b/pom.xml
index 738549a..f111538 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,32 @@
1.8
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+ false
+
+
+ net.kyori
+ com.drtshock.playervaults.lib.net.kyori
+
+
+ com.google.gson
+ com.drtshock.playervaults.lib.com.google.gson
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
@@ -48,9 +74,47 @@
spigot-repo
https://hub.spigotmc.org/nexus/content/groups/public/
+
+ sonatype
+ http://oss.sonatype.org/content/repositories/snapshots
+
+ false
+
+
+ true
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+ net.kyori
+ adventure-platform-bukkit
+ 4.0.0-SNAPSHOT
+ compile
+
+
+ net.kyori
+ adventure-text-minimessage
+ 4.0.0-SNAPSHOT
+ compile
+
+
+ com.google.code.gson
+ gson
+ 2.8.0
+ compile
+
+
+ org.kitteh
+ cardboardbox
+ 0.1.0
+ compile
+
org.spigotmc
spigot-api
diff --git a/src/main/java/com/drtshock/playervaults/Metrics.java b/src/main/java/com/drtshock/playervaults/Metrics.java
index f145632..caf9f92 100644
--- a/src/main/java/com/drtshock/playervaults/Metrics.java
+++ b/src/main/java/com/drtshock/playervaults/Metrics.java
@@ -143,7 +143,8 @@ public class Metrics {
service.getField("B_STATS_VERSION"); // Our identifier :)
found = true; // We aren't the first
break;
- } catch (NoSuchFieldException ignored) { }
+ } catch (NoSuchFieldException ignored) {
+ }
}
// Register our service
Bukkit.getServicesManager().register(Metrics.class, this, plugin, ServicePriority.Normal);
diff --git a/src/main/java/com/drtshock/playervaults/PlayerVaults.java b/src/main/java/com/drtshock/playervaults/PlayerVaults.java
index 39ee11c..ec05337 100644
--- a/src/main/java/com/drtshock/playervaults/PlayerVaults.java
+++ b/src/main/java/com/drtshock/playervaults/PlayerVaults.java
@@ -25,17 +25,15 @@ import com.drtshock.playervaults.commands.SignSetInfo;
import com.drtshock.playervaults.commands.VaultCommand;
import com.drtshock.playervaults.config.Loader;
import com.drtshock.playervaults.config.file.Config;
+import com.drtshock.playervaults.config.file.Translation;
import com.drtshock.playervaults.listeners.Listeners;
import com.drtshock.playervaults.listeners.SignListener;
import com.drtshock.playervaults.listeners.VaultPreloadListener;
import com.drtshock.playervaults.tasks.Base64Conversion;
import com.drtshock.playervaults.tasks.Cleanup;
-import com.drtshock.playervaults.tasks.UUIDConversion;
-import com.drtshock.playervaults.translations.Lang;
-import com.drtshock.playervaults.translations.Language;
-import com.drtshock.playervaults.vaultmanagement.UUIDVaultManager;
import com.drtshock.playervaults.vaultmanagement.VaultManager;
import com.drtshock.playervaults.vaultmanagement.VaultViewInfo;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
@@ -93,6 +91,8 @@ public class PlayerVaults extends JavaPlugin {
private int maxVaultAmountPermTest;
private Metrics metrics;
private Config config = new Config();
+ private BukkitAudiences platform;
+ private Translation translation = new Translation(this);
public static PlayerVaults getInstance() {
return instance;
@@ -115,25 +115,19 @@ public class PlayerVaults extends JavaPlugin {
instance = this;
long start = System.currentTimeMillis();
long time = System.currentTimeMillis();
+ this.platform = BukkitAudiences.create(this);
+ debug("adventure!", time);
+ time = System.currentTimeMillis();
loadConfig();
DEBUG = getConf().isDebug();
debug("config", time);
time = System.currentTimeMillis();
uuidData = new File(this.getDataFolder(), "uuidvaults");
- vaultData = new File(this.getDataFolder(), "base64vaults");
- debug("vaultdata", time);
- time = System.currentTimeMillis();
- getServer().getScheduler().runTask(this, new UUIDConversion()); // Convert to UUIDs first. Class checks if necessary.
- debug("uuid conversion", time);
- time = System.currentTimeMillis();
- new VaultManager();
+ vaultData = new File(this.getDataFolder(), "newvaults");
+ new VaultManager(this);
getServer().getScheduler().runTask(this, new Base64Conversion());
debug("base64 conversion", time);
time = System.currentTimeMillis();
- loadLang();
- debug("lang", time);
- time = System.currentTimeMillis();
- new UUIDVaultManager();
debug("uuidvaultmanager", time);
time = System.currentTimeMillis();
getServer().getPluginManager().registerEvents(new Listeners(this), this);
@@ -146,10 +140,10 @@ public class PlayerVaults extends JavaPlugin {
loadSigns();
debug("loaded signs", time);
time = System.currentTimeMillis();
- getCommand("pv").setExecutor(new VaultCommand());
- getCommand("pvdel").setExecutor(new DeleteCommand());
- getCommand("pvconvert").setExecutor(new ConvertCommand());
- getCommand("pvsign").setExecutor(new SignCommand());
+ getCommand("pv").setExecutor(new VaultCommand(this));
+ getCommand("pvdel").setExecutor(new DeleteCommand(this));
+ getCommand("pvconvert").setExecutor(new ConvertCommand(this));
+ getCommand("pvsign").setExecutor(new SignCommand(this));
debug("registered commands", time);
time = System.currentTimeMillis();
useVault = setupEconomy();
@@ -221,7 +215,6 @@ public class PlayerVaults extends JavaPlugin {
this.metricsSimplePie("signs", () -> getConf().isSigns() ? "enabled" : "disabled");
this.metricsSimplePie("cleanup", () -> getConf().getPurge().isEnabled() ? "enabled" : "disabled");
- this.metricsSimplePie("language", () -> getConf().getLanguage());
this.metricsDrillPie("block_items", () -> {
Map> map = new HashMap<>();
@@ -313,7 +306,6 @@ public class PlayerVaults extends JavaPlugin {
reloadConfig();
loadConfig(); // To update blocked materials.
reloadSigns();
- loadLang();
sender.sendMessage(ChatColor.GREEN + "Reloaded PlayerVault's configuration and lang files.");
}
return true;
@@ -362,6 +354,24 @@ public class PlayerVaults extends JavaPlugin {
}
}
}
+
+ File lang = new File(this.getDataFolder(), "lang");
+ if (lang.exists()) {
+ this.getLogger().warning("There is no clean way for us to migrate your old lang data.");
+ this.getLogger().warning("If you made any customizations, or used another language, you need to migrate the info to the new format in lang.conf");
+ try {
+ Files.move(lang.toPath(), lang.getParentFile().toPath().resolve("old_unused_lang"));
+ } catch (Exception e) {
+ this.getLogger().log(Level.SEVERE, "Failed to rename lang folder as it is no longer used", e);
+ configYaml.deleteOnExit();
+ }
+ }
+
+ try {
+ Loader.loadAndSave("lang", this.translation);
+ } catch (IOException | IllegalAccessException e) {
+ this.getLogger().log(Level.SEVERE, "Could not load lang.", e);
+ }
}
public Config getConf() {
@@ -428,50 +438,6 @@ public class PlayerVaults extends JavaPlugin {
}
}
- public void loadLang() {
- File folder = new File(getDataFolder(), "lang");
- if (!folder.exists()) {
- folder.mkdir();
- }
-
- String definedLanguage = getConf().getLanguage();
-
- // Save as default just incase.
- File english = null;
- File definedFile = null;
-
- for (Language lang : Language.values()) {
- String fileName = lang.getFriendlyName() + ".yml";
- File file = new File(folder, fileName);
- if (lang == Language.ENGLISH) {
- english = file;
- }
-
- if (definedLanguage.equalsIgnoreCase(lang.getFriendlyName())) {
- definedFile = file;
- }
-
- // Have Bukkit save the file.
- if (!file.exists()) {
- saveResource("lang/" + fileName, false);
- }
- }
-
- if (definedFile != null && !definedFile.exists()) {
- getLogger().severe("Failed to load language for " + definedLanguage + ". Defaulting to English.");
- definedFile = english;
- }
-
- if (definedFile == null) {
- getLogger().severe("Failed to load custom language settings. Loading plugin defaults. This should never happen, go ask for help.");
- return;
- }
-
- YamlConfiguration config = YamlConfiguration.loadConfiguration(definedFile);
- Lang.setFile(config);
- getLogger().info("Loaded lang for " + definedLanguage);
- }
-
public HashMap getSetSign() {
return this.setSign;
}
@@ -572,4 +538,16 @@ public class PlayerVaults extends JavaPlugin {
public int getMaxVaultAmountPermTest() {
return this.maxVaultAmountPermTest;
}
+
+ public BukkitAudiences getPlatform() {
+ return this.platform;
+ }
+
+ public Translation getTL() {
+ return this.translation;
+ }
+
+ public String getVaultTitle(String id) {
+ return this.translation.vaultTitle().with("vault", id).getLegacy();
+ }
}
diff --git a/src/main/java/com/drtshock/playervaults/commands/ConvertCommand.java b/src/main/java/com/drtshock/playervaults/commands/ConvertCommand.java
index d57e95e..4f1ce56 100644
--- a/src/main/java/com/drtshock/playervaults/commands/ConvertCommand.java
+++ b/src/main/java/com/drtshock/playervaults/commands/ConvertCommand.java
@@ -21,7 +21,6 @@ package com.drtshock.playervaults.commands;
import com.drtshock.playervaults.PlayerVaults;
import com.drtshock.playervaults.converters.BackpackConverter;
import com.drtshock.playervaults.converters.Converter;
-import com.drtshock.playervaults.translations.Lang;
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -33,18 +32,20 @@ import java.util.List;
public class ConvertCommand implements CommandExecutor {
private final List converters = new ArrayList<>();
+ private final PlayerVaults plugin;
- public ConvertCommand() {
+ public ConvertCommand(PlayerVaults plugin) {
converters.add(new BackpackConverter());
+ this.plugin = plugin;
}
@Override
public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
if (!sender.hasPermission("playervaults.convert")) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS);
+ this.plugin.getTL().noPerms().title().send(sender);
} else {
if (args.length == 0) {
- sender.sendMessage(Lang.TITLE + "/" + label + " ");
+ sender.sendMessage("/" + label + " ");
} else {
String name = args[0];
final List applicableConverters = new ArrayList<>();
@@ -58,10 +59,10 @@ public class ConvertCommand implements CommandExecutor {
}
}
if (applicableConverters.size() <= 0) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.CONVERT_PLUGIN_NOT_FOUND);
+ this.plugin.getTL().convertPluginNotFound().title().send(sender);
} else {
// Fork into background
- sender.sendMessage(Lang.TITLE + Lang.CONVERT_BACKGROUND.toString());
+ this.plugin.getTL().convertBackground().title().send(sender);
PlayerVaults.getInstance().getServer().getScheduler().runTaskLaterAsynchronously(PlayerVaults.getInstance(), () -> {
int converted = 0;
VaultOperations.setLocked(true);
@@ -71,7 +72,7 @@ public class ConvertCommand implements CommandExecutor {
}
}
VaultOperations.setLocked(false);
- sender.sendMessage(Lang.TITLE + Lang.CONVERT_COMPLETE.toString().replace("%converted", converted + ""));
+ this.plugin.getTL().convertComplete().title().with("count", converted + "").send(sender);
}, 5);
}
}
diff --git a/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java
index eade262..23c40ca 100644
--- a/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java
+++ b/src/main/java/com/drtshock/playervaults/commands/DeleteCommand.java
@@ -19,11 +19,9 @@
package com.drtshock.playervaults.commands;
import com.drtshock.playervaults.PlayerVaults;
-import com.drtshock.playervaults.translations.Lang;
import com.drtshock.playervaults.vaultmanagement.VaultManager;
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -31,11 +29,16 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class DeleteCommand implements CommandExecutor {
+ private final PlayerVaults plugin;
+
+ public DeleteCommand(PlayerVaults plugin) {
+ this.plugin = plugin;
+ }
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (VaultOperations.isLocked()) {
- sender.sendMessage(Lang.TITLE + Lang.LOCKED.toString());
+ this.plugin.getTL().locked().title().send(sender);
return true;
}
switch (args.length) {
@@ -43,7 +46,7 @@ public class DeleteCommand implements CommandExecutor {
if (sender instanceof Player) {
VaultOperations.deleteOwnVault((Player) sender, args[0]);
} else {
- sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY);
+ this.plugin.getTL().playerOnly().title().send(sender);
}
break;
case 2:
@@ -57,19 +60,19 @@ public class DeleteCommand implements CommandExecutor {
if (args[1].equalsIgnoreCase("all")) {
if (sender.hasPermission("playervaults.delete.all")) {
VaultManager.getInstance().deleteAllVaults(target);
- sender.sendMessage(Lang.TITLE.toString() + Lang.DELETE_OTHER_VAULT_ALL.toString().replaceAll("%p", target));
+ this.plugin.getTL().deleteOtherVaultAll().title().with("player", target).send(sender);
PlayerVaults.getInstance().getLogger().info(String.format("%s deleted ALL vaults belonging to %s", sender.getName(), target));
} else {
- sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS);
+ this.plugin.getTL().noPerms().title().send(sender);
}
}
VaultOperations.deleteOtherVault(sender, target, args[1]);
break;
default:
- sender.sendMessage(Lang.TITLE + "/" + label + " ");
- sender.sendMessage(Lang.TITLE + "/" + label + " ");
- sender.sendMessage(Lang.TITLE + "/" + label + " all");
+ sender.sendMessage("/" + label + " ");
+ sender.sendMessage("/" + label + " ");
+ sender.sendMessage("/" + label + " all");
}
return true;
}
diff --git a/src/main/java/com/drtshock/playervaults/commands/SignCommand.java b/src/main/java/com/drtshock/playervaults/commands/SignCommand.java
index b3fea75..901bd4e 100644
--- a/src/main/java/com/drtshock/playervaults/commands/SignCommand.java
+++ b/src/main/java/com/drtshock/playervaults/commands/SignCommand.java
@@ -19,19 +19,23 @@
package com.drtshock.playervaults.commands;
import com.drtshock.playervaults.PlayerVaults;
-import com.drtshock.playervaults.translations.Lang;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class SignCommand implements CommandExecutor {
+ private final PlayerVaults plugin;
+
+ public SignCommand(PlayerVaults plugin) {
+ this.plugin = plugin;
+ }
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender.hasPermission("playervaults.signs.set")) {
if (!PlayerVaults.getInstance().getConf().isSigns()) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.SIGNS_DISABLED.toString());
+ this.plugin.getTL().signsDisabled().title().send(sender);
return true;
}
if (sender instanceof Player) {
@@ -40,31 +44,31 @@ public class SignCommand implements CommandExecutor {
try {
i = Integer.parseInt(args[0]);
} catch (NumberFormatException nfe) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER);
- sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " [owner] <#>");
+ this.plugin.getTL().mustBeNumber().title().send(sender);
+ sender.sendMessage(" /" + label + " [owner] <#>");
return true;
}
PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(i));
- sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN);
+ this.plugin.getTL().clickASign().title().send(sender);
} else if (args.length >= 2) {
int i;
try {
i = Integer.parseInt(args[1]);
} catch (NumberFormatException nfe) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.MUST_BE_NUMBER);
- sender.sendMessage(Lang.TITLE.toString() + "Usage: /" + label + " [owner] <#>");
+ this.plugin.getTL().mustBeNumber().title().send(sender);
+ sender.sendMessage(" /" + label + " [owner] <#>");
return true;
}
PlayerVaults.getInstance().getSetSign().put(sender.getName(), new SignSetInfo(args[0].toLowerCase(), i));
- sender.sendMessage(Lang.TITLE.toString() + Lang.CLICK_A_SIGN);
+ this.plugin.getTL().clickASign().title().send(sender);
} else {
- sender.sendMessage(Lang.TITLE.toString() + Lang.INVALID_ARGS);
+ this.plugin.getTL().invalidArgs().title().send(sender);
}
} else {
- sender.sendMessage(Lang.TITLE.toString() + Lang.PLAYER_ONLY);
+ this.plugin.getTL().playerOnly().title().send(sender);
}
} else {
- sender.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS);
+ this.plugin.getTL().noPerms().title().send(sender);
}
return true;
diff --git a/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java
index e648df4..ee208c6 100644
--- a/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java
+++ b/src/main/java/com/drtshock/playervaults/commands/VaultCommand.java
@@ -19,12 +19,10 @@
package com.drtshock.playervaults.commands;
import com.drtshock.playervaults.PlayerVaults;
-import com.drtshock.playervaults.translations.Lang;
import com.drtshock.playervaults.vaultmanagement.VaultManager;
import com.drtshock.playervaults.vaultmanagement.VaultOperations;
import com.drtshock.playervaults.vaultmanagement.VaultViewInfo;
import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -33,11 +31,16 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
public class VaultCommand implements CommandExecutor {
+ private final PlayerVaults plugin;
+
+ public VaultCommand(PlayerVaults plugin) {
+ this.plugin = plugin;
+ }
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (VaultOperations.isLocked()) {
- sender.sendMessage(Lang.TITLE + Lang.LOCKED.toString());
+ this.plugin.getTL().locked().title().send(sender);
return true;
}
@@ -61,20 +64,20 @@ public class VaultCommand implements CommandExecutor {
YamlConfiguration file = VaultManager.getInstance().getPlayerVaultFile(target, false);
if (file == null) {
- sender.sendMessage(Lang.TITLE.toString() + Lang.VAULT_DOES_NOT_EXIST.toString());
+ this.plugin.getTL().vaultDoesNotExist().title().send(sender);
} else {
StringBuilder sb = new StringBuilder();
for (String key : file.getKeys(false)) {
sb.append(key.replace("vault", "")).append(" ");
}
- sender.sendMessage(Lang.TITLE.toString() + Lang.EXISTING_VAULTS.toString().replaceAll("%p", args[0]).replaceAll("%v", sb.toString().trim()));
+ this.plugin.getTL().existingVaults().title().with("player", args[0]).with("vault", sb.toString().trim()).send(sender);
}
}
break;
case 2:
if (!player.hasPermission("playervaults.admin")) {
- player.sendMessage(Lang.TITLE.toString() + Lang.NO_PERMS.toString());
+ this.plugin.getTL().noPerms().title().send(sender);
break;
}
@@ -82,7 +85,7 @@ public class VaultCommand implements CommandExecutor {
try {
number = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
- player.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.MUST_BE_NUMBER);
+ this.plugin.getTL().mustBeNumber().title().send(sender);
return true;
}
@@ -94,14 +97,14 @@ public class VaultCommand implements CommandExecutor {
if (VaultOperations.openOtherVault(player, target, args[1])) {
PlayerVaults.getInstance().getInVault().put(player.getUniqueId().toString(), new VaultViewInfo(target, number));
} else {
- sender.sendMessage(Lang.TITLE.toString() + Lang.NO_OWNER_FOUND.toString().replaceAll("%p", args[0]));
+ this.plugin.getTL().noOwnerFound().title().with("player", args[0]).send(sender);
}
break;
default:
- sender.sendMessage(Lang.TITLE.toString() + Lang.HELP.toString());
+ this.plugin.getTL().help().title().send(sender);
}
} else {
- sender.sendMessage(Lang.TITLE.toString() + ChatColor.RED + Lang.PLAYER_ONLY.toString());
+ this.plugin.getTL().playerOnly().title().send(sender);
}
return true;
diff --git a/src/main/java/com/drtshock/playervaults/config/Loader.java b/src/main/java/com/drtshock/playervaults/config/Loader.java
index fa71b45..d025ee0 100644
--- a/src/main/java/com/drtshock/playervaults/config/Loader.java
+++ b/src/main/java/com/drtshock/playervaults/config/Loader.java
@@ -21,6 +21,7 @@ import com.drtshock.playervaults.PlayerVaults;
import com.drtshock.playervaults.config.annotation.Comment;
import com.drtshock.playervaults.config.annotation.ConfigName;
import com.drtshock.playervaults.config.annotation.WipeOnReload;
+import com.drtshock.playervaults.config.file.Translation;
import com.drtshock.playervaults.lib.com.typesafe.config.Config;
import com.drtshock.playervaults.lib.com.typesafe.config.ConfigFactory;
import com.drtshock.playervaults.lib.com.typesafe.config.ConfigRenderOptions;
@@ -39,6 +40,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -70,7 +72,7 @@ public class Loader {
Files.write(file.toPath(), s.getBytes(StandardCharsets.UTF_8));
}
- public static ConfigValue load(Config config, Object configObject) throws IOException, IllegalAccessException {
+ public static @NonNull ConfigValue load(Config config, Object configObject) throws IllegalAccessException {
return Loader.loadNode(config, configObject);
}
@@ -89,6 +91,7 @@ public class Loader {
Loader.types.add(Map.class);
Loader.types.add(Set.class);
Loader.types.add(String.class);
+ Loader.types.add(Translation.TL.class);
}
private static @NonNull ConfigValue loadNode(@NonNull Config config, @NonNull Object object) throws IllegalAccessException {
@@ -120,17 +123,48 @@ public class Loader {
Object defaultValue = field.get(object);
if (Loader.types.contains(field.getType())) {
if (needsValue) {
- newValue = ConfigValueFactory.fromAnyRef(defaultValue);
+ if (Translation.TL.class.isAssignableFrom(field.getType())) {
+ Translation.TL tl = (Translation.TL) defaultValue;
+ newValue = tl.size() == 1 ? ConfigValueFactory.fromAnyRef(tl.get(0)) : ConfigValueFactory.fromAnyRef(tl);
+ } else {
+ newValue = ConfigValueFactory.fromAnyRef(defaultValue);
+ }
} else {
+ dance:
try {
- if (Set.class.isAssignableFrom(field.getType()) && curValue.valueType() == ConfigValueType.LIST) {
+ if (Translation.TL.class.isAssignableFrom(field.getType())) {
+ Translation.TL tl;
+ if (curValue.valueType() == ConfigValueType.STRING) {
+ String s = curValue.unwrapped().toString();
+ tl = Translation.TL.copyOf(Collections.singletonList(s));
+ } else if (curValue.valueType() == ConfigValueType.LIST) {
+ List l = (List) curValue.unwrapped();
+ tl = Translation.TL.copyOf(l);
+ } else {
+ tl = (Translation.TL) defaultValue;
+ }
+ newValue = tl.size() == 1 ? ConfigValueFactory.fromAnyRef(tl.get(0)) : ConfigValueFactory.fromAnyRef(tl);
+ field.set(object, tl);
+ break dance;
+ }
+ if (List.class.isAssignableFrom(field.getType()) && curValue.valueType() == ConfigValueType.STRING) {
+ List> list = Collections.singletonList(curValue.unwrapped());
+ field.set(object, list);
+ newValue = ConfigValueFactory.fromAnyRef(list);
+ break dance;
+ } else if (Set.class.isAssignableFrom(field.getType()) && curValue.valueType() == ConfigValueType.STRING) {
+ Set> set = Collections.singleton(curValue.unwrapped());
+ field.set(object, set);
+ newValue = ConfigValueFactory.fromAnyRef(set);
+ break dance;
+ } else if (Set.class.isAssignableFrom(field.getType()) && curValue.valueType() == ConfigValueType.LIST) {
field.set(object, new HashSet