diff --git a/src/main/kotlin/com/steelextractor/SteelExtractor.kt b/src/main/kotlin/com/steelextractor/SteelExtractor.kt index 0bd4cde..400aa04 100644 --- a/src/main/kotlin/com/steelextractor/SteelExtractor.kt +++ b/src/main/kotlin/com/steelextractor/SteelExtractor.kt @@ -26,6 +26,7 @@ import net.minecraft.server.level.ServerLevel import net.minecraft.world.level.ChunkPos import net.minecraft.world.level.Level import net.minecraft.world.level.chunk.status.ChunkStatus +import com.steelextractor.extractors.EnchantmentsExtractor import com.steelextractor.extractors.PoiTypesExtractor import com.steelextractor.extractors.Potions import com.steelextractor.extractors.StructureStarts @@ -92,7 +93,8 @@ object SteelExtractor : ModInitializer { Tags(), StructureStarts(), Weathering(), - PoiTypesExtractor() + PoiTypesExtractor(), + EnchantmentsExtractor() ) diff --git a/src/main/kotlin/com/steelextractor/extractors/Enchantments.kt b/src/main/kotlin/com/steelextractor/extractors/Enchantments.kt new file mode 100644 index 0000000..c5a5c7b --- /dev/null +++ b/src/main/kotlin/com/steelextractor/extractors/Enchantments.kt @@ -0,0 +1,58 @@ +package com.steelextractor.extractors + +import com.google.gson.JsonArray +import com.google.gson.JsonElement +import com.google.gson.JsonObject +import com.steelextractor.SteelExtractor +import net.minecraft.core.registries.Registries +import net.minecraft.server.MinecraftServer + +class EnchantmentsExtractor : SteelExtractor.Extractor { + override fun fileName(): String { + return "enchantments.json" + } + + override fun extract(server: MinecraftServer): JsonElement { + val topLevelJson = JsonObject() + val enchantmentsJson = JsonArray() + + val enchantmentRegistry = server.registryAccess().lookupOrThrow(Registries.ENCHANTMENT) + + for (holder in enchantmentRegistry.listElements().toList()) { + val key = holder.key() + val enchantment = holder.value() + val name = key.identifier().getPath() + val id = enchantmentRegistry.getId(enchantment) + val def = enchantment.definition() + + val enchJson = JsonObject() + enchJson.addProperty("id", id) + enchJson.addProperty("name", name) + enchJson.addProperty("max_level", def.maxLevel()) + enchJson.addProperty("anvil_cost", def.anvilCost()) + enchJson.addProperty("weight", def.weight()) + + val minCost = JsonObject() + minCost.addProperty("base", def.minCost().base()) + minCost.addProperty("per_level_above_first", def.minCost().perLevelAboveFirst()) + enchJson.add("min_cost", minCost) + + val maxCost = JsonObject() + maxCost.addProperty("base", def.maxCost().base()) + maxCost.addProperty("per_level_above_first", def.maxCost().perLevelAboveFirst()) + enchJson.add("max_cost", maxCost) + + val slotsJson = JsonArray() + for (slot in def.slots()) { + slotsJson.add(slot.getSerializedName()) + } + enchJson.add("slots", slotsJson) + + enchantmentsJson.add(enchJson) + } + + topLevelJson.add("enchantments", enchantmentsJson) + + return topLevelJson + } +}