Unicopia/src/main/java/com/minelittlepony/unicopia/EquinePredicates.java

55 lines
2.7 KiB
Java
Raw Normal View History

package com.minelittlepony.unicopia;
2020-04-26 14:46:03 +02:00
import java.util.function.Predicate;
2020-10-04 12:58:01 +02:00
import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.entity.Equine;
import com.minelittlepony.unicopia.entity.MagicImmune;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.item.enchantment.UEnchantments;
import net.minecraft.enchantment.EnchantmentHelper;
2022-10-01 18:20:53 +02:00
import net.minecraft.entity.*;
import net.minecraft.entity.decoration.AbstractDecorationEntity;
2020-01-16 12:35:46 +01:00
import net.minecraft.entity.player.PlayerEntity;
2022-10-01 18:20:53 +02:00
import net.minecraft.predicate.entity.EntityPredicates;
public interface EquinePredicates {
2020-04-26 14:46:03 +02:00
Predicate<Entity> IS_PLAYER = e -> e instanceof PlayerEntity;
2021-03-06 22:11:17 +01:00
Predicate<Entity> RACE_INTERACT_WITH_CLOUDS = raceMatches(Race::canInteractWithClouds);
2020-04-26 14:46:03 +02:00
2021-03-06 22:11:17 +01:00
Predicate<Entity> PLAYER_EARTH = IS_PLAYER.and(ofRace(Race.EARTH));
Predicate<Entity> PLAYER_BAT = IS_PLAYER.and(ofRace(Race.BAT)).or(physicalRaceMatches(Race.BAT::equals));
2021-03-06 22:11:17 +01:00
Predicate<Entity> PLAYER_UNICORN = IS_PLAYER.and(raceMatches(Race::canCast));
Predicate<Entity> PLAYER_CHANGELING = IS_PLAYER.and(ofRace(Race.CHANGELING));
2021-08-04 15:38:03 +02:00
Predicate<Entity> PLAYER_PEGASUS = IS_PLAYER.and(e -> ((PlayerEntity)e).getAbilities().creativeMode || RACE_INTERACT_WITH_CLOUDS.test(e));
2020-04-26 14:46:03 +02:00
2021-09-02 19:11:51 +02:00
Predicate<Entity> PLAYER_CAN_USE_EARTH = IS_PLAYER.and(raceMatches(Race::canUseEarth));
Predicate<Entity> IS_CASTER = e -> !e.isRemoved() && (e instanceof Caster || IS_PLAYER.test(e));
Predicate<Entity> IS_PLACED_SPELL = e -> e instanceof Caster && !e.isRemoved();
2020-10-04 12:58:01 +02:00
Predicate<Entity> IS_MAGIC_IMMUNE = EntityPredicates.VALID_LIVING_ENTITY.negate().or(e -> e instanceof MagicImmune);
Predicate<Entity> EXCEPT_MAGIC_IMMUNE = IS_MAGIC_IMMUNE.negate();
Predicate<LivingEntity> HAS_WANT_IT_NEED_IT = e -> {
return EnchantmentHelper.getEquipmentLevel(UEnchantments.WANT_IT_NEED_IT, e) > 0
|| EnchantmentHelper.getLevel(UEnchantments.WANT_IT_NEED_IT, e.getOffHandStack()) > 0
|| EnchantmentHelper.getLevel(UEnchantments.WANT_IT_NEED_IT, e.getMainHandStack()) > 0;
};
2022-10-01 18:20:53 +02:00
Predicate<Entity> VALID_FOR_DISGUISE = EntityPredicates.EXCEPT_SPECTATOR.and(e -> !(e instanceof LightningEntity || e instanceof AbstractDecorationEntity));
2021-03-06 22:11:17 +01:00
static Predicate<Entity> ofRace(Race race) {
return raceMatches(race::equals);
}
static Predicate<Entity> raceMatches(Predicate<Race> predicate) {
return e -> Equine.of(e).map(Equine::getSpecies).filter(predicate).isPresent();
2020-09-25 20:24:48 +02:00
}
static Predicate<Entity> physicalRaceMatches(Predicate<Race> predicate) {
return e -> Pony.of(e).map(Pony::getActualSpecies).filter(predicate).isPresent();
}
}