Skip to content

Commit 51c95c7

Browse files
committed
更新粒子
1 parent 12642d1 commit 51c95c7

File tree

8 files changed

+129
-34
lines changed

8 files changed

+129
-34
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ taboolib {
6969
relocate("org.joml", "org.gitee.orryx.joml")
7070
relocate("com.larksuite.oapi", "org.gitee.orryx.larksuite.oapi")
7171
version {
72-
taboolib = "6.2.2"
72+
taboolib = "6.2.3-0b616a8"
7373
coroutines = "1.8.0"
7474
}
7575
}

src/main/kotlin/org/gitee/orryx/core/kether/actions/effect/EffectActions.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import org.gitee.orryx.core.targets.ITargetLocation
99
import org.gitee.orryx.module.wiki.Action
1010
import org.gitee.orryx.module.wiki.Type
1111
import org.gitee.orryx.utils.*
12-
import taboolib.common.platform.ProxyParticle
1312
import taboolib.common.platform.function.adaptLocation
1413
import taboolib.common5.cint
1514
import taboolib.library.kether.QuestReader
15+
import taboolib.library.xseries.XParticle
1616
import taboolib.module.kether.*
1717
import java.awt.Color
1818

@@ -230,7 +230,7 @@ object EffectActions {
230230
run(size).float { size ->
231231
val data = color.split(" ")
232232
val effectBuilder = effectBuilder() ?: return@float
233-
effectBuilder.dustData = ProxyParticle.DustData(Color(data[0].cint, data[1].cint, data[2].cint), size)
233+
effectBuilder.dustData = ParticleData.DustData(Color(data[0].cint, data[1].cint, data[2].cint), size)
234234
}
235235
}
236236
}
@@ -248,7 +248,7 @@ object EffectActions {
248248
val toData = toColor.split(" ")
249249
val effectBuilder = effectBuilder() ?: return@float
250250
effectBuilder.dustTransitionData =
251-
ProxyParticle.DustTransitionData(
251+
ParticleData.DustTransitionData(
252252
Color(data[0].cint, data[1].cint, data[2].cint),
253253
Color(toData[0].cint, toData[1].cint, toData[2].cint),
254254
size
@@ -272,7 +272,7 @@ object EffectActions {
272272
run(lore).str { lore ->
273273
run(customModelData).int end@{ customModelData ->
274274
val effectBuilder = effectBuilder() ?: return@end
275-
effectBuilder.itemData = ProxyParticle.ItemData(material, data, name, listOf(lore), customModelData)
275+
effectBuilder.itemData = ParticleData.ItemData(material, data, name, listOf(lore), customModelData)
276276
}
277277
}
278278
}
@@ -288,7 +288,7 @@ object EffectActions {
288288
run(material).str { material ->
289289
run(data).int { data ->
290290
val effectBuilder = effectBuilder() ?: return@int
291-
effectBuilder.blockData = ProxyParticle.BlockData(material, data)
291+
effectBuilder.blockData = ParticleData.BlockData(material, data)
292292
}
293293
}
294294
}
@@ -303,8 +303,8 @@ object EffectActions {
303303
run(arrivalTime).int { arrivalTime ->
304304
container(destination, self()) end@{
305305
val effectBuilder = effectBuilder() ?: return@end
306-
val des = it.firstInstanceOrNull<ITargetEntity<*>>()?.entity?.uniqueId?.let { uuid -> ProxyParticle.VibrationData.EntityDestination(uuid) } ?: ProxyParticle.VibrationData.LocationDestination(adaptLocation(it.firstInstance<ITargetLocation<*>>().location))
307-
effectBuilder.vibrationData = ProxyParticle.VibrationData(
306+
val des = it.firstInstanceOrNull<ITargetEntity<*>>()?.entity?.uniqueId?.let { uuid -> ParticleData.VibrationData.EntityDestination(uuid) } ?: ParticleData.VibrationData.LocationDestination(adaptLocation(it.firstInstance<ITargetLocation<*>>().location))
307+
effectBuilder.vibrationData = ParticleData.VibrationData(
308308
adaptLocation(origin.firstInstance<ITargetLocation<*>>().location),
309309
des,
310310
arrivalTime
@@ -341,7 +341,7 @@ object EffectActions {
341341
"period" -> effectBuilder.period = it.read(0, 1)
342342
"count" -> effectBuilder.count = it.read(0, 1)
343343
"speed" -> effectBuilder.speed = it.read(0, 0.0)
344-
"particle" -> effectBuilder.particle = it.read(0, ProxyParticle.DUST)
344+
"particle" -> effectBuilder.particle = it.read(0, XParticle.DUST)
345345
"type" -> effectBuilder.type = it.read(0, EffectType.ARC)
346346
"startangle" -> effectBuilder.startAngle = it.read(0, 0.0)
347347
"angle" -> effectBuilder.angle = it.read(0, 30.0)

src/main/kotlin/org/gitee/orryx/core/kether/actions/effect/EffectBuilder.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import org.gitee.orryx.api.adapters.IVector
44
import org.gitee.orryx.api.adapters.vector.AbstractVector
55
import org.gitee.orryx.core.kether.actions.effect.EffectType.ARC
66
import org.joml.Matrix3d
7-
import taboolib.common.platform.ProxyParticle
87
import taboolib.common.util.unsafeLazy
8+
import taboolib.library.xseries.XParticle
99

1010
class EffectBuilder {
1111

1212
var type: EffectType = ARC
13-
var particle: ProxyParticle = ProxyParticle.DUST
13+
var particle: XParticle = XParticle.DUST
1414
var period: Long = 1
1515
var step: Double = 0.2
1616
var count: Int = 1
@@ -40,15 +40,18 @@ class EffectBuilder {
4040
var range: Double = 1.0
4141

4242
//DustData
43-
var dustData: ProxyParticle.DustData? = null
43+
var dustData: ParticleData.DustData? = null
4444
//DustTransitionData
45-
var dustTransitionData: ProxyParticle.DustTransitionData? = null
45+
var dustTransitionData: ParticleData.DustTransitionData? = null
4646
//ItemData
47-
var itemData: ProxyParticle.ItemData? = null
47+
var itemData: ParticleData.ItemData? = null
4848
//BlockData
49-
var blockData: ProxyParticle.BlockData? = null
49+
var blockData: ParticleData.BlockData? = null
5050
//VibrationData
51-
var vibrationData: ProxyParticle.VibrationData? = null
51+
var vibrationData: ParticleData.VibrationData? = null
52+
53+
val data: ParticleData?
54+
get() = dustData ?: dustTransitionData ?: itemData ?: blockData ?: vibrationData
5255

5356
val locations by unsafeLazy { mutableListOf<Pair<Int, EffectOrigin>>() }
5457

src/main/kotlin/org/gitee/orryx/core/kether/actions/effect/EffectSpawner.kt

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,17 @@ import kotlinx.coroutines.CoroutineScope
44
import kotlinx.coroutines.async
55
import kotlinx.coroutines.awaitAll
66
import kotlinx.coroutines.launch
7+
import org.bukkit.*
78
import org.bukkit.entity.Player
9+
import org.bukkit.inventory.ItemStack
10+
import org.bukkit.material.MaterialData
811
import org.gitee.orryx.core.container.IContainer
912
import org.gitee.orryx.core.kether.actions.effect.EffectType.*
1013
import org.gitee.orryx.core.targets.ITargetEntity
1114
import org.gitee.orryx.core.targets.ITargetLocation
1215
import org.gitee.orryx.utils.*
1316
import org.joml.Matrix3d
1417
import org.joml.Vector3d
15-
import taboolib.common.platform.ProxyParticle
1618
import taboolib.common.platform.function.adaptPlayer
1719
import taboolib.common.util.Location
1820
import taboolib.common5.cdouble
@@ -22,6 +24,7 @@ import taboolib.module.effect.shape.NStar
2224
import taboolib.module.effect.shape.OctagonalStar
2325
import taboolib.module.effect.shape.Pyramid
2426
import taboolib.module.effect.shape.Ray.RayStopType
27+
import taboolib.platform.util.toBukkitLocation
2528
import java.util.concurrent.CompletableFuture
2629

2730
class EffectSpawner(val builder: EffectBuilder, val duration: Long = 1, val tick: Long = 1, val mode: SpawnerType = SpawnerType.PLAY, val origins: IContainer, val viewers: IContainer): ParticleSpawner {
@@ -55,7 +58,7 @@ class EffectSpawner(val builder: EffectBuilder, val duration: Long = 1, val tick
5558
override fun spawn(location: Location) {
5659
viewers.forEachInstance<ITargetEntity<Player>> { target ->
5760
adaptPlayer(target.getSource()).sendParticle(
58-
builder.particle,
61+
builder.particle.name,
5962
location,
6063
taboolib.common.util.Vector(builder.offset.x(), builder.offset.y(), builder.offset.z()),
6164
builder.count,
@@ -65,8 +68,62 @@ class EffectSpawner(val builder: EffectBuilder, val duration: Long = 1, val tick
6568
}
6669
}
6770

68-
private fun getParticleData(): ProxyParticle.Data? {
69-
return builder.dustData ?: builder.dustTransitionData ?: builder.itemData ?: builder.blockData ?: builder.vibrationData
71+
private fun getParticleData(): Any? {
72+
return when (val data = builder.data) {
73+
// 渐变红石
74+
is ParticleData.DustTransitionData -> {
75+
Particle.DustTransition(
76+
Color.fromRGB(data.color.red, data.color.green, data.color.blue),
77+
Color.fromRGB(data.toColor.red, data.toColor.blue, data.toColor.green),
78+
data.size
79+
)
80+
}
81+
// 红石
82+
is ParticleData.DustData -> {
83+
Particle.DustOptions(Color.fromRGB(data.color.red, data.color.green, data.color.blue), data.size)
84+
}
85+
// 物品
86+
is ParticleData.ItemData -> {
87+
val item = ItemStack(Material.valueOf(data.material))
88+
val itemMeta = item.itemMeta!!
89+
itemMeta.setDisplayName(data.name)
90+
itemMeta.lore = data.lore
91+
try {
92+
itemMeta.setCustomModelData(data.customModelData)
93+
} catch (ignored: NoSuchMethodError) {
94+
}
95+
item.itemMeta = itemMeta
96+
if (data.data != 0) {
97+
item.durability = data.data.toShort()
98+
}
99+
item
100+
}
101+
// 方块
102+
is ParticleData.BlockData -> {
103+
if (builder.particle.get()?.dataType == MaterialData::class.java) {
104+
MaterialData(Material.valueOf(data.material), data.data.toByte())
105+
} else {
106+
Material.valueOf(data.material).createBlockData()
107+
}
108+
}
109+
// 震动(不知道怎么翻译,来自 1.17+)
110+
is ParticleData.VibrationData -> {
111+
Vibration(
112+
data.origin.toBukkitLocation(), when (val destination = data.destination) {
113+
// 坐标
114+
is ParticleData.VibrationData.LocationDestination -> {
115+
Vibration.Destination.BlockDestination(destination.location.toBukkitLocation())
116+
}
117+
// 实体
118+
is ParticleData.VibrationData.EntityDestination -> {
119+
Vibration.Destination.EntityDestination(Bukkit.getEntity(destination.entity)!!)
120+
}
121+
},
122+
data.arrivalTime
123+
)
124+
}
125+
else -> null
126+
}
70127
}
71128

72129
fun build(origin: EffectOrigin): OrryxParticleObj {

src/main/kotlin/org/gitee/orryx/core/kether/actions/effect/OrryxParticleObj.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ class OrryxParticleObj(var effectOrigin: EffectOrigin, val obj: ParticleObj, val
3131
} else {
3232
obj.alwaysShowAsync()
3333
}
34-
submit(delay = 2) {
35-
createTask()
36-
}
34+
createTask()
3735
}
3836
}
3937

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.gitee.orryx.core.kether.actions.effect
2+
3+
import taboolib.common.util.Location
4+
import java.awt.Color
5+
import java.util.*
6+
7+
interface ParticleData {
8+
9+
open class DustData(val color: Color, val size: Float) : ParticleData
10+
11+
class DustTransitionData(color: Color, val toColor: Color, size: Float) : DustData(color, size)
12+
13+
class ItemData(
14+
val material: String,
15+
val data: Int = 0,
16+
val name: String = "",
17+
val lore: List<String> = emptyList(),
18+
val customModelData: Int = -1,
19+
) : ParticleData
20+
21+
class BlockData(val material: String, val data: Int = 0) : ParticleData
22+
23+
class VibrationData(val origin: Location, val destination: Destination, val arrivalTime: Int) : ParticleData {
24+
25+
sealed interface Destination
26+
27+
class EntityDestination(val entity: UUID) : Destination
28+
29+
class LocationDestination(val location: Location) : Destination
30+
}
31+
32+
}

src/main/kotlin/org/gitee/orryx/core/parser/StringParser.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@ import org.gitee.orryx.core.selector.ISelectorGeometry
66
import org.gitee.orryx.core.selector.ISelectorStream
77
import org.gitee.orryx.core.selector.SelectorInit
88
import org.gitee.orryx.utils.bukkitPlayer
9-
import taboolib.common.platform.ProxyParticle
109
import taboolib.common.platform.function.adaptPlayer
1110
import taboolib.common.platform.function.info
11+
import taboolib.common.util.Vector
1212
import taboolib.common.util.unsafeLazy
13+
import taboolib.library.xseries.XParticle
1314
import taboolib.module.kether.ScriptContext
1415

1516
class StringParser(val value: String) {
@@ -63,7 +64,7 @@ class StringParser(val value: String) {
6364
when(val selector = SelectorInit.getSelector(entry.head.uppercase())) {
6465
is ISelectorGeometry -> {
6566
selector.aFrameShowLocations(context, entry).forEach {
66-
ProxyParticle.DUST.sendTo(adaptPlayer(context.bukkitPlayer()), it)
67+
adaptPlayer(context.bukkitPlayer()).sendParticle(XParticle.DUST.name, it, Vector(), 1, 0.0, null)
6768
}
6869
}
6970
null -> {
Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package org.gitee.orryx.utils
22

3-
import org.bukkit.Material
43
import org.gitee.orryx.core.kether.actions.effect.EffectType
54
import org.gitee.orryx.core.parser.StringParser
6-
import taboolib.common.platform.ProxyParticle
75
import taboolib.common.platform.function.warning
86
import taboolib.common5.*
7+
import taboolib.library.xseries.XMaterial
8+
import taboolib.library.xseries.XParticle
99

1010
internal inline fun <reified T> StringParser.Entry.read(index: Int, def: T): T {
1111
val value = body.getOrNull(index) ?: return def
@@ -16,24 +16,28 @@ internal inline fun <reified T> StringParser.Entry.read(index: Int, def: T): T {
1616
Boolean::class -> value.cbool
1717
Double::class -> value.cdouble
1818
Float::class -> value.cfloat
19-
ProxyParticle::class -> try {
20-
ProxyParticle.valueOf(value.uppercase())
19+
20+
XParticle::class -> try {
21+
XParticle.of(value.uppercase())
2122
} catch (e: Exception) {
2223
warning("not found ProxyParticle")
23-
ProxyParticle.valueOf("DUST")
24+
XParticle.DUST
2425
}
26+
2527
EffectType::class -> try {
2628
EffectType.valueOf(value.uppercase())
2729
} catch (e: Exception) {
2830
warning("not found EffectType")
29-
EffectType.valueOf("ARC")
31+
EffectType.ARC
3032
}
31-
Material::class -> try {
32-
Material.valueOf(value.uppercase())
33+
34+
XMaterial::class -> try {
35+
XMaterial.matchXMaterial(value.uppercase())
3336
} catch (e: Exception) {
3437
warning("not found Material")
35-
Material.valueOf("STONE")
38+
XMaterial.STONE
3639
}
40+
3741
else -> value
3842
} as T
3943
}

0 commit comments

Comments
 (0)