package jas.spawner.refactor.configsloader; import jas.common.helper.GsonHelper; import jas.spawner.refactor.configsloader.ConfigLoader.VersionedFile; import jas.spawner.refactor.despawn.DespawnRuleBuilder; import java.lang.reflect.Type; import java.util.Collection; import java.util.HashSet; import java.util.Map.Entry; import java.util.Set; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; public class DespawnRulesLoader implements VersionedFile { private String version; private Set<DespawnRuleBuilder> builders; private DespawnRulesLoader() { this.builders = new HashSet<DespawnRuleBuilder>(); version = Serializer.FILE_VERSION; } public DespawnRulesLoader(Collection<DespawnRuleBuilder> despawnRules) { this.builders = new HashSet<DespawnRuleBuilder>(); this.builders.addAll(despawnRules); version = Serializer.FILE_VERSION; } public Collection<DespawnRuleBuilder> getRules() { return builders; } @Override public String getVersion() { return version; } public static class Serializer implements JsonSerializer<DespawnRulesLoader>, JsonDeserializer<DespawnRulesLoader> { public final static String FILE_VERSION = "1.0"; public final static String FILE_VERSION_KEY = "FILE_VERSION"; public final static String RULES_KEY = "RULES"; public final static String CAN_DESPAWN_KEY = "DESPAWN_TAG"; public final static String CAN_INSTANT_DESPAWN_KEY = "INSTANT_DESPAWN_TAG"; public final static String DIE_OF_AGE_KEY = "AGE_DEATH_TAG"; public final static String RESET_AGE__KEY = "AGE_RESET_TAG"; @Override public JsonElement serialize(DespawnRulesLoader loader, Type typeOfSrc, JsonSerializationContext context) { JsonObject endObject = new JsonObject(); JsonObject rulesObject = new JsonObject(); for (DespawnRuleBuilder builder : loader.builders) { JsonObject ruleObject = new JsonObject(); ruleObject.addProperty(CAN_DESPAWN_KEY, builder.getCanDespawnExp()); ruleObject.addProperty(CAN_INSTANT_DESPAWN_KEY, builder.getInstantDspwnExp()); ruleObject.addProperty(DIE_OF_AGE_KEY, builder.getAgeDeathExp()); ruleObject.addProperty(RESET_AGE__KEY, builder.getResetAgeExp()); rulesObject.add(builder.content(), ruleObject); } endObject.addProperty(FILE_VERSION_KEY, loader.getVersion()); endObject.add(RULES_KEY, rulesObject); return endObject; } @Override public DespawnRulesLoader deserialize(JsonElement object, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { JsonObject endObject = GsonHelper.getAsJsonObject(object); DespawnRulesLoader loader = new DespawnRulesLoader(); loader.version = GsonHelper.getMemberOrDefault(endObject, FILE_VERSION_KEY, FILE_VERSION); final DespawnRuleBuilder DEFAULT_BUILDER_VALUE = new DespawnRuleBuilder("UseForDefaultValues"); JsonObject rulesObject = GsonHelper.getMemberOrDefault(endObject, RULES_KEY, new JsonObject()); for (Entry<String, JsonElement> entry : rulesObject.entrySet()) { if (entry.getKey() == null || entry.getKey().trim().equals("")) { continue; } JsonObject ruleObject = GsonHelper.getAsJsonObject(entry.getValue()); DespawnRuleBuilder builder = new DespawnRuleBuilder(entry.getKey()); builder.setCanDespawnExp(GsonHelper.getMemberOrDefault(ruleObject, CAN_DESPAWN_KEY, DEFAULT_BUILDER_VALUE.getCanDespawnExp())); builder.setInstantDspwnExp(GsonHelper.getMemberOrDefault(ruleObject, CAN_INSTANT_DESPAWN_KEY, DEFAULT_BUILDER_VALUE.getInstantDspwnExp())); builder.setAgeDeathExp(GsonHelper.getMemberOrDefault(ruleObject, DIE_OF_AGE_KEY, DEFAULT_BUILDER_VALUE.getAgeDeathExp())); builder.setResetAgeExp(GsonHelper.getMemberOrDefault(ruleObject, RESET_AGE__KEY, DEFAULT_BUILDER_VALUE.getResetAgeExp())); loader.builders.add(builder); } return loader; } } }