package com.asteria.utility.json; import java.util.Arrays; import java.util.Objects; import com.asteria.game.character.npc.drop.NpcDrop; import com.asteria.game.character.npc.drop.NpcDropCache; import com.asteria.game.character.npc.drop.NpcDropManager; import com.asteria.game.character.npc.drop.NpcDropTable; import com.asteria.utility.JsonLoader; import com.google.gson.Gson; import com.google.gson.JsonObject; /** * The {@link JsonLoader} implementation that loads all npc drops. * * @author lare96 <http://github.com/lare96> */ public final class NpcDropTableLoader extends JsonLoader { /** * Creates a new {@link NpcDropTableLoader}. */ public NpcDropTableLoader() { super("./data/json/npcs/npc_drops.json"); } @Override public void load(JsonObject reader, Gson builder) { int[] array = builder.fromJson(reader.get("ids"), int[].class); NpcDrop[] unique = Objects.requireNonNull(builder.fromJson(reader.get("unique"), NpcDrop[].class)); NpcDropCache[] common = Objects.requireNonNull(builder.fromJson(reader.get("common"), NpcDropCache[].class)); if (Arrays.stream(common).anyMatch(Objects::isNull)) throw new NullPointerException("Invalid common drop table, npc_drops.json"); Arrays.stream(array).forEach(id -> NpcDropManager.TABLES.put(id, new NpcDropTable(unique, common))); } }