2020-03-18 00:42:02 +00:00
|
|
|
package com.thebrokenrail.sorcerycraft.advancement;
|
|
|
|
|
|
|
|
import com.google.gson.JsonObject;
|
|
|
|
import com.thebrokenrail.sorcerycraft.SorceryCraft;
|
|
|
|
import com.thebrokenrail.sorcerycraft.spell.api.Spell;
|
2020-03-21 02:05:32 +00:00
|
|
|
import com.thebrokenrail.sorcerycraft.spell.api.registry.SpellRegistry;
|
2020-03-18 00:42:02 +00:00
|
|
|
import com.thebrokenrail.sorcerycraft.spell.util.SpellPlayerEntity;
|
|
|
|
import net.minecraft.advancement.criterion.AbstractCriterion;
|
|
|
|
import net.minecraft.advancement.criterion.AbstractCriterionConditions;
|
2020-05-02 18:42:16 +00:00
|
|
|
import net.minecraft.predicate.entity.AdvancementEntityPredicateDeserializer;
|
|
|
|
import net.minecraft.predicate.entity.EntityPredicate;
|
2020-03-18 00:42:02 +00:00
|
|
|
import net.minecraft.server.network.ServerPlayerEntity;
|
|
|
|
import net.minecraft.util.Identifier;
|
|
|
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
public class DiscoverAllSpellsCriterion extends AbstractCriterion<DiscoverAllSpellsCriterion.Conditions> {
|
|
|
|
private static final Identifier ID = new Identifier(SorceryCraft.NAMESPACE, "discover_all_spells");
|
|
|
|
|
|
|
|
public DiscoverAllSpellsCriterion() {
|
|
|
|
}
|
|
|
|
|
2020-05-02 18:42:16 +00:00
|
|
|
@Override
|
2020-03-18 00:42:02 +00:00
|
|
|
public Identifier getId() {
|
|
|
|
return ID;
|
|
|
|
}
|
|
|
|
|
2020-05-02 18:42:16 +00:00
|
|
|
@Override
|
|
|
|
protected DiscoverAllSpellsCriterion.Conditions conditionsFromJson(JsonObject obj, EntityPredicate.Extended playerPredicate, AdvancementEntityPredicateDeserializer predicateDeserializer) {
|
|
|
|
return new DiscoverAllSpellsCriterion.Conditions(playerPredicate);
|
2020-03-18 00:42:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public void trigger(ServerPlayerEntity player) {
|
2020-05-02 18:42:16 +00:00
|
|
|
test(player, (conditions) -> {
|
2020-03-18 00:42:02 +00:00
|
|
|
SpellPlayerEntity spellPlayer = (SpellPlayerEntity) player;
|
|
|
|
Map<Identifier, Integer> 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 {
|
2020-05-02 18:42:16 +00:00
|
|
|
public Conditions(EntityPredicate.Extended player) {
|
|
|
|
super(ID, player);
|
2020-03-18 00:42:02 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|