Fixed shield effect affecting items and the caster when sneaking

This commit is contained in:
Sollace 2021-01-27 08:57:06 +02:00
parent 7ecac5ccae
commit 1bcba1c08d
2 changed files with 9 additions and 16 deletions

View file

@ -5,6 +5,7 @@ import java.util.stream.Collectors;
import com.minelittlepony.unicopia.Affinity; import com.minelittlepony.unicopia.Affinity;
import com.minelittlepony.unicopia.EquinePredicates; import com.minelittlepony.unicopia.EquinePredicates;
import com.minelittlepony.unicopia.Unicopia;
import com.minelittlepony.unicopia.ability.magic.Attached; import com.minelittlepony.unicopia.ability.magic.Attached;
import com.minelittlepony.unicopia.ability.magic.Caster; import com.minelittlepony.unicopia.ability.magic.Caster;
import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.entity.player.Pony;
@ -15,6 +16,7 @@ import com.minelittlepony.unicopia.projectile.ProjectileUtil;
import com.minelittlepony.unicopia.util.shape.Sphere; import com.minelittlepony.unicopia.util.shape.Sphere;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity; import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.sound.SoundEvents; import net.minecraft.sound.SoundEvents;
@ -98,21 +100,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements Attached {
boolean ownerIsValid = source.getAffinity() != Affinity.BAD && EquinePredicates.PLAYER_UNICORN.test(owner); boolean ownerIsValid = source.getAffinity() != Affinity.BAD && EquinePredicates.PLAYER_UNICORN.test(owner);
return source.findAllEntitiesInRange(radius) return source.findAllEntitiesInRange(radius)
.filter(entity -> { .filter(entity -> !(entity instanceof ItemEntity || (ownerIsValid && Pony.equal(entity, owner))))
if (!ownerIsValid) {
return true;
}
boolean ownerEquals = (
entity.equals(owner)
|| (entity instanceof PlayerEntity && owner instanceof PlayerEntity && Pony.equal((PlayerEntity)entity, (PlayerEntity)owner)));
if (!owner.isSneaking()) {
return ownerEquals;
}
return !ownerEquals;
})
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -128,7 +116,7 @@ public class ShieldSpell extends AbstractRangedAreaSpell implements Attached {
applyRadialEffect(source, i, dist, radius); applyRadialEffect(source, i, dist, radius);
} catch (Throwable e) { } catch (Throwable e) {
e.printStackTrace(); Unicopia.LOGGER.error("Error updating shield effect", e);
} }
}); });

View file

@ -1,6 +1,7 @@
package com.minelittlepony.unicopia.entity.player; package com.minelittlepony.unicopia.entity.player;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import javax.annotation.Nullable; import javax.annotation.Nullable;
@ -476,6 +477,10 @@ public class Pony implements Caster<PlayerEntity>, Equine<PlayerEntity>, Transmi
return one == two || (one != null && two != null && one.getId().equals(two.getId())); return one == two || (one != null && two != null && one.getId().equals(two.getId()));
} }
public static boolean equal(Entity one, Entity two) {
return Objects.equals(one, two) || (one instanceof PlayerEntity && two instanceof PlayerEntity && equal((PlayerEntity)one, (PlayerEntity)two));
}
public static boolean equal(PlayerEntity one, PlayerEntity two) { public static boolean equal(PlayerEntity one, PlayerEntity two) {
return one == two || (one != null && two != null && equal(one.getGameProfile(), two.getGameProfile())); return one == two || (one != null && two != null && equal(one.getGameProfile(), two.getGameProfile()));
} }