Skip to content

Commit

Permalink
feat: Add some new actions, including GetNearbyEntities
Browse files Browse the repository at this point in the history
  • Loading branch information
0ffz committed Jul 31, 2024
1 parent 0df093a commit ef66642
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -11,9 +12,9 @@ import org.bukkit.Location
@Serializable
@SerialName("geary:explode")
class ExplodeAction(
val breakBlocks: Expression<Boolean> = Expression.Fixed(true),
val setFire: Expression<Boolean> = Expression.Fixed(true),
val power: Expression<Float> = Expression.Fixed(1.0f),
val breakBlocks: Expression<Boolean> = expr(true),
val setFire: Expression<Boolean> = expr(true),
val power: Expression<Float> = expr(1.0f),
val at: Expression<@Contextual Location>,
) : Action {
override fun ActionGroupContext.execute() {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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<Particle>,
val offsetX: Expression<Double> = expr(0.0),
val offsetY: Expression<Double> = expr(0.0),
val offsetZ: Expression<Double> = expr(0.0),
val color: Expression<Color?> = expr(null),
val count: Expression<Int> = expr(1),
val radius: Expression<Int> = expr(32),
val speed: Expression<Double> = 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()
}
}
Original file line number Diff line number Diff line change
@@ -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))
}
}
Original file line number Diff line number Diff line change
@@ -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<String>,
val category: Expression<SoundCategory> = expr(SoundCategory.MASTER),
val volume: Expression<Float> = expr(1.0f),
val pitch: Expression<Float> = expr(1.0f),
) : Action {
override fun ActionGroupContext.execute() {
val bukkit = entity.get<BukkitEntity>() ?: return
bukkit.world.playSound(
Sound.sound()
.type(Key.key(eval(sound)))
.pitch(eval(pitch))
.volume(eval(volume))
.source(eval(category))
.build(),
bukkit
)
}
}
Original file line number Diff line number Diff line change
@@ -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<Double>,
) : Action {
override fun ActionGroupContext.execute(): List<GearyEntity> {
val radius = eval(radius)
val bukkit = entity.get<BukkitEntity>() ?: return emptyList()
return bukkit
.getNearbyEntities(radius, radius, radius)
.mapNotNull { it.toGearyOrNull().takeIf { it != entity } }
}
}
2 changes: 1 addition & 1 deletion gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -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" }
Expand Down

0 comments on commit ef66642

Please sign in to comment.