diff --git a/src/main/java/world/bentobox/bentobox/database/json/AbstractJSONDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/json/AbstractJSONDatabaseHandler.java index 4f074ece1..bfacf13b8 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/AbstractJSONDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/json/AbstractJSONDatabaseHandler.java @@ -4,6 +4,7 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffectType; +import org.bukkit.util.BoundingBox; import com.google.gson.Gson; import com.google.gson.GsonBuilder; @@ -12,11 +13,12 @@ import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; import world.bentobox.bentobox.database.AbstractDatabaseHandler; import world.bentobox.bentobox.database.DatabaseConnector; -import world.bentobox.bentobox.database.json.adapters.FlagAdapter; +import world.bentobox.bentobox.database.json.adapters.BoundingBoxTypeAdapter; +import world.bentobox.bentobox.database.json.adapters.FlagTypeAdapter; import world.bentobox.bentobox.database.json.adapters.ItemStackTypeAdapter; -import world.bentobox.bentobox.database.json.adapters.LocationAdapter; +import world.bentobox.bentobox.database.json.adapters.LocationTypeAdapter; import world.bentobox.bentobox.database.json.adapters.PotionEffectTypeAdapter; -import world.bentobox.bentobox.database.json.adapters.WorldAdapter; +import world.bentobox.bentobox.database.json.adapters.WorldTypeAdapter; /** * Abstract class that handles insert/select-operations into/from a database. @@ -47,11 +49,12 @@ public abstract class AbstractJSONDatabaseHandler extends AbstractDatabaseHan // enableComplexMapKeySerialization - forces GSON to use TypeAdapters even for Map keys GsonBuilder builder = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().enableComplexMapKeySerialization().setPrettyPrinting(); // Register adapters - builder.registerTypeAdapter(Location.class, new LocationAdapter()) ; - builder.registerTypeAdapter(World.class, new WorldAdapter()); - builder.registerTypeAdapter(Flag.class, new FlagAdapter(plugin)); + builder.registerTypeAdapter(Location.class, new LocationTypeAdapter()) ; + builder.registerTypeAdapter(World.class, new WorldTypeAdapter()); + builder.registerTypeAdapter(Flag.class, new FlagTypeAdapter(plugin)); builder.registerTypeAdapter(PotionEffectType.class, new PotionEffectTypeAdapter()); builder.registerTypeAdapter(ItemStack.class, new ItemStackTypeAdapter()); + builder.registerTypeAdapter(BoundingBox.class, new BoundingBoxTypeAdapter()); // Keep null in the database builder.serializeNulls(); // Allow characters like < or > without escaping them diff --git a/src/main/java/world/bentobox/bentobox/database/json/adapters/BoundingBoxTypeAdapter.java b/src/main/java/world/bentobox/bentobox/database/json/adapters/BoundingBoxTypeAdapter.java new file mode 100644 index 000000000..4dad71ddd --- /dev/null +++ b/src/main/java/world/bentobox/bentobox/database/json/adapters/BoundingBoxTypeAdapter.java @@ -0,0 +1,46 @@ +package world.bentobox.bentobox.database.json.adapters; + +import java.io.IOException; + +import org.bukkit.util.BoundingBox; + +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +public class BoundingBoxTypeAdapter extends TypeAdapter { + + @Override + public void write(JsonWriter out, BoundingBox box) throws IOException { + if (box == null) { + out.nullValue(); + return; + } + out.beginArray(); + out.value(box.getMinX()); + out.value(box.getMinY()); + out.value(box.getMinZ()); + out.value(box.getMaxX()); + out.value(box.getMaxY()); + out.value(box.getMaxZ()); + out.endArray(); + } + + @Override + public BoundingBox read(JsonReader in) throws IOException { + if (in.peek() == JsonToken.NULL) { + in.nextNull(); + return null; + } + in.beginArray(); + double minX = in.nextDouble(); + double minY = in.nextDouble(); + double minZ = in.nextDouble(); + double maxX = in.nextDouble(); + double maxY = in.nextDouble(); + double maxZ = in.nextDouble(); + in.endArray(); + return new BoundingBox(minX, minY, minZ, maxX, maxY, maxZ); + } +} \ No newline at end of file diff --git a/src/main/java/world/bentobox/bentobox/database/json/adapters/FlagAdapter.java b/src/main/java/world/bentobox/bentobox/database/json/adapters/FlagTypeAdapter.java similarity index 89% rename from src/main/java/world/bentobox/bentobox/database/json/adapters/FlagAdapter.java rename to src/main/java/world/bentobox/bentobox/database/json/adapters/FlagTypeAdapter.java index 809c4b010..0eb0caba9 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/adapters/FlagAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/json/adapters/FlagTypeAdapter.java @@ -10,11 +10,11 @@ import com.google.gson.stream.JsonWriter; import world.bentobox.bentobox.BentoBox; import world.bentobox.bentobox.api.flags.Flag; -public class FlagAdapter extends TypeAdapter { +public class FlagTypeAdapter extends TypeAdapter { private BentoBox plugin; - public FlagAdapter(BentoBox plugin) { + public FlagTypeAdapter(BentoBox plugin) { this.plugin = plugin; } diff --git a/src/main/java/world/bentobox/bentobox/database/json/adapters/LocationAdapter.java b/src/main/java/world/bentobox/bentobox/database/json/adapters/LocationTypeAdapter.java similarity index 95% rename from src/main/java/world/bentobox/bentobox/database/json/adapters/LocationAdapter.java rename to src/main/java/world/bentobox/bentobox/database/json/adapters/LocationTypeAdapter.java index c75c41928..809ce3e4e 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/adapters/LocationAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/json/adapters/LocationTypeAdapter.java @@ -11,7 +11,7 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; -public class LocationAdapter extends TypeAdapter { +public class LocationTypeAdapter extends TypeAdapter { @Override public void write(JsonWriter out, Location location) throws IOException { diff --git a/src/main/java/world/bentobox/bentobox/database/json/adapters/WorldAdapter.java b/src/main/java/world/bentobox/bentobox/database/json/adapters/WorldTypeAdapter.java similarity index 92% rename from src/main/java/world/bentobox/bentobox/database/json/adapters/WorldAdapter.java rename to src/main/java/world/bentobox/bentobox/database/json/adapters/WorldTypeAdapter.java index b8723f9a2..ee9bcb1df 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/adapters/WorldAdapter.java +++ b/src/main/java/world/bentobox/bentobox/database/json/adapters/WorldTypeAdapter.java @@ -10,7 +10,7 @@ import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonToken; import com.google.gson.stream.JsonWriter; -public class WorldAdapter extends TypeAdapter { +public class WorldTypeAdapter extends TypeAdapter { @Override public void write(JsonWriter out, World value) throws IOException { diff --git a/src/test/java/world/bentobox/bentobox/database/json/adapters/FlagAdapterTest.java b/src/test/java/world/bentobox/bentobox/database/json/adapters/FlagAdapterTest.java index cda76376b..e85b3a922 100644 --- a/src/test/java/world/bentobox/bentobox/database/json/adapters/FlagAdapterTest.java +++ b/src/test/java/world/bentobox/bentobox/database/json/adapters/FlagAdapterTest.java @@ -65,12 +65,12 @@ public class FlagAdapterTest { @Test public void testFlagAdapter() { - new FlagAdapter(plugin); + new FlagTypeAdapter(plugin); } @Test public void testWriteJsonWriterFlag() throws IOException { - FlagAdapter fa = new FlagAdapter(plugin); + FlagTypeAdapter fa = new FlagTypeAdapter(plugin); JsonWriter out = mock(JsonWriter.class); Flag value = Flags.ANIMAL_SPAWN; fa.write(out, value); @@ -79,7 +79,7 @@ public class FlagAdapterTest { @Test public void testWriteJsonWriterFlagNull() throws IOException { - FlagAdapter fa = new FlagAdapter(plugin); + FlagTypeAdapter fa = new FlagTypeAdapter(plugin); JsonWriter out = mock(JsonWriter.class); Flag value = null; fa.write(out, value); @@ -88,7 +88,7 @@ public class FlagAdapterTest { @Test public void testReadJsonReaderNull() throws IOException { - FlagAdapter fa = new FlagAdapter(plugin); + FlagTypeAdapter fa = new FlagTypeAdapter(plugin); JsonReader reader = mock(JsonReader.class); Mockito.when(reader.peek()).thenReturn(JsonToken.NULL); Flag flag = fa.read(reader); @@ -98,7 +98,7 @@ public class FlagAdapterTest { @Test public void testReadJsonReader() throws IOException { - FlagAdapter fa = new FlagAdapter(plugin); + FlagTypeAdapter fa = new FlagTypeAdapter(plugin); JsonReader reader = mock(JsonReader.class); Mockito.when(reader.peek()).thenReturn(JsonToken.STRING); Mockito.when(reader.nextString()).thenReturn("ANIMAL_SPAWN");