Save and load items
This commit is contained in:
parent
627e533e9c
commit
d12bf53972
8 changed files with 245 additions and 53 deletions
|
@ -0,0 +1,46 @@
|
|||
package me.unurled.sacredrealms.sr.data.gson;
|
||||
|
||||
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 java.lang.reflect.Type;
|
||||
import me.unurled.sacredrealms.sr.components.item.abilities.Ability;
|
||||
|
||||
public class AbilityDeserializer implements JsonDeserializer<Ability> {
|
||||
|
||||
/**
|
||||
* Gson invokes this call-back method during deserialization when it encounters a field of the
|
||||
* specified type.
|
||||
*
|
||||
* <p>In the implementation of this call-back method, you should consider invoking {@link
|
||||
* JsonDeserializationContext#deserialize(JsonElement, Type)} method to create objects for any
|
||||
* non-trivial field of the returned object. However, you should never invoke it on the same type
|
||||
* passing {@code json} since that will cause an infinite loop (Gson will call your call-back
|
||||
* method again).
|
||||
*
|
||||
* @param json The Json data being deserialized
|
||||
* @param typeOfT The type of the Object to deserialize to
|
||||
* @param context
|
||||
* @return a deserialized object of the specified type typeOfT which is a subclass of {@code T}
|
||||
* @throws JsonParseException if json is not in the expected format of {@code typeofT}
|
||||
*/
|
||||
@Override
|
||||
public Ability deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
||||
throws JsonParseException {
|
||||
try {
|
||||
JsonObject jsonObject = json.getAsJsonObject();
|
||||
|
||||
String name = jsonObject.get("name").getAsString();
|
||||
String description = jsonObject.get("description").getAsString();
|
||||
Integer cooldown = jsonObject.get("cooldown").getAsInt();
|
||||
Integer manaCost = jsonObject.get("manaCost").getAsInt();
|
||||
Integer damage = jsonObject.get("damage").getAsInt();
|
||||
|
||||
return new Ability(name, description, cooldown, manaCost, damage);
|
||||
} catch (Exception e) {
|
||||
throw new JsonParseException("Error deserializing Ability: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package me.unurled.sacredrealms.sr.data.gson;
|
||||
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonParseException;
|
||||
import java.lang.reflect.Type;
|
||||
import me.unurled.sacredrealms.sr.components.item.Item;
|
||||
|
||||
public class ItemDeserializer implements JsonDeserializer<Item> {
|
||||
|
||||
/**
|
||||
* Gson invokes this call-back method during deserialization when it encounters a field of the
|
||||
* specified type.
|
||||
*
|
||||
* <p>In the implementation of this call-back method, you should consider invoking {@link
|
||||
* JsonDeserializationContext#deserialize(JsonElement, Type)} method to create objects for any
|
||||
* non-trivial field of the returned object. However, you should never invoke it on the same type
|
||||
* passing {@code json} since that will cause an infinite loop (Gson will call your call-back
|
||||
* method again).
|
||||
*
|
||||
* @param json The Json data being deserialized
|
||||
* @param typeOfT The type of the Object to deserialize to
|
||||
* @param context
|
||||
* @return a deserialized object of the specified type typeOfT which is a subclass of {@code T}
|
||||
* @throws JsonParseException if json is not in the expected format of {@code typeofT}
|
||||
*/
|
||||
@Override
|
||||
public Item deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
|
||||
throws JsonParseException {
|
||||
Item item = new Item();
|
||||
item.fromString(json.getAsString());
|
||||
return item;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package me.unurled.sacredrealms.sr.data.gson;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import java.lang.reflect.Type;
|
||||
import me.unurled.sacredrealms.sr.components.item.Item;
|
||||
|
||||
public class ItemSerializer implements JsonSerializer<Item> {
|
||||
|
||||
/**
|
||||
* Gson invokes this call-back method during serialization when it encounters a field of the
|
||||
* specified type.
|
||||
*
|
||||
* <p>In the implementation of this call-back method, you should consider invoking {@link
|
||||
* JsonSerializationContext#serialize(Object, Type)} method to create JsonElements for any
|
||||
* non-trivial field of the {@code src} object. However, you should never invoke it on the {@code
|
||||
* src} object itself since that will cause an infinite loop (Gson will call your call-back method
|
||||
* again).
|
||||
*
|
||||
* @param src the object that needs to be converted to Json.
|
||||
* @param typeOfSrc the actual type (fully genericized version) of the source object.
|
||||
* @param context
|
||||
* @return a JsonElement corresponding to the specified object.
|
||||
*/
|
||||
@Override
|
||||
public JsonElement serialize(Item src, Type typeOfSrc, JsonSerializationContext context) {
|
||||
return new JsonPrimitive(src.toString());
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue