Skip to content

Commit

Permalink
fix(enum-argument): fix enum argument & convert 1.21.4 to spigot
Browse files Browse the repository at this point in the history
  • Loading branch information
StillLutto committed Jan 2, 2025
1 parent 589b2f3 commit 564ae7a
Show file tree
Hide file tree
Showing 44 changed files with 180 additions and 174 deletions.
2 changes: 1 addition & 1 deletion api/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
plugins {
`java-library`
kotlin("jvm") version "1.9.22"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("com.gradleup.shadow") version "8.3.5"
}

val versionVar = version
Expand Down
70 changes: 35 additions & 35 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ plugins {
java
kotlin("jvm") version "1.9.22"
`maven-publish`
id("com.github.johnrengelman.shadow") version "8.1.1"
id("com.gradleup.shadow") version "8.3.5"
id("io.papermc.paperweight.userdev") version "2.0.0-beta.8" apply false
}

apply(plugin = "maven-publish")
val projectGroupId = "com.undefined"
val projectVersion = "0.0.31"
val projectVersion = "0.0.37"
val projectArtifactId = "stellar"

group = projectGroupId
Expand All @@ -35,7 +35,7 @@ repositories {
publishing {
repositories {
maven {
name = "UndefinedCreation"
name = "UndefinedCreations"
url = uri("https://repo.undefinedcreation.com/releases")
credentials(PasswordCredentials::class) {
username = System.getenv("MAVEN_NAME")
Expand Down Expand Up @@ -79,38 +79,38 @@ allprojects {
dependencies {
implementation(project(":api"))
implementation(project(":common"))
implementation(project(":v1_13"))
implementation(project(":v1_13_1"))
implementation(project(":v1_13_2"))
implementation(project(":v1_14_1"))
implementation(project(":v1_14_2"))
implementation(project(":v1_14_3"))
implementation(project(":v1_14_4"))
implementation(project(":v1_15"))
implementation(project(":v1_15_1"))
implementation(project(":v1_15_2"))
implementation(project(":v1_16_1"))
implementation(project(":v1_16_2"))
implementation(project(":v1_16_3"))
implementation(project(":v1_16_4"))
implementation(project(":v1_16_5"))
implementation(project(":v1_17"))
implementation(project(":v1_17"))
implementation(project(":v1_17_1:", "reobf"))
implementation(project(":v1_18_1:", "reobf"))
implementation(project(":v1_18_2:", "reobf"))
implementation(project(":v1_19_2:", "reobf"))
implementation(project(":v1_19_3:", "reobf"))
implementation(project(":v1_19_4:", "reobf"))
implementation(project(":v1_20", "reobf"))
implementation(project(":v1_20_1", "reobf"))
implementation(project(":v1_20_2", "reobf"))
implementation(project(":v1_20_4", "reobf"))
implementation(project(":v1_20_6", "reobf"))
implementation(project(":v1_21", "reobf"))
implementation(project(":v1_21_1", "reobf"))
implementation(project(":v1_21_3", "reobf"))
implementation(project(":v1_21_4", "reobf"))
// implementation(project(":v1_13"))
// implementation(project(":v1_13_1"))
// implementation(project(":v1_13_2"))
// implementation(project(":v1_14_1"))
// implementation(project(":v1_14_2"))
// implementation(project(":v1_14_3"))
// implementation(project(":v1_14_4"))
// implementation(project(":v1_15"))
// implementation(project(":v1_15_1"))
// implementation(project(":v1_15_2"))
// implementation(project(":v1_16_1"))
// implementation(project(":v1_16_2"))
// implementation(project(":v1_16_3"))
// implementation(project(":v1_16_4"))
// implementation(project(":v1_16_5"))
// implementation(project(":v1_17"))
// implementation(project(":v1_17"))
// implementation(project(":v1_17_1:", "reobf"))
// implementation(project(":v1_18_1:", "reobf"))
// implementation(project(":v1_18_2:", "reobf"))
// implementation(project(":v1_19_2:", "reobf"))
// implementation(project(":v1_19_3:", "reobf"))
// implementation(project(":v1_19_4:", "reobf"))
// implementation(project(":v1_20", "reobf"))
// implementation(project(":v1_20_1", "reobf"))
// implementation(project(":v1_20_2", "reobf"))
// implementation(project(":v1_20_4", "reobf"))
// implementation(project(":v1_20_6", "reobf"))
// implementation(project(":v1_21", "reobf"))
// implementation(project(":v1_21_1", "reobf"))
// implementation(project(":v1_21_3", "reobf"))
// implementation(project(":v1_21_4", "reobf"))
}

tasks {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,64 +95,55 @@ open class ArgumentHandler {
list: List<T>,
stringifier: (T) -> Suggestion,
parse: (Any?) -> T
): ListArgument<T> = addArgument { ListArgument(base, StringArgument(base, name, StringType.WORD), list, stringifier, parse) }
): ListArgument<T> = addArgument { ListArgument(StringArgument(base, name, StringType.WORD), list, stringifier, parse) }

fun <T> addListArgument(
type: AbstractStellarArgument<*>,
list: List<T>,
stringifier: (T) -> Suggestion,
parse: (Any?) -> T
): ListArgument<T> = addArgument { ListArgument(base, type, list, stringifier, parse) }
): ListArgument<T> = addArgument { ListArgument(type, list, stringifier, parse) }

fun <T> addListArgument(
name: String,
list: CommandContext<CommandSender>.() -> List<T>,
stringifier: (T) -> Suggestion,
parse: (Any?) -> T
): ListArgument<T> = addArgument { ListArgument(base, StringArgument(base, name, StringType.WORD), list, stringifier, parse) }
): ListArgument<T> = addArgument { ListArgument(StringArgument(base, name, StringType.WORD), list, stringifier, parse) }

fun <T> addListArgument(
type: AbstractStellarArgument<*>,
list: CommandContext<CommandSender>.() -> List<T>,
stringifier: (T) -> Suggestion,
parse: (Any?) -> T
): ListArgument<T> = addArgument { ListArgument(base, type, list, stringifier, parse) }
): ListArgument<T> = addArgument { ListArgument(type, list, stringifier, parse) }

fun addStringListArgument(name: String, list: List<String>, type: StringType = StringType.WORD): ListArgument<String> =
addArgument { ListArgument(base, StringArgument(base, name, type), list, { Suggestion.withText(it.toString()) }, { it }) }
addArgument { ListArgument(StringArgument(base, name, type), list, { Suggestion.withText(it.toString()) }, { it }) }

fun addStringListArgument(name: String, vararg list: String): ListArgument<String> =
addArgument { ListArgument(base, StringArgument(base, name, StringType.WORD), list.toList(), { Suggestion.withText(it.toString()) }, { it }) }
addArgument { ListArgument(StringArgument(base, name, StringType.WORD), list.toList(), { Suggestion.withText(it.toString()) }, { it }) }

fun addUUIDListArgument(name: String, list: List<UUID>): ListArgument<UUID> =
addArgument { ListArgument(base, UUIDArgument(base, name), list, parse = { UUID.fromString(it.toString()) }) }
addArgument { ListArgument(UUIDArgument(base, name), list, parse = { it }) }

fun addStringListArgument(name: String, list: CommandContext<CommandSender>.() -> List<String>, type: StringType = StringType.WORD): ListArgument<String> =
addArgument { ListArgument(base, StringArgument(base, name, type), list, { Suggestion.withText(it.toString()) }, { it }) }
addArgument { ListArgument(StringArgument(base, name, type), list, { Suggestion.withText(it.toString()) }, { it }) }

fun addStringListArgument(name: String, vararg list: CommandContext<CommandSender>.() -> List<String>): ListArgument<String> =
addArgument { ListArgument(base, StringArgument(base, name, StringType.WORD), list.toList(), { Suggestion.withText(it.toString()) }, { it }) }
addArgument { ListArgument(StringArgument(base, name, StringType.WORD), list.toList(), { Suggestion.withText(it.toString()) }, { it }) }

fun addUUIDListArgument(name: String, list: CommandContext<CommandSender>.() -> List<UUID>): ListArgument<UUID> =
addArgument { ListArgument(base, UUIDArgument(base, name), list, parse = { UUID.fromString(it.toString()) }) }
addArgument { ListArgument(UUIDArgument(base, name), list, parse = { it }) }

inline fun <reified T : Enum<T>> addEnumArgument(name: String): EnumArgument<T> =
addArgument { EnumArgument<T>(base, StringArgument(base, name, StringType.WORD), T::class) }
addArgument { EnumArgument<T>(base, name, T::class) }

inline fun <reified T : Enum<T>> addEnumArgument(
name: String,
noinline converter: (Enum<*>?) -> Suggestion = { Suggestion.withText(it?.name ?: "") },
noinline parse: (Any?) -> Enum<T>?
): EnumArgument<T> = addArgument { EnumArgument(base, StringArgument(base, name, StringType.WORD), T::class, converter, parse) }

inline fun <reified T : Enum<T>> addEnumArgument(type: AbstractStellarArgument<*>): EnumArgument<T> =
addArgument { EnumArgument<T>(base, type, T::class) }

inline fun <reified T : Enum<T>> addEnumArgument(
type: AbstractStellarArgument<*>,
noinline converter: (Enum<*>?) -> Suggestion = { Suggestion.withText(it?.name ?: "") },
noinline parse: (Any?) -> Enum<T>?
): EnumArgument<T> = addArgument { EnumArgument(base, type, T::class, converter, parse) }
): EnumArgument<T> = addArgument { EnumArgument(base, name, T::class, converter, parse) }

fun addEntityArgument(name: String, type: EntityDisplayType): EntityArgument =
addArgument { EntityArgument(base, name, type) }
Expand Down Expand Up @@ -259,7 +250,6 @@ open class ArgumentHandler {
fun addOnlinePlayersArgument(name: String): ListArgument<Player> =
addArgument {
ListArgument(
base,
StringArgument(base, name, StringType.WORD),
{ Bukkit.getOnlinePlayers().toList() },
{ Suggestion.withText(it.name) },
Expand All @@ -270,7 +260,6 @@ open class ArgumentHandler {
fun addOfflinePlayersArgument(name: String): ListArgument<OfflinePlayer> =
addArgument {
ListArgument(
base,
StringArgument(base, name, StringType.WORD),
{ Bukkit.getOfflinePlayers().toList() },
{ Suggestion.withText(it.name!!) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,26 @@ package com.undefined.stellar.argument.types.custom

import com.undefined.stellar.AbstractStellarCommand
import com.undefined.stellar.argument.AbstractStellarArgument
import com.undefined.stellar.argument.types.primitive.StringArgument
import com.undefined.stellar.argument.types.primitive.StringType
import com.undefined.stellar.data.suggestion.Suggestion
import java.lang.Enum.valueOf
import kotlin.reflect.KClass

@Suppress("UNCHECKED_CAST")
class EnumArgument<T : Enum<T>>(
parent: AbstractStellarCommand<*>,
type: AbstractStellarArgument<*>,
name: String,
val enum: KClass<out Enum<*>>,
converter: (Enum<*>?) -> Suggestion = { Suggestion.withText(it?.name ?: "") },
parse: (Any?) -> Enum<T>? = {
try {
valueOf(enum.java, type.name) as Enum<T>
valueOf(enum.java, it as String) as Enum<T>
} catch (e: IllegalArgumentException) {
null
}
}
) : ListArgument<Enum<*>?>(parent, type, enum.java.enumConstants.toList(), converter, parse) {
) : ListArgument<Enum<*>?>(StringArgument(parent, name, StringType.WORD), enum.java.enumConstants.toList(), converter, parse) {

fun valueOf(name: String): Enum<T>? =
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,16 @@ import com.undefined.stellar.data.suggestion.Suggestion
import org.bukkit.command.CommandSender

open class ListArgument<T>(
parent: AbstractStellarCommand<*>,
val type: AbstractStellarArgument<*>,
val list: CommandContext<CommandSender>.() -> List<T>,
val converter: (T) -> Suggestion = { Suggestion.withText(it.toString()) },
val parse: (Any?) -> T?
) : AbstractStellarArgument<ListArgument<T>>(parent, type.name) {
) : AbstractStellarArgument<ListArgument<T>>(type.parent, type.name) {

constructor(parent: AbstractStellarCommand<*>,
type: AbstractStellarArgument<*>,
constructor(type: AbstractStellarArgument<*>,
list: List<T>,
converter: (T) -> Suggestion = { Suggestion.withText(it.toString()) },
parse: (Any?) -> T?) : this(parent, type, { list }, converter, parse)
parse: (Any?) -> T?) : this(type, { list }, converter, parse)

override val suggestions: MutableList<StellarSuggestion<*>>
get() = (super.suggestions + StellarSuggestion(CommandSender::class) { getSuggestionList(this) }).toMutableList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,8 @@ typealias CommandNode = HashMap<String, (CommandContext<CommandSender>) -> Any?>
class CommandContext<T : CommandSender>(val arguments: CommandNode, val sender: T, val input: String) {

inline fun <reified T> getArgument(name: String): T {
println("name: $name")
println("arguments: ${arguments.map { it.key }}")
val argument = arguments[name] ?: throw NoSuchElementException("No argument with the name $name")
val context = this as CommandContext<CommandSender>
println("argument output: ${argument(context)}")
println("context input: ${context.input}")
println("argument class: ${argument(context)?.let { it::class.simpleName } ?: "null"}")
return argument(context) as? T
?: throw ArgumentCastMismatchException("Argument of name '$name' cannot be cast into ${T::class.simpleName}! Check if the argument you are getting returns this class.")
}
Expand Down
16 changes: 8 additions & 8 deletions server/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
plugins {
kotlin("jvm") version "1.9.22"
id("xyz.jpenilla.run-paper") version "2.3.0"
id("com.github.johnrengelman.shadow") version "8.1.1"
id("com.gradleup.shadow") version "8.3.5"
}

val versionVar = version
val groupIdVar = "com.undefined"
val artifactIdVar = "stellar"

dependencies {
compileOnly("org.spigotmc:spigot-api:1.13-R0.1-SNAPSHOT")
compileOnly("org.spigotmc:spigot-api:1.20.6-R0.1-SNAPSHOT")

implementation(project(":api"))
implementation(project(":common"))
Expand Down Expand Up @@ -43,8 +43,8 @@ dependencies {
implementation(project(":v1_21:", "reobf"))
implementation(project(":v1_21_1:", "reobf"))
implementation(project(":v1_21_3:", "reobf"))
implementation(project(":v1_21_4:", "reobf"))
compileOnly(project(":v1_13"))
implementation(project(":v1_21_4:"))
compileOnly(project(":v1_20_6"))
}

tasks {
Expand All @@ -57,15 +57,15 @@ tasks {
}

compileKotlin {
kotlinOptions.jvmTarget = "1.8"
kotlinOptions.jvmTarget = "21"
}

compileJava {
options.release = 8
options.release = 21
}

runServer {
minecraftVersion("1.13")
minecraftVersion("1.20.6")
jvmArgs("-Xmx4G")
}
}
Expand All @@ -75,5 +75,5 @@ java {
}

kotlin {
jvmToolchain(8)
jvmToolchain(21)
}
15 changes: 5 additions & 10 deletions server/src/main/kotlin/com/undefined/stellar/Main.kt
Original file line number Diff line number Diff line change
@@ -1,22 +1,17 @@
package com.undefined.stellar

import com.undefined.stellar.data.argument.ParticleData
import org.bukkit.World.Environment
import org.bukkit.entity.Player
import org.bukkit.plugin.java.JavaPlugin

class Main : JavaPlugin() {

override fun onEnable() {
StellarCommand("spawn-particle")
.addParticleArgument("particle")
StellarCommand("test")
.addEnumArgument<Environment>("env")
.addExecution<Player> {
println("getting data...")
val data = getArgument<ParticleData<*>>("particle")
println("data gotten: ${data.particle.name} and ${data.options?.let { data.options } ?: "null"}")
sender.spawnParticle(data.particle, sender.eyeLocation, 10, 1.0, 1.0, 1.0, data.options)
println("spawned particle")
val env = getArgument<Environment>("env")
sender.sendMessage(env.name)
}
.register(this)
}

}
8 changes: 8 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
pluginManagement {
repositories {
mavenCentral()
mavenLocal()
gradlePluginPortal()
}
}

rootProject.name = "stellar"
include(
"server",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ object ArgumentHelper {
is CustomArgument<*> -> argument.parse(CommandContextAdapter.getStellarCommandContext(context))
is StringArgument -> StringArgumentType.getString(context, argument.name)
is IntegerArgument -> IntegerArgumentType.getInteger(context, argument.name)
is LongArgument -> throwArgumentVersionException(argument)
is FloatArgument -> FloatArgumentType.getFloat(context, argument.name)
is DoubleArgument -> DoubleArgumentType.getDouble(context, argument.name)
is BooleanArgument -> BoolArgumentType.getBool(context, argument.name)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,10 @@ import org.bukkit.command.CommandSender
object CommandContextAdapter {

fun getStellarCommandContext(context: CommandContext<CommandListenerWrapper>): com.undefined.stellar.data.argument.CommandContext<CommandSender> {
println("getting stellar context...")
val input = context.input.removePrefix("/")
println("input: $input")
val baseCommand: AbstractStellarCommand<*> = StellarCommands.getStellarCommand(context.nodes.entries.first().key.name)!!
println("base command: ${baseCommand.name}")
val arguments = BrigadierCommandHelper.getArguments(baseCommand, context)
println("arguments: ${arguments.joinToString(", ") { it.name }}")
if (arguments.filter { it !is LiteralStellarArgument }.groupingBy { it.name }.eachCount().any { it.value > 1 }) throw DuplicateArgumentNameException()
println("No duplicates found!")
val parsedArguments: CommandNode =
arguments
.associate<AbstractStellarArgument<*>, String, (com.undefined.stellar.data.argument.CommandContext<CommandSender>) -> Any?> { argument ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,6 +177,7 @@ object ArgumentHelper {
is CustomArgument<*> -> argument.parse(CommandContextAdapter.getStellarCommandContext(context))
is StringArgument -> StringArgumentType.getString(context, argument.name)
is IntegerArgument -> IntegerArgumentType.getInteger(context, argument.name)
is LongArgument -> throwArgumentVersionException(argument)
is FloatArgument -> FloatArgumentType.getFloat(context, argument.name)
is DoubleArgument -> DoubleArgumentType.getDouble(context, argument.name)
is BooleanArgument -> BoolArgumentType.getBool(context, argument.name)
Expand Down
Loading

0 comments on commit 564ae7a

Please sign in to comment.