From 47e8995ad88c9a7d27360180e11047b47196ddd7 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 21 Jan 2023 23:15:14 +0000 Subject: [PATCH] Change rainbow trails to not default to the client player once bound --- .../ability/magic/spell/RainboomAbilitySpell.java | 11 +++++++---- .../client/particle/RainbowTrailParticle.java | 8 ++++++-- .../unicopia/particle/ParticleHandle.java | 1 + 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java index 9c87b32d..bc291791 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/RainboomAbilitySpell.java @@ -6,6 +6,7 @@ import com.minelittlepony.unicopia.ability.magic.spell.effect.*; import com.minelittlepony.unicopia.block.data.ModificationType; import com.minelittlepony.unicopia.entity.player.Pony; import com.minelittlepony.unicopia.particle.ParticleHandle; +import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.particle.UParticles; import com.minelittlepony.unicopia.util.MagicalDamageSource; import com.minelittlepony.unicopia.util.shape.Shape; @@ -46,11 +47,13 @@ public class RainboomAbilitySpell extends AbstractSpell { return false; } - if (source.isClient()) { - particlEffect.update(getUuid(), source, spawner -> { - spawner.addParticle(UParticles.RAINBOOM_TRAIL, source.getOriginVector(), Vec3d.ZERO); - }); + particlEffect.update(getUuid(), source, spawner -> { + spawner.addParticle(UParticles.RAINBOOM_TRAIL, source.getOriginVector(), Vec3d.ZERO); + }).ifPresent(attachment -> { + attachment.setAttribute(Attachment.ATTR_BOUND, 1); + }); + if (source.isClient()) { // source.addParticle(new OrientedBillboardParticleEffect(UParticles.RAINBOOM_RING, source.getPhysics().getMotionAngle()), source.getOriginVector(), Vec3d.ZERO); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/RainbowTrailParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/RainbowTrailParticle.java index d8f6f32a..94645e37 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/RainbowTrailParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/RainbowTrailParticle.java @@ -27,6 +27,8 @@ public class RainbowTrailParticle extends AbstractBillboardParticle implements A private Optional link = Optional.empty(); + private boolean bound; + public RainbowTrailParticle(DefaultParticleType effect, ClientWorld world, double x, double y, double z, double velocityX, double velocityY, double velocityZ) { super(world, x, y, z, velocityX, velocityY, velocityZ); segments.add(new Segment(new Vec3d(x, y, z))); @@ -55,7 +57,9 @@ public class RainbowTrailParticle extends AbstractBillboardParticle implements A @Override public void setAttribute(int key, Number value) { - + if (key == Attachment.ATTR_COLOR) { + bound = value.intValue() == 1; + } } @Override @@ -96,7 +100,7 @@ public class RainbowTrailParticle extends AbstractBillboardParticle implements A if (link.isPresent()) { age = 0; link.flatMap(Link::get).ifPresent(this::follow); - } else if (!dead) { + } else if (!dead && !bound) { follow(Pony.of(MinecraftClient.getInstance().player)); } diff --git a/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java index 000bd705..a7a4eb5d 100644 --- a/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java @@ -90,6 +90,7 @@ public class ParticleHandle { int ATTR_OPACITY = 2; int ATTR_PITCH = 3; int ATTR_YAW = 4; + int ATTR_BOUND = 5; boolean isStillAlive();