|
|
|
|
@@ -21,6 +21,8 @@ import org.bukkit.potion.PotionEffect;
|
|
|
|
|
import org.bukkit.util.BoundingBox;
|
|
|
|
|
import org.bukkit.util.BlockVector;
|
|
|
|
|
import org.bukkit.util.Vector;
|
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Utility class for storing and retrieving classes for {@link Configuration}.
|
|
|
|
|
@@ -43,11 +45,12 @@ public class ConfigurationSerialization {
|
|
|
|
|
registerClass(BoundingBox.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected ConfigurationSerialization(Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
protected ConfigurationSerialization(@NotNull Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
this.clazz = clazz;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected Method getMethod(String name, boolean isStatic) {
|
|
|
|
|
@Nullable
|
|
|
|
|
protected Method getMethod(@NotNull String name, boolean isStatic) {
|
|
|
|
|
try {
|
|
|
|
|
Method method = clazz.getDeclaredMethod(name, Map.class);
|
|
|
|
|
|
|
|
|
|
@@ -66,6 +69,7 @@ public class ConfigurationSerialization {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Nullable
|
|
|
|
|
protected Constructor<? extends ConfigurationSerializable> getConstructor() {
|
|
|
|
|
try {
|
|
|
|
|
return clazz.getConstructor(Map.class);
|
|
|
|
|
@@ -76,7 +80,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected ConfigurationSerializable deserializeViaMethod(Method method, Map<String, ?> args) {
|
|
|
|
|
@Nullable
|
|
|
|
|
protected ConfigurationSerializable deserializeViaMethod(@NotNull Method method, @NotNull Map<String, ?> args) {
|
|
|
|
|
try {
|
|
|
|
|
ConfigurationSerializable result = (ConfigurationSerializable) method.invoke(null, args);
|
|
|
|
|
|
|
|
|
|
@@ -95,7 +100,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected ConfigurationSerializable deserializeViaCtor(Constructor<? extends ConfigurationSerializable> ctor, Map<String, ?> args) {
|
|
|
|
|
@Nullable
|
|
|
|
|
protected ConfigurationSerializable deserializeViaCtor(@NotNull Constructor<? extends ConfigurationSerializable> ctor, @NotNull Map<String, ?> args) {
|
|
|
|
|
try {
|
|
|
|
|
return ctor.newInstance(args);
|
|
|
|
|
} catch (Throwable ex) {
|
|
|
|
|
@@ -108,7 +114,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public ConfigurationSerializable deserialize(Map<String, ?> args) {
|
|
|
|
|
@Nullable
|
|
|
|
|
public ConfigurationSerializable deserialize(@NotNull Map<String, ?> args) {
|
|
|
|
|
Validate.notNull(args, "Args must not be null");
|
|
|
|
|
|
|
|
|
|
ConfigurationSerializable result = null;
|
|
|
|
|
@@ -156,7 +163,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
* @param clazz Class to deserialize into
|
|
|
|
|
* @return New instance of the specified class
|
|
|
|
|
*/
|
|
|
|
|
public static ConfigurationSerializable deserializeObject(Map<String, ?> args, Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
@Nullable
|
|
|
|
|
public static ConfigurationSerializable deserializeObject(@NotNull Map<String, ?> args, @NotNull Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
return new ConfigurationSerialization(clazz).deserialize(args);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -174,7 +182,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
* @param args Arguments for deserialization
|
|
|
|
|
* @return New instance of the specified class
|
|
|
|
|
*/
|
|
|
|
|
public static ConfigurationSerializable deserializeObject(Map<String, ?> args) {
|
|
|
|
|
@Nullable
|
|
|
|
|
public static ConfigurationSerializable deserializeObject(@NotNull Map<String, ?> args) {
|
|
|
|
|
Class<? extends ConfigurationSerializable> clazz = null;
|
|
|
|
|
|
|
|
|
|
if (args.containsKey(SERIALIZED_TYPE_KEY)) {
|
|
|
|
|
@@ -205,7 +214,7 @@ public class ConfigurationSerialization {
|
|
|
|
|
*
|
|
|
|
|
* @param clazz Class to register
|
|
|
|
|
*/
|
|
|
|
|
public static void registerClass(Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
public static void registerClass(@NotNull Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
DelegateDeserialization delegate = clazz.getAnnotation(DelegateDeserialization.class);
|
|
|
|
|
|
|
|
|
|
if (delegate == null) {
|
|
|
|
|
@@ -222,7 +231,7 @@ public class ConfigurationSerialization {
|
|
|
|
|
* @param alias Alias to register as
|
|
|
|
|
* @see SerializableAs
|
|
|
|
|
*/
|
|
|
|
|
public static void registerClass(Class<? extends ConfigurationSerializable> clazz, String alias) {
|
|
|
|
|
public static void registerClass(@NotNull Class<? extends ConfigurationSerializable> clazz, @NotNull String alias) {
|
|
|
|
|
aliases.put(alias, clazz);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -231,7 +240,7 @@ public class ConfigurationSerialization {
|
|
|
|
|
*
|
|
|
|
|
* @param alias Alias to unregister
|
|
|
|
|
*/
|
|
|
|
|
public static void unregisterClass(String alias) {
|
|
|
|
|
public static void unregisterClass(@NotNull String alias) {
|
|
|
|
|
aliases.remove(alias);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -241,7 +250,7 @@ public class ConfigurationSerialization {
|
|
|
|
|
*
|
|
|
|
|
* @param clazz Class to unregister
|
|
|
|
|
*/
|
|
|
|
|
public static void unregisterClass(Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
public static void unregisterClass(@NotNull Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
while (aliases.values().remove(clazz)) {
|
|
|
|
|
;
|
|
|
|
|
}
|
|
|
|
|
@@ -254,7 +263,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
* @param alias Alias of the serializable
|
|
|
|
|
* @return Registered class, or null if not found
|
|
|
|
|
*/
|
|
|
|
|
public static Class<? extends ConfigurationSerializable> getClassByAlias(String alias) {
|
|
|
|
|
@Nullable
|
|
|
|
|
public static Class<? extends ConfigurationSerializable> getClassByAlias(@NotNull String alias) {
|
|
|
|
|
return aliases.get(alias);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -265,7 +275,8 @@ public class ConfigurationSerialization {
|
|
|
|
|
* @param clazz Class to get alias for
|
|
|
|
|
* @return Alias to use for the class
|
|
|
|
|
*/
|
|
|
|
|
public static String getAlias(Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
@NotNull
|
|
|
|
|
public static String getAlias(@NotNull Class<? extends ConfigurationSerializable> clazz) {
|
|
|
|
|
DelegateDeserialization delegate = clazz.getAnnotation(DelegateDeserialization.class);
|
|
|
|
|
|
|
|
|
|
if (delegate != null) {
|
|
|
|
|
|