diff --git a/locales/en-US.yml b/locales/en-US.yml index 5167ccfef..832b73aac 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -28,6 +28,7 @@ general: unknown-player: "&cUnknown player!" general: "&cThat command is not ready yet - contact admin" warp-not-safe: "&cThat warp is not safe right now!" + wrong-world: "&cYou are not in the right world to do that!" commands: help: diff --git a/src/main/java/us/tastybento/bskyblock/api/addons/Addon.java b/src/main/java/us/tastybento/bskyblock/api/addons/Addon.java index e90a8e516..a3c0144bc 100644 --- a/src/main/java/us/tastybento/bskyblock/api/addons/Addon.java +++ b/src/main/java/us/tastybento/bskyblock/api/addons/Addon.java @@ -106,7 +106,7 @@ public abstract class Addon implements AddonInterface { yamlConfig = new YamlConfiguration(); yamlConfig.load(yamlFile); } catch (Exception e) { - Bukkit.getLogger().severe("Could not load YAML file: " + file); + Bukkit.getLogger().severe("Could not load YAML file: " + file + " " + e.getMessage()); } } return yamlConfig; diff --git a/src/main/java/us/tastybento/bskyblock/api/addons/AddonClassLoader.java b/src/main/java/us/tastybento/bskyblock/api/addons/AddonClassLoader.java index 9d242f16d..047c71b44 100644 --- a/src/main/java/us/tastybento/bskyblock/api/addons/AddonClassLoader.java +++ b/src/main/java/us/tastybento/bskyblock/api/addons/AddonClassLoader.java @@ -47,7 +47,7 @@ public class AddonClassLoader extends URLClassLoader { throw new InvalidAddonFormatException("Packages declaration cannot start with 'us.tastybento'"); } } catch (ClassNotFoundException e) { - BSkyBlock.getInstance().getLogger().severe("Could not load '" + path.getName() + "' in folder '" + path.getParent() + "'"); + BSkyBlock.getInstance().getLogger().severe("Could not load '" + path.getName() + "' in folder '" + path.getParent() + "' - invalid addon.yml"); throw new InvalidDescriptionException("Invalid addon.yml"); } diff --git a/src/main/java/us/tastybento/bskyblock/api/commands/User.java b/src/main/java/us/tastybento/bskyblock/api/commands/User.java index 57456c9f6..db0e50deb 100644 --- a/src/main/java/us/tastybento/bskyblock/api/commands/User.java +++ b/src/main/java/us/tastybento/bskyblock/api/commands/User.java @@ -272,9 +272,23 @@ public class User { } + /** + * Forces an update of the user's complete inventory. + * Deprecated, but there is no current alternative. + */ @SuppressWarnings("deprecation") public void updateInventory() { player.updateInventory(); } + + /** + * Performs a command as the player + * @param cmd + * @return true if the command was successful, otherwise false + */ + public boolean performCommand(String cmd) { + return player.performCommand(cmd); + + } } diff --git a/src/main/java/us/tastybento/bskyblock/database/flatfile/FlatFileDatabaseHandler.java b/src/main/java/us/tastybento/bskyblock/database/flatfile/FlatFileDatabaseHandler.java index 1b21e2688..2f5e7c58c 100644 --- a/src/main/java/us/tastybento/bskyblock/database/flatfile/FlatFileDatabaseHandler.java +++ b/src/main/java/us/tastybento/bskyblock/database/flatfile/FlatFileDatabaseHandler.java @@ -120,7 +120,7 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { } return list; } - + /** * * Creates a list of s filled with values from the provided ResultSet @@ -245,8 +245,10 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { // collectionTypes should be only 1 long Type setType = collectionTypes.get(0); List value = new ArrayList<>(); - for (Object listValue: config.getList(storageLocation)) { - value.add(deserialize(listValue,Class.forName(setType.getTypeName()))); + if (config.getList(storageLocation) != null) { + for (Object listValue: config.getList(storageLocation)) { + value.add(deserialize(listValue,Class.forName(setType.getTypeName()))); + } } // TODO: this may not work with all keys. Further serialization may be required. method.invoke(instance, value); @@ -289,6 +291,8 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { @SuppressWarnings("unchecked") @Override public void saveObject(T instance) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, IntrospectionException { + + // This is the Yaml Configuration that will be used and saved at the end YamlConfiguration config = new YamlConfiguration(); @@ -315,7 +319,9 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { Method method = propertyDescriptor.getReadMethod(); // Invoke the read method to get the value. We have no idea what type of value it is. Object value = method.invoke(instance); - + if (DEBUG) { + plugin.getLogger().info("DEBUG: field = " + field.getName() + " value = " + value); + } String storageLocation = field.getName(); // Check if there is an annotation on the field ConfigEntry configEntry = field.getAnnotation(ConfigEntry.class); @@ -350,12 +356,12 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { continue fields; } - //plugin.getLogger().info("DEBUG: property desc = " + propertyDescriptor.getPropertyType().getTypeName()); - // Depending on the vale type, it'll need serializing differenty + plugin.getLogger().info("DEBUG: property desc = " + propertyDescriptor.getPropertyType().getTypeName()); + // Depending on the vale type, it'll need serializing differently // Check if this field is the mandatory UniqueId field. This is used to identify this instantiation of the class if (method.getName().equals("getUniqueId")) { // If the object does not have a unique name assigned to it already, one is created at random - //plugin.getLogger().info("DEBUG: uniqueId = " + value); + plugin.getLogger().info("DEBUG: flat file db uniqueId = " + value); String id = (String)value; if (value == null || id.isEmpty()) { id = databaseConnecter.getUniqueId(dataObject.getSimpleName()); @@ -399,6 +405,9 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { if (filename.isEmpty()) { throw new IllegalArgumentException("No uniqueId in class"); } + if (DEBUG) { + plugin.getLogger().info("DEBUG: Saving YAML file : " + path + " " + filename); + } databaseConnecter.saveYamlFile(config, path, filename); } @@ -469,13 +478,23 @@ public class FlatFileDatabaseHandler extends AbstractDatabaseHandler { if (Enum.class.isAssignableFrom(clazz)) { //Custom enums are a child of the Enum class. // Find out the value + Class enumClass = (Class)clazz; try { - Class enumClass = (Class)clazz; value = Enum.valueOf(enumClass, (String)value); } catch (Exception e) { - // Maybe this value does not exist? - // TODO return something? - plugin.getLogger().severe(() -> "Could not deserialize enum: " + clazz.getCanonicalName()); + // This value does not exist - probably admin typed it wrongly + // Show what is available and pick one at random + plugin.getLogger().severe("Error in YML file: " + value + " is not a valid value in the enum " + clazz.getCanonicalName() + "!"); + plugin.getLogger().severe("Options are : "); + boolean isSet = false; + for (Field fields : enumClass.getFields()) { + plugin.getLogger().severe(fields.getName()); + if (!isSet && !((String)value).isEmpty() && fields.getName().substring(0, 1).equals(((String)value).substring(0, 1))) { + value = Enum.valueOf(enumClass, fields.getName()); + plugin.getLogger().severe("Setting to " + fields.getName() + " because it starts with the same letter"); + isSet = true; + } + } } } return value;