diff --git a/src/main/java/com/bgsoftware/superiorskyblock/database/bridge/StackedBlocksDatabaseBridge.java b/src/main/java/com/bgsoftware/superiorskyblock/database/bridge/StackedBlocksDatabaseBridge.java index 037f2521b..a1047e173 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/database/bridge/StackedBlocksDatabaseBridge.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/database/bridge/StackedBlocksDatabaseBridge.java @@ -13,7 +13,7 @@ public final class StackedBlocksDatabaseBridge { public static void saveStackedBlock(StackedBlocksManager stackedBlocks, StackedBlock stackedBlock) { stackedBlocks.getDatabaseBridge().insertObject("stacked_blocks", - new Pair<>("location", Serializers.LOCATION_SPACED_SERIALIZER.serialize(stackedBlock.getLocation())), + new Pair<>("location", Serializers.STACKED_BLOCK_SERIALIZER.serialize(stackedBlock.getLocation())), new Pair<>("amount", stackedBlock.getAmount()), new Pair<>("block_type", stackedBlock.getBlockKey().toString()) ); @@ -21,7 +21,7 @@ public static void saveStackedBlock(StackedBlocksManager stackedBlocks, StackedB public static void deleteStackedBlock(StackedBlocksManager stackedBlocks, StackedBlock stackedBlock) { stackedBlocks.getDatabaseBridge().deleteObject("stacked_blocks", - createFilter(new Pair<>("location", Serializers.LOCATION_SPACED_SERIALIZER.serialize(stackedBlock.getLocation())))); + createFilter(new Pair<>("location", Serializers.STACKED_BLOCK_SERIALIZER.serialize(stackedBlock.getLocation())))); } public static void deleteStackedBlocks(StackedBlocksManager stackedBlocks) { diff --git a/src/main/java/com/bgsoftware/superiorskyblock/serialization/Serializers.java b/src/main/java/com/bgsoftware/superiorskyblock/serialization/Serializers.java index 0cba5a74c..ff4619d35 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/serialization/Serializers.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/serialization/Serializers.java @@ -5,6 +5,8 @@ import com.bgsoftware.superiorskyblock.serialization.impl.ItemStackSerializer; import com.bgsoftware.superiorskyblock.serialization.impl.LocationSerializer; import com.bgsoftware.superiorskyblock.serialization.impl.OffsetSerializer; +import com.bgsoftware.superiorskyblock.serialization.impl.StackedBlockSerializer; +import com.bgsoftware.superiorskyblock.world.blocks.stacked.StackedBlock; import org.bukkit.Location; import org.bukkit.inventory.ItemStack; @@ -16,6 +18,7 @@ public final class Serializers { public static final ISerializer LOCATION_SERIALIZER = new LocationSerializer(","); public static final ISerializer OFFSET_SPACED_SERIALIZER = new OffsetSerializer(", "); public static final ISerializer OFFSET_SERIALIZER = new OffsetSerializer(","); + public static final ISerializer STACKED_BLOCK_SERIALIZER = StackedBlockSerializer.getInstance(); private Serializers() { diff --git a/src/main/java/com/bgsoftware/superiorskyblock/serialization/impl/StackedBlockSerializer.java b/src/main/java/com/bgsoftware/superiorskyblock/serialization/impl/StackedBlockSerializer.java new file mode 100644 index 000000000..f82b3b147 --- /dev/null +++ b/src/main/java/com/bgsoftware/superiorskyblock/serialization/impl/StackedBlockSerializer.java @@ -0,0 +1,49 @@ +package com.bgsoftware.superiorskyblock.serialization.impl; + +import com.bgsoftware.superiorskyblock.serialization.ISerializer; +import com.bgsoftware.superiorskyblock.utils.StringUtils; +import com.bgsoftware.superiorskyblock.utils.locations.SmartLocation; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.jetbrains.annotations.NotNull; + +import javax.annotation.Nullable; + +public final class StackedBlockSerializer implements ISerializer { + + private static final StackedBlockSerializer INSTANCE = new StackedBlockSerializer(); + + public static StackedBlockSerializer getInstance() { + return INSTANCE; + } + + private StackedBlockSerializer() { + } + + @NotNull + @Override + public String serialize(@Nullable Location serializable) { + return serializable == null ? "" : + serializable.getWorld().getName() + ", " + + serializable.getBlockX() + ", " + + serializable.getBlockY() + ", " + + serializable.getBlockZ(); + } + + @Nullable + @Override + public Location deserialize(@Nullable String element) { + if (StringUtils.isBlank(element)) + return null; + + // Due to issues with commit #feacca9ec, we must parse the values as decimals + + String[] positionSections = element.split(", "); + + return positionSections.length < 4 ? null : new Location(Bukkit.getWorld(positionSections[0]), + Double.parseDouble(positionSections[1]), + Double.parseDouble(positionSections[2]), + Double.parseDouble(positionSections[3])); + } + +} diff --git a/src/main/java/com/bgsoftware/superiorskyblock/world/blocks/stacked/StackedBlocksHandler.java b/src/main/java/com/bgsoftware/superiorskyblock/world/blocks/stacked/StackedBlocksHandler.java index 44d54c2b8..86ea4e63e 100644 --- a/src/main/java/com/bgsoftware/superiorskyblock/world/blocks/stacked/StackedBlocksHandler.java +++ b/src/main/java/com/bgsoftware/superiorskyblock/world/blocks/stacked/StackedBlocksHandler.java @@ -262,7 +262,7 @@ public void saveStackedBlocks() { } private void loadStackedBlock(DatabaseResult resultSet) { - Optional location = resultSet.getString("location").map(Serializers.LOCATION_SPACED_SERIALIZER::deserialize); + Optional location = resultSet.getString("location").map(Serializers.STACKED_BLOCK_SERIALIZER::deserialize); if (!location.isPresent()) { SuperiorSkyblockPlugin.log("&cCannot load stacked block from null location, skipping..."); return;