diff --git a/src/main/kotlin/com/steelextractor/SteelExtractor.kt b/src/main/kotlin/com/steelextractor/SteelExtractor.kt index 8c6e07f..77fe94e 100644 --- a/src/main/kotlin/com/steelextractor/SteelExtractor.kt +++ b/src/main/kotlin/com/steelextractor/SteelExtractor.kt @@ -29,6 +29,7 @@ import com.steelextractor.extractors.VillagerTypeRegistryExtractor import com.steelextractor.extractors.CandleCakes import com.steelextractor.extractors.ChunkStageHashes import com.steelextractor.extractors.CustomStatRegistryExtractor +import com.steelextractor.extractors.Commands import com.steelextractor.extractors.GameEvents import com.steelextractor.extractors.Weathering import com.steelextractor.extractors.Strippables @@ -216,6 +217,7 @@ object SteelExtractor : ModInitializer { addUnlessDisabled("BLOCKS") { Blocks() } addUnlessDisabled("BLOCK_ENTITIES") { BlockEntities() } + addUnlessDisabled("COMMANDS") { Commands() } addUnlessDisabled("DATA_COMPONENTS") { DataComponents() } addUnlessDisabled("ITEMS") { Items() } addUnlessDisabled("PARTICLE_TYPES") { ParticleTypeRegistryExtractor() } diff --git a/src/main/kotlin/com/steelextractor/extractors/Commands.kt b/src/main/kotlin/com/steelextractor/extractors/Commands.kt new file mode 100644 index 0000000..5039c46 --- /dev/null +++ b/src/main/kotlin/com/steelextractor/extractors/Commands.kt @@ -0,0 +1,32 @@ +package com.steelextractor.extractors + +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonObject +import com.mojang.brigadier.tree.LiteralCommandNode +import com.steelextractor.SteelExtractor +import net.minecraft.server.MinecraftServer + +class Commands : SteelExtractor.Extractor { + override fun fileName(): String { + // This should be placed in the Steel-Docs repository. + return "commands.json" + } + + override fun extract(server: MinecraftServer): JsonElement { + val commands = JsonArray() + + for (node in server.commands.dispatcher.root.children) { + if (node !is LiteralCommandNode) continue + val element = JsonObject() + element.addProperty("name", "/" + node.name) + val redirect = (node.redirect as? LiteralCommandNode)?.literal + element.addProperty("class", "/" + (redirect ?: node.literal)) + commands.add(element) + } + + val output = JsonObject() + output.add("commands", commands) + return output + } +}