diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/PlaceableSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/PlaceableSpell.java index 312dfee3..8e0d0b9a 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/PlaceableSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/PlaceableSpell.java @@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.entity.UEntities; import com.minelittlepony.unicopia.particle.OrientedBillboardParticleEffect; import com.minelittlepony.unicopia.particle.ParticleHandle; import com.minelittlepony.unicopia.particle.UParticles; +import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import net.minecraft.nbt.*; import net.minecraft.util.Identifier; @@ -98,7 +99,7 @@ public class PlaceableSpell extends AbstractDelegatingSpell { particlEffect.update(getUuid(), source, spawner -> { spawner.addParticle(new OrientedBillboardParticleEffect(UParticles.MAGIC_RUNES, 90, 0), source.getOriginVector(), Vec3d.ZERO); }).ifPresent(p -> { - p.setAttribute(1, spell.getType().getColor()); + p.setAttribute(Attachment.ATTR_COLOR, spell.getType().getColor()); }); return super.tick(source, Situation.GROUND); @@ -137,7 +138,7 @@ public class PlaceableSpell extends AbstractDelegatingSpell { @Override public void fromNBT(NbtCompound compound) { super.fromNBT(compound); - if (compound.contains("dimension")) { + if (compound.contains("dimension", NbtElement.STRING_TYPE)) { Identifier id = Identifier.tryParse(compound.getString("dimension")); if (id != null) { dimension = RegistryKey.of(Registry.WORLD_KEY, id); diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/Situation.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/Situation.java index 96ff9f4d..1e683da1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/Situation.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/Situation.java @@ -1,8 +1,24 @@ package com.minelittlepony.unicopia.ability.magic.spell; +/** + * The situation of the spell being ticked. + */ public enum Situation { + /** + * Ticks coming from living entities like the player and animals. + */ BODY, + /** + * Ticks coming from flying projectiles. + */ PROJECTILE, + /** + * Ticks coming from a PlaceableSpell that's being updated as a ground entity. + */ GROUND, + /** + * Ticks coming directly from the ground SpellCastEntity. + * Handled only by PlaceableSpell. No other spell should receive this. + */ GROUND_ENTITY } diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java index beb250e4..7f15c9a5 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/DarkVortexSpell.java @@ -9,6 +9,7 @@ import com.minelittlepony.unicopia.ability.magic.spell.ProjectileSpell; import com.minelittlepony.unicopia.ability.magic.spell.Situation; import com.minelittlepony.unicopia.ability.magic.spell.trait.SpellTraits; import com.minelittlepony.unicopia.ability.magic.spell.trait.Trait; +import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.particle.ParticleUtils; import com.minelittlepony.unicopia.particle.SphereParticleEffect; import com.minelittlepony.unicopia.particle.UParticles; @@ -116,13 +117,13 @@ public class DarkVortexSpell extends AttractiveSpell implements ProjectileSpell particlEffect.update(getUuid(), source, spawner -> { spawner.addParticle(new SphereParticleEffect(UParticles.SPHERE, getType().getColor(), 0.99F, radius, SPHERE_OFFSET), source.getOriginVector(), Vec3d.ZERO); }).ifPresent(p -> { - p.setAttribute(0, radius); + p.setAttribute(Attachment.ATTR_RADIUS, radius); }); particlEffect.update(getUuid(), "_ring", source, spawner -> { spawner.addParticle(new SphereParticleEffect(UParticles.DISK, 0xFFFFFFFF, 0.4F, radius + 1, SPHERE_OFFSET), getOrigin(source), Vec3d.ZERO); }).ifPresent(p -> { - p.setAttribute(0, radius * 2F); - p.setAttribute(1, 0xAAAAAA); + p.setAttribute(Attachment.ATTR_RADIUS, radius * 2F); + p.setAttribute(Attachment.ATTR_COLOR, 0xAAAAAA); }); double angle = age % 260; diff --git a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/ShieldSpell.java b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/ShieldSpell.java index 1296f3c2..82a990a1 100644 --- a/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/ShieldSpell.java +++ b/src/main/java/com/minelittlepony/unicopia/ability/magic/spell/effect/ShieldSpell.java @@ -12,6 +12,7 @@ import com.minelittlepony.unicopia.particle.MagicParticleEffect; import com.minelittlepony.unicopia.particle.ParticleHandle; import com.minelittlepony.unicopia.particle.SphereParticleEffect; import com.minelittlepony.unicopia.particle.UParticles; +import com.minelittlepony.unicopia.particle.ParticleHandle.Attachment; import com.minelittlepony.unicopia.projectile.ProjectileUtil; import com.minelittlepony.unicopia.util.shape.Sphere; @@ -75,8 +76,8 @@ public class ShieldSpell extends AbstractSpell { particlEffect.update(getUuid(), source, spawner -> { spawner.addParticle(new SphereParticleEffect(UParticles.SPHERE, getType().getColor(), 0.3F, radius), origin, Vec3d.ZERO); }).ifPresent(p -> { - p.setAttribute(0, radius); - p.setAttribute(1, getType().getColor()); + p.setAttribute(Attachment.ATTR_RADIUS, radius); + p.setAttribute(Attachment.ATTR_COLOR, getType().getColor()); }); } diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/RunesParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/RunesParticle.java index 5b11502b..c63698d9 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/RunesParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/RunesParticle.java @@ -71,7 +71,7 @@ public class RunesParticle extends OrientedBillboardParticle implements Attachme @Override public void setAttribute(int key, Object value) { - if (key == 1) { + if (key == ATTR_COLOR) { int tint = (int)value; red = Color.r(tint); green = Color.g(tint); diff --git a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java index 5b0100a4..5a03b339 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java +++ b/src/main/java/com/minelittlepony/unicopia/client/particle/SphereParticle.java @@ -75,18 +75,18 @@ public class SphereParticle extends Particle implements Attachment { @Override public void setAttribute(int key, Object value) { - if (key == 0) { + if (key == ATTR_RADIUS) { toRadius = (float)value; steps = 20; lerpIncrement = (toRadius - radius) / steps; } - if (key == 1) { + if (key == ATTR_COLOR) { int tint = (int)value; red = Color.r(tint); green = Color.g(tint); blue = Color.b(tint); } - if (key == 2) { + if (key == ATTR_OPACITY) { alpha = (float)value; } } diff --git a/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java index 0db8661e..9ba5b778 100644 --- a/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java +++ b/src/main/java/com/minelittlepony/unicopia/particle/ParticleHandle.java @@ -85,6 +85,10 @@ public class ParticleHandle { } public interface Attachment { + int ATTR_RADIUS = 0; + int ATTR_COLOR = 1; + int ATTR_OPACITY = 2; + boolean isStillAlive(); void attach(Link link);