From 17b733e5b4e7da355c73cebbedf0aae51be5802e Mon Sep 17 00:00:00 2001 From: fullwall Date: Mon, 30 Mar 2020 16:16:44 +0800 Subject: [PATCH] Use constructor instead of special method in persistence loader --- .../api/persistence/PersistenceLoader.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/citizensnpcs/api/persistence/PersistenceLoader.java b/src/main/java/net/citizensnpcs/api/persistence/PersistenceLoader.java index dc32f12f..57beb96e 100644 --- a/src/main/java/net/citizensnpcs/api/persistence/PersistenceLoader.java +++ b/src/main/java/net/citizensnpcs/api/persistence/PersistenceLoader.java @@ -2,6 +2,7 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; @@ -193,7 +194,11 @@ private static void deserialise(PersistField field, DataKey root) throws Excepti return; } if (clazz == Double.class && type != Double.class) { - return; + if (type == Float.class) { + value = ((Double) value).floatValue(); + } else { + return; + } } if (clazz == Byte.class && type != Short.class && type != Byte.class && type != Integer.class && type != Double.class && type != Long.class && type != Float.class) { @@ -331,10 +336,25 @@ private static Class getGenericType(Field field) { * The root key to load from * @return The loaded instance */ + @SuppressWarnings("unchecked") public static T load(Class clazz, DataKey root) { T instance; try { - instance = clazz.newInstance(); + Constructor constructor = (Constructor) clazz.getConstructor(); + constructor.setAccessible(true); + instance = constructor.newInstance(); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + return null; + } catch (InvocationTargetException e) { + e.printStackTrace(); + return null; + } catch (NoSuchMethodException e) { + e.printStackTrace(); + return null; + } catch (SecurityException e) { + e.printStackTrace(); + return null; } catch (InstantiationException e) { e.printStackTrace(); return null;