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:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user