9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2025-12-28 11:19:24 +00:00

Properly serialize and deserialize itemstacks

This commit is contained in:
SamB440
2020-01-19 16:23:32 +00:00
parent 1e7b66b983
commit aebf5a2d70
3 changed files with 31 additions and 3 deletions

View File

@@ -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<DiscoveryReward>(null))
.registerTypeHierarchyAdapter(ItemStack.class, new ItemStackAdapter())
.setPrettyPrinting()
.serializeNulls().create();
}

View File

@@ -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 {

View File

@@ -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<ItemStack>, JsonDeserializer<ItemStack> {
private final Gson gson;
public ItemStackAdapter() {
this.gson = new GsonBuilder().create();
}
@Override
public ItemStack deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
Map<String, Object> map = gson.fromJson(jsonElement, new TypeToken<Map<String, Object>>(){}.getType());
return ItemStack.deserialize(map);
}
@Override
public JsonElement serialize(ItemStack itemStack, Type type, JsonSerializationContext context) {
return gson.toJsonTree(itemStack.serialize());
}
}