From ef66642fead413a240806f323dc226991c1b396e Mon Sep 17 00:00:00 2001 From: Danielle Voznyy Date: Wed, 31 Jul 2024 12:15:32 -0400 Subject: [PATCH] feat: Add some new actions, including GetNearbyEntities --- .../papermc/bridge/actions/ExplodeAction.kt | 7 ++-- .../papermc/bridge/actions/ParticleAction.kt | 33 ++++++++------- .../papermc/bridge/actions/SmiteAction.kt | 19 +++++++++ .../papermc/bridge/actions/SoundAction.kt | 40 +++++++++++++++++++ .../bridge/getters/GetNearbyEntities.kt | 24 +++++++++++ gradle/libs.versions.toml | 2 +- 6 files changed, 107 insertions(+), 18 deletions(-) create mode 100644 geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SmiteAction.kt create mode 100644 geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SoundAction.kt create mode 100644 geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/getters/GetNearbyEntities.kt diff --git a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ExplodeAction.kt b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ExplodeAction.kt index 100a087..74b77c7 100644 --- a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ExplodeAction.kt +++ b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ExplodeAction.kt @@ -3,6 +3,7 @@ package com.mineinabyss.geary.papermc.bridge.actions import com.mineinabyss.geary.actions.Action import com.mineinabyss.geary.actions.ActionGroupContext import com.mineinabyss.geary.actions.expressions.Expression +import com.mineinabyss.geary.actions.expressions.expr import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -11,9 +12,9 @@ import org.bukkit.Location @Serializable @SerialName("geary:explode") class ExplodeAction( - val breakBlocks: Expression = Expression.Fixed(true), - val setFire: Expression = Expression.Fixed(true), - val power: Expression = Expression.Fixed(1.0f), + val breakBlocks: Expression = expr(true), + val setFire: Expression = expr(true), + val power: Expression = expr(1.0f), val at: Expression<@Contextual Location>, ) : Action { override fun ActionGroupContext.execute() { diff --git a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ParticleAction.kt b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ParticleAction.kt index bf7bf9d..3929271 100644 --- a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ParticleAction.kt +++ b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/ParticleAction.kt @@ -1,16 +1,21 @@ +@file:UseSerializers(ColorSerializer::class, IntRangeSerializer::class, DoubleRangeSerializer::class) + package com.mineinabyss.geary.papermc.bridge.actions import com.destroystokyo.paper.ParticleBuilder import com.mineinabyss.geary.actions.Action import com.mineinabyss.geary.actions.ActionGroupContext import com.mineinabyss.geary.actions.expressions.Expression +import com.mineinabyss.geary.actions.expressions.expr import com.mineinabyss.idofront.serialization.ColorSerializer +import com.mineinabyss.idofront.serialization.DoubleRangeSerializer import com.mineinabyss.idofront.serialization.IntRangeSerializer import com.mineinabyss.idofront.util.DoubleRange import com.mineinabyss.idofront.util.randomOrMin import kotlinx.serialization.Contextual import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable +import kotlinx.serialization.UseSerializers import org.bukkit.Color import org.bukkit.Location import org.bukkit.Particle @@ -19,23 +24,23 @@ import org.bukkit.Particle @SerialName("geary:particle") class ParticleAction( val at: Expression<@Contextual Location>, - val particle: Particle, - val offsetX: DoubleRange = 0.0..0.0, - val offsetY: DoubleRange = 0.0..0.0, - val offsetZ: DoubleRange = 0.0..0.0, - val color: @Serializable(with = ColorSerializer::class) Color? = null, - val count: @Serializable(with = IntRangeSerializer::class) IntRange = 1..1, - val radius: Int = 32, - val speed: DoubleRange = 0.0..0.0, + val particle: Expression, + val offsetX: Expression = expr(0.0), + val offsetY: Expression = expr(0.0), + val offsetZ: Expression = expr(0.0), + val color: Expression = expr(null), + val count: Expression = expr(1), + val radius: Expression = expr(32), + val speed: Expression = expr(0.0), ) : Action { override fun ActionGroupContext.execute() { - ParticleBuilder(particle) + ParticleBuilder(eval(particle)) .location(eval(at)) - .offset(offsetX.randomOrMin(), offsetY.randomOrMin(), offsetZ.randomOrMin()) - .color(color) - .count(count.randomOrMin()) - .extra(speed.randomOrMin()) - .receivers(radius) + .offset(eval(offsetX), eval(offsetY), eval(offsetZ)) + .color(eval(color)) + .count(eval(count)) + .extra(eval(speed)) + .receivers(eval(radius)) .spawn() } } diff --git a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SmiteAction.kt b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SmiteAction.kt new file mode 100644 index 0000000..c75d81c --- /dev/null +++ b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SmiteAction.kt @@ -0,0 +1,19 @@ +package com.mineinabyss.geary.papermc.bridge.actions + +import com.mineinabyss.geary.actions.Action +import com.mineinabyss.geary.actions.ActionGroupContext +import com.mineinabyss.geary.actions.expressions.Expression +import kotlinx.serialization.Contextual +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import org.bukkit.Location + +@Serializable +@SerialName("geary:smite") +class SmiteAction( + val at: Expression<@Contextual Location>, +) : Action { + override fun ActionGroupContext.execute() { + eval(at).world.strikeLightning(eval(at)) + } +} diff --git a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SoundAction.kt b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SoundAction.kt new file mode 100644 index 0000000..4f20241 --- /dev/null +++ b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/actions/SoundAction.kt @@ -0,0 +1,40 @@ +@file:UseSerializers(ColorSerializer::class, IntRangeSerializer::class, DoubleRangeSerializer::class) + +package com.mineinabyss.geary.papermc.bridge.actions + +import com.mineinabyss.geary.actions.Action +import com.mineinabyss.geary.actions.ActionGroupContext +import com.mineinabyss.geary.actions.expressions.Expression +import com.mineinabyss.geary.actions.expressions.expr +import com.mineinabyss.idofront.serialization.ColorSerializer +import com.mineinabyss.idofront.serialization.DoubleRangeSerializer +import com.mineinabyss.idofront.serialization.IntRangeSerializer +import com.mineinabyss.idofront.typealiases.BukkitEntity +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.UseSerializers +import net.kyori.adventure.key.Key +import net.kyori.adventure.sound.Sound +import org.bukkit.SoundCategory + +@Serializable +@SerialName("geary:play_sound") +class SoundAction( + val sound: Expression, + val category: Expression = expr(SoundCategory.MASTER), + val volume: Expression = expr(1.0f), + val pitch: Expression = expr(1.0f), +) : Action { + override fun ActionGroupContext.execute() { + val bukkit = entity.get() ?: return + bukkit.world.playSound( + Sound.sound() + .type(Key.key(eval(sound))) + .pitch(eval(pitch)) + .volume(eval(volume)) + .source(eval(category)) + .build(), + bukkit + ) + } +} diff --git a/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/getters/GetNearbyEntities.kt b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/getters/GetNearbyEntities.kt new file mode 100644 index 0000000..5aba727 --- /dev/null +++ b/geary-papermc-bridge/src/main/kotlin/com/mineinabyss/geary/papermc/bridge/getters/GetNearbyEntities.kt @@ -0,0 +1,24 @@ +package com.mineinabyss.geary.papermc.bridge.getters + +import com.mineinabyss.geary.actions.Action +import com.mineinabyss.geary.actions.ActionGroupContext +import com.mineinabyss.geary.actions.expressions.Expression +import com.mineinabyss.geary.datatypes.GearyEntity +import com.mineinabyss.geary.papermc.tracking.entities.toGearyOrNull +import com.mineinabyss.idofront.typealiases.BukkitEntity +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +@SerialName("geary:get.nearby_entities") +class GetNearbyEntities( + val radius: Expression, +) : Action { + override fun ActionGroupContext.execute(): List { + val radius = eval(radius) + val bukkit = entity.get() ?: return emptyList() + return bukkit + .getNearbyEntities(radius, radius, radius) + .mapNotNull { it.toGearyOrNull().takeIf { it != entity } } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 433543b..52cb291 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -geary = "0.26.3-dev.3" +geary = "0.26.3-dev.4" [libraries] geary-core = { module = "com.mineinabyss:geary-core", version.ref = "geary" }