From efa3c3b2392ece63bc74487dc911f79fc2c0c3cd Mon Sep 17 00:00:00 2001 From: Kenny Date: Tue, 11 Aug 2026 23:19:01 +0000 Subject: [PATCH] Encode class int providers with Vanilla codec --- src/main/kotlin/com/steelextractor/extractors/Classes.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/com/steelextractor/extractors/Classes.kt b/src/main/kotlin/com/steelextractor/extractors/Classes.kt index 82659ed..7e5c249 100644 --- a/src/main/kotlin/com/steelextractor/extractors/Classes.kt +++ b/src/main/kotlin/com/steelextractor/extractors/Classes.kt @@ -3,12 +3,15 @@ package com.steelextractor.extractors import com.google.gson.JsonArray import com.google.gson.JsonElement import com.google.gson.JsonObject +import com.mojang.serialization.JsonOps import com.steelextractor.SteelExtractor import net.minecraft.core.registries.BuiltInRegistries import net.minecraft.resources.ResourceKey import net.minecraft.server.MinecraftServer import net.minecraft.sounds.SoundEvent import net.minecraft.tags.TagKey +import net.minecraft.util.valueproviders.IntProvider +import net.minecraft.util.valueproviders.IntProviders import net.minecraft.world.entity.Entity import net.minecraft.world.entity.EntitySpawnReason import net.minecraft.world.entity.EntityType @@ -35,13 +38,17 @@ class Classes : SteelExtractor.Extractor { } /// Serialize a field value into the JSON object based on its type. - /// Primitives, enums, and registry entries are serialized directly. + /// Primitives, value providers, enums, and registry entries are serialized directly. /// Unknown object types are recursed into (one level deep) to extract their fields. private fun trySerialize(value: Any, key: String, json: JsonObject, depth: Int) { when (value) { is Boolean -> json.addProperty(key, value) is Number -> json.addProperty(key, value) is String -> json.addProperty(key, value) + is IntProvider -> json.add( + key, + IntProviders.CODEC.encodeStart(JsonOps.INSTANCE, value).getOrThrow() + ) is Enum<*> -> json.addProperty(key, value.name.lowercase()) is Fluid -> BuiltInRegistries.FLUID.getKey(value)?.path?.let { json.addProperty(key, it) } is SoundEvent -> BuiltInRegistries.SOUND_EVENT.getKey(value)?.path?.let { json.addProperty(key, it) }