Replace references to NEU with Firmament
This commit is contained in:
81
src/main/kotlin/moe/nea/firmament/commands/dsl.kt
Normal file
81
src/main/kotlin/moe/nea/firmament/commands/dsl.kt
Normal file
@@ -0,0 +1,81 @@
|
||||
package moe.nea.firmament.commands
|
||||
|
||||
import com.mojang.brigadier.arguments.ArgumentType
|
||||
import com.mojang.brigadier.builder.ArgumentBuilder
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder
|
||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder
|
||||
import com.mojang.brigadier.context.CommandContext
|
||||
import java.lang.reflect.ParameterizedType
|
||||
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
|
||||
import moe.nea.firmament.util.iterate
|
||||
|
||||
|
||||
typealias DefaultSource = FabricClientCommandSource
|
||||
|
||||
|
||||
inline val <T : CommandContext<*>> T.context get() = this
|
||||
operator fun <T : Any, C : CommandContext<*>> C.get(arg: TypeSafeArg<T>): T {
|
||||
return arg.get(this)
|
||||
}
|
||||
|
||||
fun literal(
|
||||
name: String,
|
||||
block: LiteralArgumentBuilder<DefaultSource>.() -> Unit
|
||||
): LiteralArgumentBuilder<DefaultSource> =
|
||||
LiteralArgumentBuilder.literal<DefaultSource>(name).also(block)
|
||||
|
||||
data class TypeSafeArg<T : Any>(val name: String, val argument: ArgumentType<T>) {
|
||||
val argClass by lazy {
|
||||
argument.javaClass
|
||||
.iterate<Class<in ArgumentType<T>>> {
|
||||
it.superclass
|
||||
}
|
||||
.map {
|
||||
it.genericSuperclass
|
||||
}
|
||||
.filterIsInstance<ParameterizedType>()
|
||||
.find { it.rawType == ArgumentType::class.java }!!
|
||||
.let { it.actualTypeArguments[0] as Class<*> }
|
||||
}
|
||||
|
||||
@JvmName("getWithThis")
|
||||
fun <S> CommandContext<S>.get(): T =
|
||||
get(this)
|
||||
|
||||
|
||||
fun <S> get(ctx: CommandContext<S>): T {
|
||||
return ctx.getArgument(name, argClass) as T
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun <T : Any> argument(
|
||||
name: String,
|
||||
argument: ArgumentType<T>,
|
||||
block: RequiredArgumentBuilder<DefaultSource, T>.(TypeSafeArg<T>) -> Unit
|
||||
): RequiredArgumentBuilder<DefaultSource, T> =
|
||||
RequiredArgumentBuilder.argument<DefaultSource, T>(name, argument).also { block(it, TypeSafeArg(name, argument)) }
|
||||
|
||||
fun <T : ArgumentBuilder<DefaultSource, T>, AT : Any> T.thenArgument(
|
||||
name: String,
|
||||
argument: ArgumentType<AT>,
|
||||
block: RequiredArgumentBuilder<DefaultSource, AT>.(TypeSafeArg<AT>) -> Unit
|
||||
): T = then(argument(name, argument, block))
|
||||
|
||||
|
||||
fun <T : ArgumentBuilder<DefaultSource, T>> T.thenLiteral(
|
||||
name: String,
|
||||
block: LiteralArgumentBuilder<DefaultSource>.() -> Unit
|
||||
): T =
|
||||
then(literal(name, block))
|
||||
|
||||
fun <T : ArgumentBuilder<DefaultSource, T>> T.then(node: ArgumentBuilder<DefaultSource, *>, block: T.() -> Unit): T =
|
||||
then(node).also(block)
|
||||
|
||||
fun <T : ArgumentBuilder<DefaultSource, T>> T.thenExecute(block: CommandContext<DefaultSource>.() -> Unit): T =
|
||||
executes {
|
||||
block(it)
|
||||
1
|
||||
}
|
||||
|
||||
|
||||
66
src/main/kotlin/moe/nea/firmament/commands/rome.kt
Normal file
66
src/main/kotlin/moe/nea/firmament/commands/rome.kt
Normal file
@@ -0,0 +1,66 @@
|
||||
package moe.nea.firmament.commands
|
||||
|
||||
import com.mojang.brigadier.CommandDispatcher
|
||||
import io.github.cottonmc.cotton.gui.client.CottonClientScreen
|
||||
import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource
|
||||
import net.minecraft.text.Text
|
||||
import moe.nea.firmament.features.world.FairySouls
|
||||
import moe.nea.firmament.gui.repoGui
|
||||
import moe.nea.firmament.repo.RepoManager
|
||||
import moe.nea.firmament.util.SBData
|
||||
import moe.nea.firmament.util.ScreenUtil.setScreenLater
|
||||
|
||||
|
||||
fun firmamentCommand() = literal("firmament") {
|
||||
thenLiteral("repo") {
|
||||
thenLiteral("reload") {
|
||||
thenLiteral("fetch") {
|
||||
thenExecute {
|
||||
source.sendFeedback(Text.translatable("firmament.repo.reload.network")) // TODO better reporting
|
||||
RepoManager.launchAsyncUpdate()
|
||||
}
|
||||
}
|
||||
thenExecute {
|
||||
source.sendFeedback(Text.translatable("firmament.repo.reload.disk"))
|
||||
RepoManager.reload()
|
||||
}
|
||||
}
|
||||
thenExecute {
|
||||
setScreenLater(CottonClientScreen(repoGui()))
|
||||
}
|
||||
}
|
||||
thenLiteral("dev") {
|
||||
thenLiteral("config") {
|
||||
thenExecute {
|
||||
FairySouls.TConfig.showConfigEditor()
|
||||
}
|
||||
}
|
||||
thenLiteral("sbdata") {
|
||||
thenExecute {
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.profile", SBData.profileCuteName))
|
||||
val locrawInfo = SBData.locraw
|
||||
if (locrawInfo == null) {
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.nolocraw"))
|
||||
} else {
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.server", locrawInfo.server))
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.gametype", locrawInfo.gametype))
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.mode", locrawInfo.mode))
|
||||
source.sendFeedback(Text.translatable("firmament.sbinfo.map", locrawInfo.map))
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun registerFirmamentCommand(dispatcher: CommandDispatcher<FabricClientCommandSource>) {
|
||||
val firmament = dispatcher.register(firmamentCommand())
|
||||
dispatcher.register(literal("firm") {
|
||||
redirect(firmament)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user