diff options
author | Linnea Gräf <nea@nea.moe> | 2025-04-09 18:34:25 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-05-05 00:17:08 +0200 |
commit | 76f86b5407981050042536ea9214907b53a9be90 (patch) | |
tree | 07b7e97084a1d45ffe438935e89195064f0677b5 | |
parent | 72044baeff7da702a66b99afa084f3fe9ab7bbc2 (diff) | |
download | Firmament-76f86b5407981050042536ea9214907b53a9be90.tar.gz Firmament-76f86b5407981050042536ea9214907b53a9be90.tar.bz2 Firmament-76f86b5407981050042536ea9214907b53a9be90.zip |
fix: resolving of custom block textures
3 files changed, 44 insertions, 2 deletions
diff --git a/src/test/kotlin/testutil/ItemResources.kt b/src/test/kotlin/testutil/ItemResources.kt index 107b565..1269269 100644 --- a/src/test/kotlin/testutil/ItemResources.kt +++ b/src/test/kotlin/testutil/ItemResources.kt @@ -24,7 +24,7 @@ object ItemResources { } fun loadSNbt(path: String): NbtCompound { - return StringNbtReader.parse(loadString(path)) + return StringNbtReader.readCompound(loadString(path)) } fun getNbtOps(): RegistryOps<NbtElement> = MC.currentOrDefaultRegistries.getOps(NbtOps.INSTANCE) diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt index f6407fd..79d1e46 100644 --- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt +++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt @@ -23,6 +23,7 @@ import net.minecraft.block.Block import net.minecraft.block.BlockState import net.minecraft.client.render.model.Baker import net.minecraft.client.render.model.BlockStateModel +import net.minecraft.client.render.model.ReferencedModelsCollector import net.minecraft.client.render.model.SimpleBlockStateModel import net.minecraft.client.render.model.json.ModelVariant import net.minecraft.registry.RegistryKey @@ -308,6 +309,19 @@ object CustomBlockTextures { }) } + fun simpleBlockModel(blockId: Identifier): SimpleBlockStateModel.Unbaked { + // TODO: does this need to be shared between resolving and baking? I think not, but it would probably be wise to do so in the future. + return SimpleBlockStateModel.Unbaked( + ModelVariant(blockId) + ) + } + + @JvmStatic + fun collectExtraModels(modelsCollector: ReferencedModelsCollector) { + preparationFuture.join().collectAllReplacements() + .forEach { modelsCollector.resolve(simpleBlockModel(it.blockModelIdentifier)) } + } + @JvmStatic fun createBakedModels(baker: Baker, executor: Executor): CompletableFuture<Void?> { return preparationFuture.thenComposeAsync(Function { replacements -> @@ -315,7 +329,7 @@ object CustomBlockTextures { val modelBakingTask = AsyncHelper.mapValues(byModel, { blockId, replacements -> val unbakedModel = SimpleBlockStateModel.Unbaked( ModelVariant(blockId) - ) // TODO: do i need to resolve models here? Maybe this needs to be resolved earlier before baking. + ) val baked = unbakedModel.bake(baker) replacements.forEach { it.blockModel = baked diff --git a/src/texturePacks/java/moe/nea/firmament/mixins/custommodels/InsertExtraBlockModelDependencies.java b/src/texturePacks/java/moe/nea/firmament/mixins/custommodels/InsertExtraBlockModelDependencies.java new file mode 100644 index 0000000..91779e7 --- /dev/null +++ b/src/texturePacks/java/moe/nea/firmament/mixins/custommodels/InsertExtraBlockModelDependencies.java @@ -0,0 +1,28 @@ +package moe.nea.firmament.mixins.custommodels; + +import com.llamalad7.mixinextras.sugar.Local; +import moe.nea.firmament.features.texturepack.CustomBlockTextures; +import net.minecraft.client.item.ItemAssetsLoader; +import net.minecraft.client.render.model.BakedModelManager; +import net.minecraft.client.render.model.BlockStatesLoader; +import net.minecraft.client.render.model.ReferencedModelsCollector; +import net.minecraft.client.render.model.UnbakedModel; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; + +@Mixin(BakedModelManager.class) +public class InsertExtraBlockModelDependencies { + @Inject(method = "collect", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/model/ReferencedModelsCollector;addSpecialModel(Lnet/minecraft/util/Identifier;Lnet/minecraft/client/render/model/UnbakedModel;)V", shift = At.Shift.AFTER)) + private static void insertExtraModels( + Map<Identifier, UnbakedModel> modelMap, + BlockStatesLoader.LoadedModels stateDefinition, + ItemAssetsLoader.Result result, + CallbackInfoReturnable cir, @Local ReferencedModelsCollector modelsCollector) { + CustomBlockTextures.collectExtraModels(modelsCollector); + } +} |