diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/CircleParticleAnimation.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/CircleParticleAnimation.kt index ecd433e..be6e11c 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/CircleParticleAnimation.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/CircleParticleAnimation.kt @@ -1,19 +1,15 @@ package com.willfp.ecocrates.crate.placed.particle import com.willfp.eco.util.NumberUtils -import org.bukkit.Location +import org.bukkit.util.Vector import kotlin.math.PI class CircleParticleAnimation : ParticleAnimation("circle") { - override fun getSpawnLocation(center: Location, tick: Int): Location { - val x = center.x + (NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - val y = center.y + config.getDouble("height") - val z = center.z + (NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - - return center.clone().apply { - this.x = x - this.y = y - this.z = z - } + override fun getOffset(tick: Int): Vector { + return Vector( + NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius"), + config.getDouble("height"), + NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius") + ) } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/DoubleSpiralParticleAnimation.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/DoubleSpiralParticleAnimation.kt index 60656ff..db0612c 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/DoubleSpiralParticleAnimation.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/DoubleSpiralParticleAnimation.kt @@ -1,25 +1,19 @@ package com.willfp.ecocrates.crate.placed.particle import com.willfp.eco.util.NumberUtils -import org.bukkit.Location +import org.bukkit.util.Vector import kotlin.math.PI class DoubleSpiralParticleAnimation : ParticleAnimation("double_spiral") { - override fun getSpawnLocation(center: Location, tick: Int): Location { - var x = center.x + (NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - var y = center.y + (-NumberUtils.fastCos(config.getDouble("rises-per-second") * 2 * PI * tick / 20) * config.getDouble("height")) - var z = center.z + (NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - - if (tick % 2 == 0) { - x *= -1 - y *= -1 - z *= -1 - } - - return center.clone().apply { - this.x = x - this.y = y - this.z = z + override fun getOffset(tick: Int): Vector { + return Vector( + NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius"), + -NumberUtils.fastCos(config.getDouble("rises-per-second") * 2 * PI * tick / 20) * config.getDouble("height"), + NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius") + ).apply { + if (tick % 2 == 0) { + this.multiply(-1) + } } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/ParticleAnimation.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/ParticleAnimation.kt index c441256..2612ebc 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/ParticleAnimation.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/ParticleAnimation.kt @@ -3,6 +3,7 @@ package com.willfp.ecocrates.crate.placed.particle import com.willfp.ecocrates.EcoCratesPlugin import org.bukkit.Location import org.bukkit.Particle +import org.bukkit.util.Vector abstract class ParticleAnimation( val id: String @@ -18,10 +19,10 @@ abstract class ParticleAnimation( } fun spawnParticle(center: Location, tick: Int, particle: Particle) { - val location = getSpawnLocation(center.clone(), tick) + val location = center.clone().add(getOffset(tick)) val world = location.world ?: return world.spawnParticle(particle, location, 1, 0.0, 0.0, 0.0, 0.0) } - protected abstract fun getSpawnLocation(center: Location, tick: Int): Location -} \ No newline at end of file + protected abstract fun getOffset(tick: Int): Vector +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/SpiralParticleAnimation.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/SpiralParticleAnimation.kt index e3e71ca..7dd1bdb 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/SpiralParticleAnimation.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecocrates/crate/placed/particle/SpiralParticleAnimation.kt @@ -1,19 +1,15 @@ package com.willfp.ecocrates.crate.placed.particle import com.willfp.eco.util.NumberUtils -import org.bukkit.Location +import org.bukkit.util.Vector import kotlin.math.PI class SpiralParticleAnimation : ParticleAnimation("spiral") { - override fun getSpawnLocation(center: Location, tick: Int): Location { - val x = center.x + (NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - val y = center.y + (-NumberUtils.fastCos(config.getDouble("rises-per-second") * 2 * PI * tick / 20) * config.getDouble("height")) - val z = center.z + (NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius")) - - return center.clone().apply { - this.x = x - this.y = y - this.z = z - } + override fun getOffset(tick: Int): Vector { + return Vector( + NumberUtils.fastSin(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius"), + -NumberUtils.fastCos(config.getDouble("rises-per-second") * 2 * PI * tick / 20) * config.getDouble("height"), + NumberUtils.fastCos(config.getDouble("spirals-per-second") * 2 * PI * tick / 20) * config.getDouble("radius") + ) } }