From 1b17ab24c9ccd47d736ba24ac4be3ff9822f8635 Mon Sep 17 00:00:00 2001
From: Sollace <sollacea@gmail.com>
Date: Fri, 31 Dec 2021 15:36:31 +0200
Subject: [PATCH] Move the collides predicate out of the RayTraceHelper class

---
 .../minelittlepony/unicopia/ability/BatPonyHangAbility.java | 2 +-
 .../unicopia/ability/ChangelingDisguiseAbility.java         | 2 +-
 .../unicopia/ability/UnicornCastingAbility.java             | 3 ++-
 .../unicopia/ability/UnicornProjectileAbility.java          | 2 +-
 .../unicopia/ability/UnicornTeleportAbility.java            | 2 +-
 .../unicopia/ability/magic/spell/effect/CatapultSpell.java  | 2 +-
 .../java/com/minelittlepony/unicopia/item/ZapAppleItem.java | 2 +-
 .../com/minelittlepony/unicopia/util/RayTraceHelper.java    | 6 +++---
 8 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java
index 5cd47fc1..fcc70780 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/BatPonyHangAbility.java
@@ -44,7 +44,7 @@ public class BatPonyHangAbility implements Ability<Multi> {
             return new Multi(BlockPos.ZERO, 0);
         }
 
-        BlockPos poss = RayTraceHelper.doTrace(player.getMaster(), 3, 1, EntityPredicates.EXCEPT_SPECTATOR).getBlockPos().orElse(null);
+        BlockPos poss = RayTraceHelper.doTrace(player.getMaster(), 3, 1, EntityPredicates.CAN_COLLIDE).getBlockPos().orElse(null);
         if (poss != null) {
             boolean air = player.getWorld().isAir(poss.down()) && player.getWorld().isAir(poss.down(2));
 
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java
index b31700b6..5ed1fe59 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/ChangelingDisguiseAbility.java
@@ -42,7 +42,7 @@ public class ChangelingDisguiseAbility extends ChangelingFeedAbility {
             return;
         }
 
-        RayTraceHelper.Trace trace = RayTraceHelper.doTrace(player, 10, 1, EntityPredicates.EXCEPT_SPECTATOR.and(e -> !(e instanceof LightningEntity)));
+        RayTraceHelper.Trace trace = RayTraceHelper.doTrace(player, 10, 1, EntityPredicates.CAN_COLLIDE.and(e -> !(e instanceof LightningEntity)));
 
         Entity looked = trace.getEntity().filter(e -> !(e instanceof AbstractDecorationEntity)).map(e -> {
             return e instanceof PlayerEntity ? Pony.of((PlayerEntity)e)
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java
index 1c8ce90a..c0c877f9 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornCastingAbility.java
@@ -15,6 +15,7 @@ import com.minelittlepony.unicopia.particle.MagicParticleEffect;
 import com.minelittlepony.unicopia.util.RayTraceHelper;
 import com.minelittlepony.unicopia.util.VecHelper;
 
+import net.minecraft.entity.Entity;
 import net.minecraft.item.ItemStack;
 import net.minecraft.particle.ParticleTypes;
 import net.minecraft.predicate.entity.EntityPredicates;
@@ -107,7 +108,7 @@ public class UnicornCastingAbility implements Ability<Hit> {
                         player.playSound(SoundEvents.ENTITY_ITEM_BREAK, 1, 0.5F);
                     } else {
                         if (s instanceof HomingSpell) {
-                            RayTraceHelper.doTrace(player.getMaster(), 600, 1, EntityPredicates.EXCEPT_SPECTATOR).getEntity().ifPresent(((HomingSpell)s)::setTarget);
+                            RayTraceHelper.doTrace(player.getMaster(), 600, 1, EntityPredicates.CAN_COLLIDE).getEntity().ifPresent(((HomingSpell)s)::setTarget);
                         }
                         player.playSound(SoundEvents.BLOCK_BEACON_POWER_SELECT, 0.05F, 2.2F);
                     }
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java
index 324bbd8d..a13f1f28 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornProjectileAbility.java
@@ -70,7 +70,7 @@ public class UnicornProjectileAbility implements Ability<Hit> {
 
             spell.toThrowable().throwProjectile(player).ifPresent(projectile -> {
                 if (spell instanceof HomingSpell) {
-                    RayTraceHelper.doTrace(player.getMaster(), 600, 1, EntityPredicates.EXCEPT_SPECTATOR).getEntity().filter(((HomingSpell)spell)::setTarget).ifPresent(target -> {
+                    RayTraceHelper.doTrace(player.getMaster(), 600, 1, EntityPredicates.CAN_COLLIDE).getEntity().filter(((HomingSpell)spell)::setTarget).ifPresent(target -> {
                         projectile.setHomingTarget(target);
                     });
                 }
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java
index a687ef4f..0c19a704 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/UnicornTeleportAbility.java
@@ -67,7 +67,7 @@ public class UnicornTeleportAbility implements Ability<Pos> {
     @Override
     public Pos tryActivate(Pony player) {
         int maxDistance = player.getMaster().isCreative() ? 1000 : 100;
-        HitResult ray = RayTraceHelper.doTrace(player.getMaster(), maxDistance, 1, EntityPredicates.EXCEPT_SPECTATOR).getResult();
+        HitResult ray = RayTraceHelper.doTrace(player.getMaster(), maxDistance, 1, EntityPredicates.CAN_COLLIDE).getResult();
 
         World w = player.getWorld();
 
diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/CatapultSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/CatapultSpell.java
index d9ff1006..d41c8aa1 100644
--- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/CatapultSpell.java
+++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/CatapultSpell.java
@@ -86,7 +86,7 @@ public class CatapultSpell extends AbstractSpell implements ProjectileSpell {
 
         double maxDistance = 2 + (getTraits().get(Trait.FOCUS) - 50) * 8;
 
-        HitResult ray = RayTraceHelper.doTrace(caster.getMaster(), maxDistance, 1, EntityPredicates.EXCEPT_SPECTATOR).getResult();
+        HitResult ray = RayTraceHelper.doTrace(caster.getMaster(), maxDistance, 1, EntityPredicates.CAN_COLLIDE).getResult();
 
         if (ray.getType() == HitResult.Type.ENTITY) {
             EntityHitResult result = (EntityHitResult)ray;
diff --git a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java
index d164155a..0bbe158a 100644
--- a/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java
+++ b/src/main/java/com/minelittlepony/unicopia/item/ZapAppleItem.java
@@ -43,7 +43,7 @@ public class ZapAppleItem extends AppleItem implements ChameleonItem {
     public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand hand) {
         ItemStack stack = player.getStackInHand(hand);
 
-        Optional<Entity> entity = RayTraceHelper.doTrace(player, 5, 1, EntityPredicates.EXCEPT_SPECTATOR.and(e -> canFeedTo(stack, e))).getEntity();
+        Optional<Entity> entity = RayTraceHelper.doTrace(player, 5, 1, EntityPredicates.CAN_COLLIDE.and(e -> canFeedTo(stack, e))).getEntity();
 
         if (entity.isPresent()) {
             return onFedTo(stack, player, entity.get());
diff --git a/src/main/java/com/minelittlepony/unicopia/util/RayTraceHelper.java b/src/main/java/com/minelittlepony/unicopia/util/RayTraceHelper.java
index c8555554..588c2651 100644
--- a/src/main/java/com/minelittlepony/unicopia/util/RayTraceHelper.java
+++ b/src/main/java/com/minelittlepony/unicopia/util/RayTraceHelper.java
@@ -18,7 +18,7 @@ import net.minecraft.util.math.Vec3d;
 
 public class RayTraceHelper {
     public static <T extends Entity> Optional<T> findEntity(Entity e, double distance, float tickDelta, Predicate<Entity> predicate) {
-        return doTrace(e, distance, tickDelta, EntityPredicates.EXCEPT_SPECTATOR.and(predicate)).getEntity();
+        return doTrace(e, distance, tickDelta, EntityPredicates.CAN_COLLIDE.and(predicate)).getEntity();
     }
 
     /**
@@ -33,7 +33,7 @@ public class RayTraceHelper {
      * @return A Trace describing what was found.
      */
     public static Trace doTrace(Entity e, double distance, float tickDelta) {
-        return doTrace(e, distance, tickDelta, EntityPredicates.EXCEPT_SPECTATOR);
+        return doTrace(e, distance, tickDelta, EntityPredicates.CAN_COLLIDE);
     }
 
     /**
@@ -55,7 +55,7 @@ public class RayTraceHelper {
 
         final Box box = e.getBoundingBox().stretch(ray).expand(1);
 
-        EntityHitResult pointedEntity = ProjectileUtil.raycast(e, start, start.add(ray), box, predicate.and(Entity::collides), distance);
+        EntityHitResult pointedEntity = ProjectileUtil.raycast(e, start, start.add(ray), box, predicate, distance);
 
         if (pointedEntity != null) {
             return new Trace(pointedEntity);