diff options
Diffstat (limited to 'src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java')
-rw-r--r-- | src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java b/src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java index 6b5dfeb..cf192d4 100644 --- a/src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java +++ b/src/main/java/io/github/moulberry/repo/data/NEUMobDropRecipe.java @@ -1,4 +1,76 @@ package io.github.moulberry.repo.data; +import com.google.gson.*; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +@Getter public class NEUMobDropRecipe implements NEURecipe { + @SerializedName("combat_xp") + int combatExperience; + int coins; + @SerializedName("xp") + int enchantingExperience; + String name; + String render; + String panorama; + int level; + List<String> extra; + List<Drop> drops; + transient NEUItem dropsFrom; + + @Data + @AllArgsConstructor + public static class Drop { + NEUIngredient dropItem; + @Nullable + String chance; + List<String> extra; + + public static class Serializer implements JsonDeserializer<Drop> { + + @Override + public Drop deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + if (json.isJsonPrimitive()) { + return new Drop(NEUIngredient.fromString(json.getAsString()), null, Collections.emptyList()); + } + JsonObject d = json.getAsJsonObject(); + return new Drop( + NEUIngredient.fromString(d.get("id").getAsString()), + d.has("chance") ? d.get("chance").getAsString() : null, + d.has("extra") ? context.deserialize(d.get("extra"), new TypeToken<List<String>>() { + }.getType()) : Collections.emptyList() + ); + } + } + } + + @Override + public void fillItemInfo(NEUItem item) { + dropsFrom = item; + } + + @Override + public Collection<NEUIngredient> getAllInputs() { + return Collections.singletonList(NEUIngredient.fromItem(dropsFrom, 1)); + } + + @Override + public Collection<NEUIngredient> getAllOutputs() { + List<NEUIngredient> l = new ArrayList<>(); + for (Drop drop : drops) { + l.add(drop.getDropItem()); + } + return l; + } } |