Exclude spellbooks from shields' effects and exclude/include classes of entities for shields based on certain traits added to the spell

This commit is contained in:
Sollace 2022-09-11 16:47:06 +02:00
parent d80bc3c7dd
commit 1cea2bf391
2 changed files with 21 additions and 4 deletions

View file

@ -21,6 +21,9 @@ import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.TntEntity;
import net.minecraft.entity.Entity.RemovalReason;
import net.minecraft.entity.decoration.ArmorStandEntity;
import net.minecraft.entity.mob.HostileEntity;
import net.minecraft.entity.passive.PassiveEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.entity.vehicle.AbstractMinecartEntity;
import net.minecraft.entity.vehicle.BoatEntity;
import net.minecraft.util.math.Vec3d;
@ -111,14 +114,26 @@ public class ShieldSpell extends AbstractSpell {
}
protected boolean isValidTarget(Caster<?> source, Entity entity) {
return (entity instanceof LivingEntity
boolean valid = (entity instanceof LivingEntity
|| entity instanceof TntEntity
|| entity instanceof FallingBlockEntity
|| entity instanceof EyeOfEnderEntity
|| entity instanceof BoatEntity
|| ProjectileUtil.isFlyingProjectile(entity)
|| entity instanceof AbstractMinecartEntity)
&& !(entity instanceof ArmorStandEntity);
&& !( entity instanceof ArmorStandEntity
|| entity instanceof EyeOfEnderEntity
|| entity instanceof BoatEntity
);
if (getTraits().get(Trait.LIFE) > 0) {
valid &= !(entity instanceof PassiveEntity);
}
if (getTraits().get(Trait.BLOOD) > 0) {
valid &= entity instanceof HostileEntity;
}
if (getTraits().get(Trait.ICE) > 0) {
valid &= entity instanceof PlayerEntity;
}
return valid;
}
protected long applyEntities(Caster<?> source) {

View file

@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.ability.magic.Affine;
import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
import com.minelittlepony.unicopia.ability.magic.spell.Spell;
import com.minelittlepony.unicopia.entity.SpellbookEntity;
import com.minelittlepony.unicopia.entity.player.Pony;
import com.minelittlepony.unicopia.item.FriendshipBraceletItem;
import net.minecraft.entity.Entity;
@ -33,6 +34,7 @@ public class TargetSelecter {
return source.findAllEntitiesInRange(radius)
.filter(entity -> entity.isAlive() && !entity.isRemoved() && !ownerCheck.test(entity) && !SpellPredicate.IS_SHIELD_LIKE.isOn(entity))
.filter(entity -> !(entity instanceof SpellbookEntity))
.filter(e -> filter.test(source, e))
.map(i -> {
targets.computeIfAbsent(i.getUuid(), Target::new);