if it works then im not touching it anymore
This commit is contained in:
@@ -86,9 +86,8 @@ class Bde_particles : ModInitializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CommandRegistrationCallback.EVENT.register { dispatcher, registryAccess, _ ->
|
CommandRegistrationCallback.EVENT.register { dispatcher, registryAccess, _ ->
|
||||||
val registryClone = registryAccess
|
GiveEmitterTool.register(dispatcher, registryAccess)
|
||||||
GiveEmitterTool.register(dispatcher, registryClone)
|
ManageEmitters .register(dispatcher, registryAccess)
|
||||||
ManageEmitters .register(dispatcher, registryClone)
|
|
||||||
KillAllEmitters.register(dispatcher)
|
KillAllEmitters.register(dispatcher)
|
||||||
SpawnEmitter .register(dispatcher)
|
SpawnEmitter .register(dispatcher)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
@file:Suppress("UNCHECKED_CAST")
|
||||||
|
|
||||||
package com.bytedice.bde_particles.commands
|
package com.bytedice.bde_particles.commands
|
||||||
|
|
||||||
import com.bytedice.bde_particles.curveListArg
|
import com.bytedice.bde_particles.curveListArg
|
||||||
@@ -10,7 +12,6 @@ import com.mojang.brigadier.arguments.BoolArgumentType
|
|||||||
import com.mojang.brigadier.arguments.FloatArgumentType
|
import com.mojang.brigadier.arguments.FloatArgumentType
|
||||||
import com.mojang.brigadier.arguments.IntegerArgumentType
|
import com.mojang.brigadier.arguments.IntegerArgumentType
|
||||||
import com.mojang.brigadier.arguments.StringArgumentType
|
import com.mojang.brigadier.arguments.StringArgumentType
|
||||||
import com.mojang.brigadier.builder.ArgumentBuilder
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder
|
||||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder
|
||||||
import com.mojang.brigadier.context.CommandContext
|
import com.mojang.brigadier.context.CommandContext
|
||||||
@@ -25,32 +26,26 @@ import kotlin.reflect.*
|
|||||||
import kotlin.reflect.full.memberProperties
|
import kotlin.reflect.full.memberProperties
|
||||||
|
|
||||||
|
|
||||||
typealias CommandArgumentBuilder = KFunction<ArgumentBuilder<ServerCommandSource, *>>
|
typealias CommandArgumentBuilder = (
|
||||||
|
access: KProperty1<EmitterParams, *>,
|
||||||
|
config: LiteralArgumentBuilder<ServerCommandSource>,
|
||||||
|
reg: CommandRegistryAccess
|
||||||
|
) -> LiteralArgumentBuilder<ServerCommandSource>?
|
||||||
|
|
||||||
|
|
||||||
// TODO: doesn't apply shape & duration. Error applying shape other than circle
|
|
||||||
|
|
||||||
fun listConfigArgs(configArgs: Array<String>,
|
fun listConfigArgs(configArgs: Array<String>,
|
||||||
rootArg: RequiredArgumentBuilder<ServerCommandSource, *>,
|
rootArg: RequiredArgumentBuilder<ServerCommandSource, *>,
|
||||||
registryAccess: CommandRegistryAccess
|
registryAccess: CommandRegistryAccess
|
||||||
) : RequiredArgumentBuilder<ServerCommandSource, *>
|
): RequiredArgumentBuilder<ServerCommandSource, *>
|
||||||
{
|
{
|
||||||
configArgs.forEach { arg ->
|
configArgs.forEach { arg ->
|
||||||
var configArg = CommandManager.literal(arg)
|
var configArg = CommandManager.literal(arg)
|
||||||
|
|
||||||
val argAccess = parseArgNameToAccess(arg)!!
|
val argAccess = parseArgNameToAccess(arg)!!
|
||||||
val func = parseArgTypeToFunc(argAccess.returnType)
|
val func = parseArgTypeToFunc(argAccess.returnType, configArg)
|
||||||
|
|
||||||
if (func != null) {
|
if (func != null) {
|
||||||
if (func.parameters.lastIndex == 0) {
|
configArg = func(argAccess, configArg, registryAccess)
|
||||||
configArg.then(func.call(argAccess))
|
|
||||||
}
|
|
||||||
else if (func.parameters.lastIndex == 1) {
|
|
||||||
configArg = func.call(argAccess, configArg) as LiteralArgumentBuilder<ServerCommandSource>?
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
configArg = func.call(argAccess, configArg, registryAccess) as LiteralArgumentBuilder<ServerCommandSource>?
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rootArg.then(configArg)
|
rootArg.then(configArg)
|
||||||
@@ -60,6 +55,7 @@ fun listConfigArgs(configArgs: Array<String>,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
fun dataClassToArray(dataClass: KClass<*>): Array<String> {
|
fun dataClassToArray(dataClass: KClass<*>): Array<String> {
|
||||||
return dataClass.memberProperties.map { it.name }.toTypedArray()
|
return dataClass.memberProperties.map { it.name }.toTypedArray()
|
||||||
}
|
}
|
||||||
@@ -72,22 +68,48 @@ fun parseArgNameToAccess(name: String) : KProperty1<EmitterParams, *>? {
|
|||||||
return access
|
return access
|
||||||
}
|
}
|
||||||
|
|
||||||
fun parseArgTypeToFunc(type: KType) : CommandArgumentBuilder? {
|
fun parseArgTypeToFunc(type: KType, configArg: LiteralArgumentBuilder<ServerCommandSource>): CommandArgumentBuilder? {
|
||||||
return when (type.classifier) {
|
return when (type.classifier) {
|
||||||
Int::class -> ::intArg
|
Int::class -> { access, _, _ ->
|
||||||
Float::class -> ::floatArg
|
configArg.then(intArg(access as KProperty1<EmitterParams, Int>))
|
||||||
String::class -> ::stringArg
|
}
|
||||||
ParamClasses.Duration::class -> ::durArg
|
Float::class -> { access, _, _ ->
|
||||||
Vector3f::class -> ::vec3fArg
|
configArg.then(floatArg(access as KProperty1<EmitterParams, Float>))
|
||||||
ParamClasses.PairInt::class -> ::pairIntArg
|
}
|
||||||
SpawningShape::class -> ::shapeArg
|
String::class -> { access, _, _ ->
|
||||||
ParamClasses.PairVec3f::class -> ::pairVec3fArg
|
configArg.then(stringArg(access as KProperty1<EmitterParams, String>))
|
||||||
ParamClasses.PairFloat::class -> ::pairFloatArg
|
}
|
||||||
ParamClasses.TransformWithVel::class -> ::transformWithVelArg
|
ParamClasses.Duration::class -> { access, config, _ ->
|
||||||
ParamClasses.StringCurve::class -> ::stringCurveArg
|
durArg(access as KProperty1<EmitterParams, ParamClasses.Duration>, config)
|
||||||
ParamClasses.LerpVal::class -> ::lerpValArg
|
}
|
||||||
ParamClasses.ForceFieldArray::class -> ::forceFieldArg
|
Vector3f::class -> { access, _, _ ->
|
||||||
else -> null
|
configArg.then(vec3fArg(access as KProperty1<EmitterParams, Vector3f>))
|
||||||
|
}
|
||||||
|
ParamClasses.PairInt::class -> { access, _, _ ->
|
||||||
|
configArg.then(pairIntArg(access as KProperty1<EmitterParams, ParamClasses.PairInt>))
|
||||||
|
}
|
||||||
|
SpawningShape::class -> { access, config, _ ->
|
||||||
|
shapeArg(access as KProperty1<EmitterParams, SpawningShape>, config)
|
||||||
|
}
|
||||||
|
ParamClasses.PairVec3f::class -> { access, config, _ ->
|
||||||
|
pairVec3fArg(access as KProperty1<EmitterParams, ParamClasses.PairVec3f>, config)
|
||||||
|
}
|
||||||
|
ParamClasses.PairFloat::class -> { access, _, _ ->
|
||||||
|
configArg.then(pairFloatArg(access as KProperty1<EmitterParams, ParamClasses.PairFloat>))
|
||||||
|
}
|
||||||
|
ParamClasses.TransformWithVel::class -> { access, config, _ ->
|
||||||
|
transformWithVelArg(access as KProperty1<EmitterParams, ParamClasses.TransformWithVel>, config)
|
||||||
|
}
|
||||||
|
ParamClasses.StringCurve::class -> { access, config, reg ->
|
||||||
|
stringCurveArg(access as KProperty1<EmitterParams, ParamClasses.StringCurve>, config, reg)
|
||||||
|
}
|
||||||
|
ParamClasses.LerpVal::class -> { access, config, _ ->
|
||||||
|
lerpValArg(access as KProperty1<EmitterParams, ParamClasses.LerpVal>, config)
|
||||||
|
}
|
||||||
|
ParamClasses.ForceFieldArray::class -> { access, config, _ ->
|
||||||
|
forceFieldArg(access as KProperty1<EmitterParams, ParamClasses.ForceFieldArray>, config)
|
||||||
|
}
|
||||||
|
else -> null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,7 +386,7 @@ fun pairVec3fArg(access: KProperty1<EmitterParams,ParamClasses.PairVec3f>,
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun pairFloatArg(access: KProperty1<EmitterParams, ParamClasses.PairInt>) : RequiredArgumentBuilder<ServerCommandSource, Float> {
|
fun pairFloatArg(access: KProperty1<EmitterParams, ParamClasses.PairFloat>) : RequiredArgumentBuilder<ServerCommandSource, Float> {
|
||||||
return CommandManager.argument("Min Float", FloatArgumentType.floatArg())
|
return CommandManager.argument("Min Float", FloatArgumentType.floatArg())
|
||||||
.then(CommandManager.argument("Max Float", FloatArgumentType.floatArg())
|
.then(CommandManager.argument("Max Float", FloatArgumentType.floatArg())
|
||||||
.executes { context ->
|
.executes { context ->
|
||||||
@@ -419,12 +441,12 @@ fun transformWithVelArg(access: KProperty1<EmitterParams, ParamClasses.Transform
|
|||||||
|
|
||||||
fun stringCurveArg(access: KProperty1<EmitterParams, ParamClasses.StringCurve>,
|
fun stringCurveArg(access: KProperty1<EmitterParams, ParamClasses.StringCurve>,
|
||||||
configArg: LiteralArgumentBuilder<ServerCommandSource>,
|
configArg: LiteralArgumentBuilder<ServerCommandSource>,
|
||||||
//registryAccess: CommandRegistryAccess
|
registryAccess: CommandRegistryAccess
|
||||||
) : LiteralArgumentBuilder<ServerCommandSource>
|
) : LiteralArgumentBuilder<ServerCommandSource>
|
||||||
{
|
{
|
||||||
return configArg
|
return configArg
|
||||||
.then(CommandManager.literal("Add")
|
.then(CommandManager.literal("Add")
|
||||||
.then(CommandManager.argument("Item", FloatArgumentType.floatArg())//ItemStackArgumentType.itemStack(registryAccess))
|
.then(CommandManager.argument("Item", ItemStackArgumentType.itemStack(registryAccess))
|
||||||
.then(CommandManager.argument("Index", IntegerArgumentType.integer())
|
.then(CommandManager.argument("Index", IntegerArgumentType.integer())
|
||||||
.executes { context ->
|
.executes { context ->
|
||||||
val index = IntegerArgumentType.getInteger(context, "Index")
|
val index = IntegerArgumentType.getInteger(context, "Index")
|
||||||
@@ -528,7 +550,7 @@ fun stringCurveRemoveArg(context: CommandContext<ServerCommandSource>,
|
|||||||
successText(access, "--$item", id, context)
|
successText(access, "--$item", id, context)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun lerpValArg(access: KProperty1<EmitterParams,ParamClasses.PairVec3f>,
|
fun lerpValArg(access: KProperty1<EmitterParams,ParamClasses.LerpVal>,
|
||||||
configArg: LiteralArgumentBuilder<ServerCommandSource>
|
configArg: LiteralArgumentBuilder<ServerCommandSource>
|
||||||
) : LiteralArgumentBuilder<ServerCommandSource>
|
) : LiteralArgumentBuilder<ServerCommandSource>
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user