diff --git a/src/com/massivecraft/massivecore/MassiveCore.java b/src/com/massivecraft/massivecore/MassiveCore.java index 411c6d49..412be6f7 100644 --- a/src/com/massivecraft/massivecore/MassiveCore.java +++ b/src/com/massivecraft/massivecore/MassiveCore.java @@ -1,6 +1,7 @@ package com.massivecraft.massivecore; import java.lang.reflect.Modifier; +import java.lang.reflect.Type; import java.util.Map.Entry; import java.util.Random; import java.util.Set; @@ -13,6 +14,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import com.massivecraft.massivecore.adapter.AdapterBackstringEnumSet; +import com.massivecraft.massivecore.adapter.AdapterBannerPatterns; import com.massivecraft.massivecore.adapter.AdapterEntry; import com.massivecraft.massivecore.adapter.AdapterInventory; import com.massivecraft.massivecore.adapter.AdapterItemStack; @@ -61,6 +63,7 @@ import com.massivecraft.massivecore.engine.EngineMassiveCoreTeleportMixinCause; import com.massivecraft.massivecore.engine.EngineMassiveCoreVariable; import com.massivecraft.massivecore.engine.EngineMassiveCoreWorldNameSet; import com.massivecraft.massivecore.integration.vault.IntegrationVault; +import com.massivecraft.massivecore.item.DataBannerPattern; import com.massivecraft.massivecore.item.WriterBannerPattern; import com.massivecraft.massivecore.item.WriterFireworkEffect; import com.massivecraft.massivecore.item.WriterItemStack; @@ -98,6 +101,7 @@ import com.massivecraft.massivecore.xlib.gson.JsonArray; import com.massivecraft.massivecore.xlib.gson.JsonNull; import com.massivecraft.massivecore.xlib.gson.JsonObject; import com.massivecraft.massivecore.xlib.gson.JsonPrimitive; +import com.massivecraft.massivecore.xlib.gson.reflect.TypeToken; public class MassiveCore extends MassivePlugin { @@ -134,39 +138,59 @@ public class MassiveCore extends MassivePlugin public static GsonBuilder getMassiveCoreGsonBuilder() { - return new GsonBuilder() - .setPrettyPrinting() - .disableHtmlEscaping() - .excludeFieldsWithModifiers(Modifier.TRANSIENT) - .registerTypeAdapter(JsonNull.class, AdapterJsonElement.get()) - .registerTypeAdapter(JsonPrimitive.class, AdapterJsonElement.get()) - .registerTypeAdapter(JsonArray.class, AdapterJsonElement.get()) - .registerTypeAdapter(JsonObject.class, AdapterJsonElement.get()) - .registerTypeAdapter(Sound.class, AdapterSound.get()) - .registerTypeAdapter(UUID.class, AdapterUUID.get()) - .registerTypeAdapter(ItemStack.class, AdapterItemStack.get()) - .registerTypeAdapter(Inventory.class, AdapterInventory.get()) - .registerTypeAdapter(PlayerInventory.class, AdapterPlayerInventory.get()) - .registerTypeAdapter(PS.class, PSAdapter.get()) + // Create + GsonBuilder ret = new GsonBuilder(); - .registerTypeAdapter(MassiveList.class, AdapterMassiveList.get()) - .registerTypeAdapter(MassiveListDef.class, AdapterMassiveList.get()) - .registerTypeAdapter(MassiveMap.class, AdapterMassiveMap.get()) - .registerTypeAdapter(MassiveMapDef.class, AdapterMassiveMap.get()) - .registerTypeAdapter(MassiveSet.class, AdapterMassiveSet.get()) - .registerTypeAdapter(MassiveSetDef.class, AdapterMassiveSet.get()) - .registerTypeAdapter(MassiveTreeMap.class, AdapterMassiveTreeMap.get()) - .registerTypeAdapter(MassiveTreeMapDef.class, AdapterMassiveTreeMap.get()) - .registerTypeAdapter(MassiveTreeSet.class, AdapterMassiveTreeSet.get()) - .registerTypeAdapter(MassiveTreeSetDef.class, AdapterMassiveTreeSet.get()) + // Basic Behavior + ret.setPrettyPrinting(); + ret.disableHtmlEscaping(); + ret.excludeFieldsWithModifiers(Modifier.TRANSIENT); - .registerTypeAdapter(Mson.class, AdapterMson.get()) - .registerTypeAdapter(MsonEvent.class, AdapterMsonEvent.get()) + // Raw Adapters + ret.registerTypeAdapter(JsonNull.class, AdapterJsonElement.get()); + ret.registerTypeAdapter(JsonPrimitive.class, AdapterJsonElement.get()); + ret.registerTypeAdapter(JsonArray.class, AdapterJsonElement.get()); + ret.registerTypeAdapter(JsonObject.class, AdapterJsonElement.get()); - .registerTypeAdapter(BackstringEnumSet.class, AdapterBackstringEnumSet.get()) - .registerTypeAdapter(Entry.class, AdapterEntry.get()) + // Enumeration Annotation Dodge + ret.registerTypeAdapterFactory(AdapterModdedEnumType.ENUM_FACTORY); - .registerTypeAdapterFactory(AdapterModdedEnumType.ENUM_FACTORY); + // Entries (Is this still needed?) + ret.registerTypeAdapter(Entry.class, AdapterEntry.get()); + + // Assorted Custom + ret.registerTypeAdapter(BackstringEnumSet.class, AdapterBackstringEnumSet.get()); + ret.registerTypeAdapter(PS.class, PSAdapter.get()); + ret.registerTypeAdapter(Sound.class, AdapterSound.get()); + ret.registerTypeAdapter(UUID.class, AdapterUUID.get()); + + // Mson + ret.registerTypeAdapter(Mson.class, AdapterMson.get()); + ret.registerTypeAdapter(MsonEvent.class, AdapterMsonEvent.get()); + + // Items and Inventories + ret.registerTypeAdapter(ItemStack.class, AdapterItemStack.get()); + ret.registerTypeAdapter(Inventory.class, AdapterInventory.get()); + ret.registerTypeAdapter(PlayerInventory.class, AdapterPlayerInventory.get()); + + // Banner Patterns Upgrade Adapter + Type typeBannerPatterns = new TypeToken>(){}.getType(); + ret.registerTypeAdapter(typeBannerPatterns, AdapterBannerPatterns.get()); + + // Massive Containers + ret.registerTypeAdapter(MassiveList.class, AdapterMassiveList.get()); + ret.registerTypeAdapter(MassiveListDef.class, AdapterMassiveList.get()); + ret.registerTypeAdapter(MassiveMap.class, AdapterMassiveMap.get()); + ret.registerTypeAdapter(MassiveMapDef.class, AdapterMassiveMap.get()); + ret.registerTypeAdapter(MassiveSet.class, AdapterMassiveSet.get()); + ret.registerTypeAdapter(MassiveSetDef.class, AdapterMassiveSet.get()); + ret.registerTypeAdapter(MassiveTreeMap.class, AdapterMassiveTreeMap.get()); + ret.registerTypeAdapter(MassiveTreeMapDef.class, AdapterMassiveTreeMap.get()); + ret.registerTypeAdapter(MassiveTreeSet.class, AdapterMassiveTreeSet.get()); + ret.registerTypeAdapter(MassiveTreeSetDef.class, AdapterMassiveTreeSet.get()); + + // Return + return ret; } public static String getServerId() { return ConfServer.serverid; } diff --git a/src/com/massivecraft/massivecore/adapter/AdapterBackstringEnumSet.java b/src/com/massivecraft/massivecore/adapter/AdapterBackstringEnumSet.java index 3d4b212f..59a0202f 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterBackstringEnumSet.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterBackstringEnumSet.java @@ -25,7 +25,7 @@ public class AdapterBackstringEnumSet implements JsonDeserializer> +{ + // -------------------------------------------- // + // INSTANCE & CONSTRUCT + // -------------------------------------------- // + + private static final AdapterBannerPatterns i = new AdapterBannerPatterns(); + public static AdapterBannerPatterns get() { return i; } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + // Default serialization is fine. + // We do however provide a smarter deserialiser. + // This is for the sole purpose of upgrading from the old deprecated database format. + // + // In the old version (around version 2.8.10) we made use of a list with primitives. + // id, color, id, color... + // They were just coming in that order and were not wrapped in some kind of entry. + // + // The data types are the same in the old and new version. + // String, Number, String, Number... + // + // In the new version we do however wrap them in the DataBannerPattern. + + @Override + public MassiveListDef deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException + { + // Create + MassiveListDef ret = new MassiveListDef<>(); + + // Null (Def implementation is never null) + if (json == null) return ret; + if (json.equals(JsonNull.INSTANCE)) return ret; + + // It is an array in both old and new version + JsonArray array = json.getAsJsonArray(); + + // Empty? + if (array.size() == 0) return ret; + + // First element indicates version + JsonElement first = array.get(0); + if (first instanceof JsonObject) + { + // New + for (JsonElement element : array) + { + DataBannerPattern dataBannerPattern = context.deserialize(element, DataBannerPattern.class); + ret.add(dataBannerPattern); + } + } + else + { + // Old aka Upgrade Mode + Iterator iterator = array.iterator(); + while (iterator.hasNext()) + { + DataBannerPattern dataBannerPattern = new DataBannerPattern(); + + JsonElement idElement = iterator.next(); + String id = idElement.getAsString(); + dataBannerPattern.setId(id); + + JsonElement colorElement = iterator.next(); + Integer color = colorElement.getAsInt(); + dataBannerPattern.setColor(color); + + ret.add(dataBannerPattern); + } + } + + return ret; + } + +} diff --git a/src/com/massivecraft/massivecore/adapter/AdapterEntry.java b/src/com/massivecraft/massivecore/adapter/AdapterEntry.java index 1e78a8f8..2d5e571d 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterEntry.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterEntry.java @@ -20,7 +20,7 @@ public class AdapterEntry implements JsonDeserializer>, JsonSerializ // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterEntry i = new AdapterEntry(); + private static final AdapterEntry i = new AdapterEntry(); public static AdapterEntry get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterInventory.java b/src/com/massivecraft/massivecore/adapter/AdapterInventory.java index d4fc49ac..39807dcb 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterInventory.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterInventory.java @@ -53,7 +53,7 @@ public class AdapterInventory implements JsonDeserializer, JsonSerial // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterInventory i = new AdapterInventory(); + private static final AdapterInventory i = new AdapterInventory(); public static AdapterInventory get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterItemStack.java b/src/com/massivecraft/massivecore/adapter/AdapterItemStack.java index 018a909e..cdc04e41 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterItemStack.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterItemStack.java @@ -22,7 +22,7 @@ public class AdapterItemStack implements JsonDeserializer, JsonSerial // INSTANCE // -------------------------------------------- // - public static AdapterItemStack i = new AdapterItemStack(); + private static final AdapterItemStack i = new AdapterItemStack(); public static AdapterItemStack get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner17.java b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner17.java index 20978328..6373116b 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner17.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner17.java @@ -73,7 +73,7 @@ public class AdapterItemStackInner17 implements AdapterItemStackInner // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static AdapterItemStackInner17 i = new AdapterItemStackInner17(); + private static final AdapterItemStackInner17 i = new AdapterItemStackInner17(); public static AdapterItemStackInner17 get() { return i; } public AdapterItemStackInner17() { diff --git a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner18.java b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner18.java index 5dd1e355..bed5e951 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner18.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner18.java @@ -43,7 +43,7 @@ public class AdapterItemStackInner18 extends AdapterItemStackInner17 // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static AdapterItemStackInner18 i = new AdapterItemStackInner18(); + private static final AdapterItemStackInner18 i = new AdapterItemStackInner18(); public static AdapterItemStackInner18 get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner19.java b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner19.java index 1346ec3d..4bec1c72 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner19.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterItemStackInner19.java @@ -32,7 +32,7 @@ public class AdapterItemStackInner19 extends AdapterItemStackInner18 // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static AdapterItemStackInner19 i = new AdapterItemStackInner19(); + private static final AdapterItemStackInner19 i = new AdapterItemStackInner19(); public static AdapterItemStackInner19 get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterJsonElement.java b/src/com/massivecraft/massivecore/adapter/AdapterJsonElement.java index ce83ea0a..71148a59 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterJsonElement.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterJsonElement.java @@ -15,7 +15,7 @@ public class AdapterJsonElement implements JsonDeserializer, JsonSe // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterJsonElement i = new AdapterJsonElement(); + private static final AdapterJsonElement i = new AdapterJsonElement(); public static AdapterJsonElement get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMassiveList.java b/src/com/massivecraft/massivecore/adapter/AdapterMassiveList.java index aea56788..eaea99c6 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMassiveList.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMassiveList.java @@ -14,7 +14,7 @@ public class AdapterMassiveList extends AdapterMassiveX> // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterMassiveList i = new AdapterMassiveList(); + private static final AdapterMassiveList i = new AdapterMassiveList(); public static AdapterMassiveList get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMassiveMap.java b/src/com/massivecraft/massivecore/adapter/AdapterMassiveMap.java index 148a1360..9ab5b554 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMassiveMap.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMassiveMap.java @@ -14,7 +14,7 @@ public class AdapterMassiveMap extends AdapterMassiveX> // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterMassiveMap i = new AdapterMassiveMap(); + private static final AdapterMassiveMap i = new AdapterMassiveMap(); public static AdapterMassiveMap get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMassiveSet.java b/src/com/massivecraft/massivecore/adapter/AdapterMassiveSet.java index 376ee1cc..dfc9fe7b 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMassiveSet.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMassiveSet.java @@ -14,7 +14,7 @@ public class AdapterMassiveSet extends AdapterMassiveX> // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterMassiveSet i = new AdapterMassiveSet(); + private static final AdapterMassiveSet i = new AdapterMassiveSet(); public static AdapterMassiveSet get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMassiveTreeMap.java b/src/com/massivecraft/massivecore/adapter/AdapterMassiveTreeMap.java index 51cf87ed..fdd0c787 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMassiveTreeMap.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMassiveTreeMap.java @@ -14,7 +14,7 @@ public class AdapterMassiveTreeMap extends AdapterMassiveX> // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterMassiveTreeSet i = new AdapterMassiveTreeSet(); + private static final AdapterMassiveTreeSet i = new AdapterMassiveTreeSet(); public static AdapterMassiveTreeSet get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMson.java b/src/com/massivecraft/massivecore/adapter/AdapterMson.java index e5774ffa..65182562 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMson.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMson.java @@ -17,9 +17,8 @@ public class AdapterMson implements JsonDeserializer, JsonSerializer // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static AdapterMson i = new AdapterMson(); + private static final AdapterMson i = new AdapterMson(); public static AdapterMson get() { return i; } - public AdapterMson() {} // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/adapter/AdapterMsonEvent.java b/src/com/massivecraft/massivecore/adapter/AdapterMsonEvent.java index 9f66ae16..052f8ad2 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterMsonEvent.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterMsonEvent.java @@ -17,9 +17,8 @@ public class AdapterMsonEvent implements JsonDeserializer, JsonSerial // INSTANCE & CONSTRUCT // -------------------------------------------- // - public static AdapterMsonEvent i = new AdapterMsonEvent(); + private static final AdapterMsonEvent i = new AdapterMsonEvent(); public static AdapterMsonEvent get() { return i; } - public AdapterMsonEvent() {} // -------------------------------------------- // // OVERRIDE diff --git a/src/com/massivecraft/massivecore/adapter/AdapterPlayerInventory.java b/src/com/massivecraft/massivecore/adapter/AdapterPlayerInventory.java index 19013603..83189d86 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterPlayerInventory.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterPlayerInventory.java @@ -17,7 +17,7 @@ public class AdapterPlayerInventory implements JsonDeserializer // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterPlayerInventory i = new AdapterPlayerInventory(); + private static final AdapterPlayerInventory i = new AdapterPlayerInventory(); public static AdapterPlayerInventory get() { return i; } // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/adapter/AdapterSound.java b/src/com/massivecraft/massivecore/adapter/AdapterSound.java index 3b542566..d246e790 100644 --- a/src/com/massivecraft/massivecore/adapter/AdapterSound.java +++ b/src/com/massivecraft/massivecore/adapter/AdapterSound.java @@ -19,9 +19,8 @@ public class AdapterSound implements JsonDeserializer, JsonSerializer, JsonSerializer // INSTANCE & CONSTRUCT // -------------------------------------------- // - private static AdapterUUID i = new AdapterUUID(); + private static final AdapterUUID i = new AdapterUUID(); public static AdapterUUID get() { return i; } // -------------------------------------------- //