From aebf5a2d702cb3bb53b1c948120abd8a051b301e Mon Sep 17 00:00:00 2001 From: SamB440 Date: Sun, 19 Jan 2020 16:23:32 +0000 Subject: [PATCH] Properly serialize and deserialize itemstacks --- .../islandearth/rpgregions/RPGRegions.java | 3 ++ .../commands/RPGRegionsCommand.java | 3 -- .../rpgregions/gson/ItemStackAdapter.java | 28 +++++++++++++++++++ 3 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 src/main/java/net/islandearth/rpgregions/gson/ItemStackAdapter.java diff --git a/src/main/java/net/islandearth/rpgregions/RPGRegions.java b/src/main/java/net/islandearth/rpgregions/RPGRegions.java index 96ffa6b..a85ca44 100644 --- a/src/main/java/net/islandearth/rpgregions/RPGRegions.java +++ b/src/main/java/net/islandearth/rpgregions/RPGRegions.java @@ -10,6 +10,7 @@ import net.islandearth.languagy.language.Translator; import net.islandearth.rpgregions.api.RPGRegionsAPI; import net.islandearth.rpgregions.commands.RPGRegionsCommand; import net.islandearth.rpgregions.gson.AbstractAdapter; +import net.islandearth.rpgregions.gson.ItemStackAdapter; import net.islandearth.rpgregions.listener.ConnectionListener; import net.islandearth.rpgregions.listener.MoveListener; import net.islandearth.rpgregions.listener.RegionListener; @@ -21,6 +22,7 @@ import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -132,6 +134,7 @@ public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, Langu public Gson getGson() { return new GsonBuilder() .registerTypeAdapter(DiscoveryReward.class, new AbstractAdapter(null)) + .registerTypeHierarchyAdapter(ItemStack.class, new ItemStackAdapter()) .setPrettyPrinting() .serializeNulls().create(); } diff --git a/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java b/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java index 0c0fd2d..b3c0d2e 100644 --- a/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java +++ b/src/main/java/net/islandearth/rpgregions/commands/RPGRegionsCommand.java @@ -195,9 +195,6 @@ public class RPGRegionsCommand extends BaseCommand { String region = args[0]; ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion(region); if (configuredRegion != null) { - System.out.println(player.getInventory().getItemInMainHand().getData()); - System.out.println(player.getInventory().getItemInMainHand().getItemMeta()); - System.out.println(plugin.getGson().toJson(player.getInventory().getItemInMainHand())); configuredRegion.getRewards().add(new ItemReward(player.getInventory().getItemInMainHand())); player.sendMessage(ChatColor.GREEN + "Item added to configuration!"); } else { diff --git a/src/main/java/net/islandearth/rpgregions/gson/ItemStackAdapter.java b/src/main/java/net/islandearth/rpgregions/gson/ItemStackAdapter.java new file mode 100644 index 0000000..0b5e321 --- /dev/null +++ b/src/main/java/net/islandearth/rpgregions/gson/ItemStackAdapter.java @@ -0,0 +1,28 @@ +package net.islandearth.rpgregions.gson; + +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; +import org.bukkit.inventory.ItemStack; + +import java.lang.reflect.Type; +import java.util.Map; + +public class ItemStackAdapter implements JsonSerializer, JsonDeserializer { + + private final Gson gson; + + public ItemStackAdapter() { + this.gson = new GsonBuilder().create(); + } + + @Override + public ItemStack deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException { + Map map = gson.fromJson(jsonElement, new TypeToken>(){}.getType()); + return ItemStack.deserialize(map); + } + + @Override + public JsonElement serialize(ItemStack itemStack, Type type, JsonSerializationContext context) { + return gson.toJsonTree(itemStack.serialize()); + } +} \ No newline at end of file