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

Gson testing

This commit is contained in:
SamB440
2020-01-01 20:50:04 +00:00
parent e789abc343
commit 52a4e348cb
7 changed files with 112 additions and 19 deletions

View File

@@ -7,10 +7,14 @@ import net.islandearth.languagy.language.LanguagyImplementation;
import net.islandearth.languagy.language.LanguagyPluginHook;
import net.islandearth.languagy.language.Translator;
import net.islandearth.rpgregions.api.RPGRegionsAPI;
import net.islandearth.rpgregions.gson.InterfaceAdapter;
import net.islandearth.rpgregions.listener.ConnectionListener;
import net.islandearth.rpgregions.listener.MoveListener;
import net.islandearth.rpgregions.listener.RegionListener;
import net.islandearth.rpgregions.managers.RPGRegionsManagers;
import net.islandearth.rpgregions.rewards.DiscoveryReward;
import net.islandearth.rpgregions.rewards.ExperienceReward;
import net.islandearth.rpgregions.rewards.ItemReward;
import net.islandearth.rpgregions.translation.Translations;
import org.bukkit.Bukkit;
import org.bukkit.Material;
@@ -122,6 +126,10 @@ public final class RPGRegions extends JavaPlugin implements RPGRegionsAPI, Langu
}
public Gson getGson() {
return new GsonBuilder().setPrettyPrinting().serializeNulls().create();
return new GsonBuilder()
.registerTypeAdapter(DiscoveryReward.class, new InterfaceAdapter<ItemReward>())
.registerTypeAdapter(DiscoveryReward.class, new InterfaceAdapter<ExperienceReward>())
.setPrettyPrinting()
.serializeNulls().create();
}
}

View File

@@ -0,0 +1,49 @@
package net.islandearth.rpgregions.gson;
import com.google.gson.*;
import java.lang.reflect.Type;
public class InterfaceAdapter<T>
implements JsonSerializer<T>, JsonDeserializer<T> {
@Override
public final JsonElement serialize(final T object, final Type interfaceType, final JsonSerializationContext context) {
final JsonObject member = new JsonObject();
member.addProperty("type", object.getClass().getName());
member.add("data", context.serialize(object));
return member;
}
@Override
public final T deserialize(final JsonElement elem, final Type interfaceType, final JsonDeserializationContext context)
throws JsonParseException {
final JsonObject member = (JsonObject) elem;
final JsonElement typeString = get(member, "type");
final JsonElement data = get(member, "data");
final Type actualType = typeForName(typeString);
return context.deserialize(data, actualType);
}
private Type typeForName(final JsonElement typeElem) {
try {
return Class.forName(typeElem.getAsString());
} catch (ClassNotFoundException e) {
throw new JsonParseException(e);
}
}
private JsonElement get(final JsonObject wrapper, final String memberName) {
final JsonElement elem = wrapper.get(memberName);
if (elem == null) {
throw new JsonParseException(
"no '" + memberName + "' member found in json file.");
}
return elem;
}
}

View File

@@ -1,5 +1,6 @@
package net.islandearth.rpgregions.managers;
import com.google.gson.Gson;
import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
import net.islandearth.rpgregions.api.integrations.IntegrationType;
@@ -7,9 +8,15 @@ import net.islandearth.rpgregions.managers.data.RPGRegionsCache;
import net.islandearth.rpgregions.managers.data.StorageManager;
import net.islandearth.rpgregions.managers.data.StorageType;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import net.islandearth.rpgregions.rewards.DiscoveryReward;
import net.islandearth.rpgregions.rewards.ExperienceReward;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class RPGRegionsManagers {
@@ -33,12 +40,27 @@ public class RPGRegionsManagers {
File folder = new File(plugin.getDataFolder() + "/regions/");
if (!folder.exists()) folder.mkdirs();
List<DiscoveryReward> rewards = new ArrayList<>();
rewards.add(new ExperienceReward(10));
ConfiguredRegion configuredRegion = new ConfiguredRegion("docks-1", rewards);
regionsCache.addConfiguredRegion(configuredRegion);
File file1 = new File(plugin.getDataFolder() + "/regions/" + "docks-1" + ".json");
if (!file1.exists()) {
try {
file1.createNewFile();
Gson gson = plugin.getGson();
gson.toJson(configuredRegion, new FileWriter(file1));
} catch (IOException e) {
e.printStackTrace();
}
}
for (File file : folder.listFiles()) {
// Exclude non-json files
if (file.getName().endsWith(".json")) {
try {
ConfiguredRegion region = plugin.getGson().fromJson(new FileReader(file), ConfiguredRegion.class);
plugin.getManagers().getRegionsCache().addConfiguredRegion(region);
regionsCache.addConfiguredRegion(region);
} catch (Exception e) {
plugin.getLogger().severe("Error loading region config " + file.getName() + ":");
e.printStackTrace();

View File

@@ -1,7 +1,11 @@
package net.islandearth.rpgregions.managers.data.region;
import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.rewards.DiscoveryReward;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
public class ConfiguredRegion {
@@ -9,6 +13,11 @@ public class ConfiguredRegion {
private String id;
private List<DiscoveryReward> rewards;
public ConfiguredRegion(String id, List<DiscoveryReward> rewards) {
this.id = id;
this.rewards = rewards;
}
public void setId(String id) {
this.id = id;
}
@@ -24,4 +33,9 @@ public class ConfiguredRegion {
public List<DiscoveryReward> getRewards() {
return rewards;
}
public void save(RPGRegions plugin) throws IOException {
File file = new File(plugin.getDataFolder() + "/regions/" + this.id + ".yml");
plugin.getGson().toJson(this, new FileWriter(file));
}
}

View File

@@ -4,15 +4,7 @@ import org.bukkit.entity.Player;
public abstract class DiscoveryReward {
private final String region;
DiscoveryReward(String region) {
this.region = region;
}
public String getRegion() {
return region;
}
abstract void award(Player player);
public abstract void award(Player player);
public abstract String getName();
}

View File

@@ -6,13 +6,17 @@ public class ExperienceReward extends DiscoveryReward {
private final int xp;
ExperienceReward(String region, int xp) {
super(region);
public ExperienceReward(int xp) {
this.xp = xp;
}
@Override
void award(Player player) {
public void award(Player player) {
player.giveExp(xp);
}
@Override
public String getName() {
return "Experience";
}
}

View File

@@ -7,15 +7,19 @@ public class ItemReward extends DiscoveryReward {
private final ItemStack item;
ItemReward(String region, ItemStack item) {
super(region);
public ItemReward(ItemStack item) {
this.item = item;
}
@Override
void award(Player player) {
public void award(Player player) {
player.getInventory().addItem(item).forEach((pos, item) -> {
player.getLocation().getWorld().dropItemNaturally(player.getLocation(), item);
});
}
@Override
public String getName() {
return "Item";
}
}