package com.thebrokenrail.sorcerycraft.advancement; import com.google.gson.JsonObject; import com.thebrokenrail.sorcerycraft.SorceryCraft; import com.thebrokenrail.sorcerycraft.spell.api.Spell; import com.thebrokenrail.sorcerycraft.spell.api.registry.SpellRegistry; import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity; import net.minecraft.advancement.criterion.AbstractCriterion; import net.minecraft.advancement.criterion.AbstractCriterionConditions; import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer; import net.minecraft.predicate.entity.EntityPredicate; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import java.util.Map; public class DiscoverAllSpellsCriterion extends AbstractCriterion { private static final Identifier ID = new Identifier(SorceryCraft.NAMESPACE, "discover_all_spells"); public DiscoverAllSpellsCriterion() { } @Override public Identifier getId() { return ID; } @Override protected DiscoverAllSpellsCriterion.Conditions conditionsFromJson(JsonObject obj, EntityPredicate.Extended playerPredicate, AdvancementEntityPredicateDeserializer predicateDeserializer) { return new DiscoverAllSpellsCriterion.Conditions(playerPredicate); } public void trigger(ServerPlayerEntity player) { test(player, (conditions) -> { SpellPlayerEntity spellPlayer = (SpellPlayerEntity) player; Map spells = spellPlayer.getDiscoveredSpells(); Spell[] maxSpells = SpellRegistry.getMaxSpells(); boolean match = true; for (Spell spell : maxSpells) { if (!spells.containsKey(spell.getID()) || spells.get(spell.getID()) < (spell.getLevel() - 1)) { match = false; break; } } return match; }); } public static class Conditions extends AbstractCriterionConditions { public Conditions(EntityPredicate.Extended player) { super(ID, player); } } }