aboutsummaryrefslogtreecommitdiff
path: root/src/texturePacks/java
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-11-17 19:55:02 +0100
committerLinnea Gräf <nea@nea.moe>2025-11-17 19:55:02 +0100
commitc93a04a001b0f66b2724d46b04b6d1ed49a08d07 (patch)
tree5869ca70acc482ef0362f27785c3d3f1cbb9ffae /src/texturePacks/java
parentaf9893b59407c69d31ebd2ed513f0396ab4d2dc9 (diff)
downloadFirmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.tar.gz
Firmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.tar.bz2
Firmament-c93a04a001b0f66b2724d46b04b6d1ed49a08d07.zip
refactor: port to mojmaps
Diffstat (limited to 'src/texturePacks/java')
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt131
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTexturesDebugger.kt20
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt84
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalTextures.kt34
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomModelOverrideParser.kt16
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomScreenLayouts.kt102
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomSkyBlockTextures.kt32
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextColors.kt32
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomTextReplacements.kt30
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/FirmamentModelPredicate.kt4
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/HeadModelChooser.kt60
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/PredicateModel.kt74
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/StringMatcher.kt8
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/TreeishTextReplacer.kt32
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/AlwaysPredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/AndPredicate.kt4
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/CastPredicate.kt8
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/DisplayNamePredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ExtraAttributesPredicate.kt52
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/GenericComponentPredicate.kt36
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/ItemPredicate.kt18
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/LorePredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/NotPredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/OrPredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/PetPredicate.kt2
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/PullingPredicate.kt8
-rw-r--r--src/texturePacks/java/moe/nea/firmament/features/texturepack/predicates/SkullPredicate.kt16
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ApplyHeadModelInItemRenderer.java12
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/BuildExtraBlockStateModels.java12
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/CustomSkullTexturePatch.java20
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/InsertExtraBlockModelDependencies.java24
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ItemRenderStateExtraInfo.java4
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/LoadExtraBlockStates.java22
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/PatchArmorTexture.java20
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/PatchLegacyArmorLayerSupport.java14
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/PatchLegacyTexturePathsIntoArmorLayers.java14
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockBreakSoundPatch.java12
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockHitSoundPatch.java30
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceBlockRenderManagerBlockModel.java16
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceFallbackBlockModel.java10
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceHeadModel.java32
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceItemModelPatch.java24
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/ReplaceTextsInDrawContext.java38
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/SupplyFakeModelPatch.java58
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ExpandScreenBoundaries.java8
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/MoveSignElements.java42
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplaceAnvilScreen.java44
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplaceForgingScreen.java4
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplaceFurnaceBackgrounds.java26
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplaceGenericBackgrounds.java20
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplacePlayerBackgrounds.java34
-rw-r--r--src/texturePacks/java/moe/nea/firmament/mixins/custommodels/screenlayouts/ReplaceTextColorInHandledScreen.java28
52 files changed, 691 insertions, 690 deletions
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 de64805..bc0f36a 100644
--- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt
+++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTextures.kt
@@ -22,28 +22,28 @@ import kotlinx.serialization.json.JsonElement
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.serializer
import kotlin.jvm.optionals.getOrNull
-import net.minecraft.block.Block
-import net.minecraft.block.BlockState
-import net.minecraft.block.Blocks
-import net.minecraft.client.render.model.Baker
-import net.minecraft.client.render.model.BlockStateModel
-import net.minecraft.client.render.model.BlockStatesLoader
-import net.minecraft.client.render.model.ReferencedModelsCollector
-import net.minecraft.client.render.model.SimpleBlockStateModel
-import net.minecraft.client.render.model.json.BlockModelDefinition
-import net.minecraft.client.render.model.json.ModelVariant
-import net.minecraft.registry.Registries
-import net.minecraft.registry.RegistryKey
-import net.minecraft.registry.RegistryKeys
-import net.minecraft.resource.Resource
-import net.minecraft.resource.ResourceManager
-import net.minecraft.resource.SinglePreparationResourceReloader
-import net.minecraft.state.StateManager
-import net.minecraft.util.Identifier
-import net.minecraft.util.math.BlockPos
-import net.minecraft.util.math.Box
-import net.minecraft.util.profiler.Profiler
-import net.minecraft.util.thread.AsyncHelper
+import net.minecraft.world.level.block.Block
+import net.minecraft.world.level.block.state.BlockState
+import net.minecraft.world.level.block.Blocks
+import net.minecraft.client.resources.model.ModelBaker
+import net.minecraft.client.renderer.block.model.BlockStateModel
+import net.minecraft.client.resources.model.BlockStateModelLoader
+import net.minecraft.client.resources.model.ModelDiscovery
+import net.minecraft.client.renderer.block.model.SingleVariant
+import net.minecraft.client.renderer.block.model.BlockModelDefinition
+import net.minecraft.client.renderer.block.model.Variant
+import net.minecraft.core.registries.BuiltInRegistries
+import net.minecraft.resources.ResourceKey
+import net.minecraft.core.registries.Registries
+import net.minecraft.server.packs.resources.Resource
+import net.minecraft.server.packs.resources.ResourceManager
+import net.minecraft.server.packs.resources.SimplePreparableReloadListener
+import net.minecraft.world.level.block.state.StateDefinition
+import net.minecraft.resources.ResourceLocation
+import net.minecraft.core.BlockPos
+import net.minecraft.world.phys.AABB
+import net.minecraft.util.profiling.ProfilerFiller
+import net.minecraft.util.thread.ParallelMapTransform
import moe.nea.firmament.Firmament
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.EarlyResourceReloadEvent
@@ -64,15 +64,15 @@ import moe.nea.firmament.util.json.SingletonSerializableList
object CustomBlockTextures {
@Serializable
data class CustomBlockOverride(
- val modes: @Serializable(SingletonSerializableList::class) List<String>,
- val area: List<Area>? = null,
- val replacements: Map<Identifier, Replacement>,
+ val modes: @Serializable(SingletonSerializableList::class) List<String>,
+ val area: List<Area>? = null,
+ val replacements: Map<ResourceLocation, Replacement>,
)
@Serializable(with = Replacement.Serializer::class)
data class Replacement(
- val block: Identifier,
- val sound: Identifier?,
+ val block: ResourceLocation,
+ val sound: ResourceLocation?,
) {
fun replace(block: BlockState): BlockStateModel? {
blockStateMap?.let { return it[block] }
@@ -83,7 +83,7 @@ object CustomBlockTextures {
lateinit var overridingBlock: Block
@Transient
- val blockModelIdentifier get() = block.withPrefixedPath("block/")
+ val blockModelIdentifier get() = block.withPrefix("block/")
/**
* Guaranteed to be set after [BakedReplacements.modelBakingFuture] is complete, if [unbakedBlockStateMap] is set.
@@ -92,7 +92,7 @@ object CustomBlockTextures {
var blockStateMap: Map<BlockState, BlockStateModel>? = null
@Transient
- var unbakedBlockStateMap: Map<BlockState, BlockStateModel.UnbakedGrouped>? = null
+ var unbakedBlockStateMap: Map<BlockState, BlockStateModel.UnbakedRoot>? = null
/**
* Guaranteed to be set after [BakedReplacements.modelBakingFuture] is complete. Prefer [blockStateMap] if present.
@@ -113,7 +113,7 @@ object CustomBlockTextures {
val jsonElement = decoder.decodeSerializableValue(delegate)
if (jsonElement is JsonPrimitive) {
require(jsonElement.isString)
- return Replacement(Identifier.tryParse(jsonElement.content)!!, null)
+ return Replacement(ResourceLocation.tryParse(jsonElement.content)!!, null)
}
return (decoder as JsonDecoder).json.decodeFromJsonElement(DefaultSerializer, jsonElement)
}
@@ -126,8 +126,8 @@ object CustomBlockTextures {
@Serializable
data class Area(
- val min: BlockPos,
- val max: BlockPos,
+ val min: BlockPos,
+ val max: BlockPos,
) {
@Transient
val realMin = BlockPos(
@@ -164,8 +164,8 @@ object CustomBlockTextures {
(blockPos.z in realMin.z..realMax.z)
}
- fun toBox(): Box {
- return Box(
+ fun toBox(): AABB {
+ return AABB(
realMin.x.toDouble(),
realMin.y.toDouble(),
realMin.z.toDouble(),
@@ -227,9 +227,10 @@ object CustomBlockTextures {
currentIslandReplacements = replacements
if (lastReplacements != replacements) {
MC.nextTick {
- MC.worldRenderer.chunks?.chunks?.forEach {
+ MC.worldRenderer.viewArea?.sections?.forEach {
// false schedules rebuilds outside a 27 block radius to happen async
- it.scheduleRebuild(false)
+ // nb: this sets the dirty but to true, the boolean parameter specifies the update behaviour
+ it.setDirty(false)
}
sodiumReloadTask?.run()
}
@@ -313,13 +314,13 @@ object CustomBlockTextures {
}
private fun prepare(manager: ResourceManager): BakedReplacements {
- val resources = manager.findResources("overrides/blocks") {
+ val resources = manager.listResources("overrides/blocks") {
it.namespace == "firmskyblock" && it.path.endsWith(".json")
}
val map = mutableMapOf<SkyBlockIsland, MutableMap<Block, MutableList<BlockReplacement>>>()
for ((file, resource) in resources) {
val json =
- Firmament.tryDecodeJsonFromStream<CustomBlockOverride>(resource.inputStream)
+ Firmament.tryDecodeJsonFromStream<CustomBlockOverride>(resource.open())
.getOrElse { ex ->
logger.error("Failed to load block texture override at $file", ex)
continue
@@ -328,8 +329,8 @@ object CustomBlockTextures {
val island = SkyBlockIsland.forMode(mode)
val islandMpa = map.getOrPut(island, ::mutableMapOf)
for ((blockId, replacement) in json.replacements) {
- val block = MC.defaultRegistries.getOrThrow(RegistryKeys.BLOCK)
- .getOptional(RegistryKey.of(RegistryKeys.BLOCK, blockId))
+ val block = MC.defaultRegistries.lookupOrThrow(Registries.BLOCK)
+ .get(ResourceKey.create(Registries.BLOCK, blockId))
.getOrNull()
if (block == null) {
logger.error("Failed to load block texture override at ${file}: unknown block '$blockId'")
@@ -346,25 +347,25 @@ object CustomBlockTextures {
@Subscribe
fun onStart(event: FinalizeResourceManagerEvent) {
- event.resourceManager.registerReloader(object :
- SinglePreparationResourceReloader<BakedReplacements>() {
- override fun prepare(manager: ResourceManager, profiler: Profiler): BakedReplacements {
+ event.resourceManager.registerReloadListener(object :
+ SimplePreparableReloadListener<BakedReplacements>() {
+ override fun prepare(manager: ResourceManager, profiler: ProfilerFiller): BakedReplacements {
return preparationFuture.join().also {
it.modelBakingFuture.join()
}
}
- override fun apply(prepared: BakedReplacements, manager: ResourceManager, profiler: Profiler?) {
+ override fun apply(prepared: BakedReplacements, manager: ResourceManager, profiler: ProfilerFiller?) {
allLocationReplacements = prepared
refreshReplacements()
}
})
}
- fun simpleBlockModel(blockId: Identifier): SimpleBlockStateModel.Unbaked {
+ fun simpleBlockModel(blockId: ResourceLocation): SingleVariant.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)
+ return SingleVariant.Unbaked(
+ Variant(blockId)
)
}
@@ -378,18 +379,18 @@ object CustomBlockTextures {
}
@JvmStatic
- fun collectExtraModels(modelsCollector: ReferencedModelsCollector) {
+ fun collectExtraModels(modelsCollector: ModelDiscovery) {
preparationFuture.join().collectAllReplacements()
.forEach {
- modelsCollector.resolve(simpleBlockModel(it.blockModelIdentifier))
+ modelsCollector.addRoot(simpleBlockModel(it.blockModelIdentifier))
it.unbakedBlockStateMap?.values?.forEach {
- modelsCollector.resolve(it)
+ modelsCollector.addRoot(it)
}
}
}
@JvmStatic
- fun createBakedModels(baker: Baker, executor: Executor): CompletableFuture<Void?> {
+ fun createBakedModels(baker: ModelBaker, executor: Executor): CompletableFuture<Void?> {
return preparationFuture.thenComposeAsync(Function { replacements ->
val allBlockStates = CompletableFuture.allOf(
*replacements.collectAllReplacements().filter { it.unbakedBlockStateMap != null }.map {
@@ -403,9 +404,9 @@ object CustomBlockTextures {
}.toList().toTypedArray()
)
val byModel = replacements.collectAllReplacements().groupBy { it.blockModelIdentifier }
- val modelBakingTask = AsyncHelper.mapValues(byModel, { blockId, replacements ->
- val unbakedModel = SimpleBlockStateModel.Unbaked(
- ModelVariant(blockId)
+ val modelBakingTask = ParallelMapTransform.schedule(byModel, { blockId, replacements ->
+ val unbakedModel = SingleVariant.Unbaked(
+ Variant(blockId)
)
val baked = unbakedModel.bake(baker)
replacements.forEach {
@@ -422,38 +423,38 @@ object CustomBlockTextures {
@JvmStatic
fun collectExtraBlockStateMaps(
- extra: BakedReplacements,
- original: Map<Identifier, List<Resource>>,
- stateManagers: Function<Identifier, StateManager<Block, BlockState>?>
+ extra: BakedReplacements,
+ original: Map<ResourceLocation, List<Resource>>,
+ stateManagers: Function<ResourceLocation, StateDefinition<Block, BlockState>?>
) {
extra.collectAllReplacements().forEach {
- val blockId = Registries.BLOCK.getKey(it.overridingBlock).getOrNull()?.value ?: return@forEach
- val allModels = mutableListOf<BlockStatesLoader.LoadedBlockStateDefinition>()
+ val blockId = BuiltInRegistries.BLOCK.getResourceKey(it.overridingBlock).getOrNull()?.location() ?: return@forEach
+ val allModels = mutableListOf<BlockStateModelLoader.LoadedBlockModelDefinition>()
val stateManager = stateManagers.apply(blockId) ?: return@forEach
- for (resource in original[BlockStatesLoader.FINDER.toResourcePath(it.block)] ?: return@forEach) {
+ for (resource in original[BlockStateModelLoader.BLOCKSTATE_LISTER.idToFile(it.block)] ?: return@forEach) {
try {
- resource.reader.use { reader ->
+ resource.openAsReader().use { reader ->
val jsonElement = JsonParser.parseReader(reader)
val blockModelDefinition =
BlockModelDefinition.CODEC.parse(JsonOps.INSTANCE, jsonElement)
.getOrThrow { msg: String? -> JsonParseException(msg) }
allModels.add(
- BlockStatesLoader.LoadedBlockStateDefinition(
- resource.getPackId(),
+ BlockStateModelLoader.LoadedBlockModelDefinition(
+ resource.sourcePackId(),
blockModelDefinition
)
)
}
} catch (exception: Exception) {
ErrorUtil.softError(
- "Failed to load custom blockstate definition ${it.block} from pack ${resource.packId}",
+ "Failed to load custom blockstate definition ${it.block} from pack ${resource.sourcePackId()}",
exception
)
}
}
try {
- it.unbakedBlockStateMap = BlockStatesLoader.combine(
+ it.unbakedBlockStateMap = BlockStateModelLoader.loadBlockStateDefinitionStack(
blockId,
stateManager,
allModels
diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTexturesDebugger.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTexturesDebugger.kt
index 456b6fd..ba19e0f 100644
--- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTexturesDebugger.kt
+++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomBlockTexturesDebugger.kt
@@ -2,11 +2,11 @@ package moe.nea.firmament.features.texturepack
import com.mojang.brigadier.arguments.IntegerArgumentType
import net.fabricmc.fabric.api.client.command.v2.ClientCommandManager
-import net.minecraft.block.Block
-import net.minecraft.command.argument.BlockArgumentParser
-import net.minecraft.command.argument.BlockStateArgumentType
-import net.minecraft.util.math.Box
-import net.minecraft.util.math.Vec3d
+import net.minecraft.world.level.block.Block
+import net.minecraft.commands.arguments.blocks.BlockStateParser
+import net.minecraft.commands.arguments.blocks.BlockStateArgument
+import net.minecraft.world.phys.AABB
+import net.minecraft.world.phys.Vec3
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.commands.get
import moe.nea.firmament.commands.thenArgument
@@ -42,10 +42,10 @@ object CustomBlockTexturesDebugger {
}
}
- fun RenderInWorldContext.tryRenderBox(box: Box, colour: Int) {
- val player = MC.player?.pos ?: Vec3d.ZERO
+ fun RenderInWorldContext.tryRenderBox(box: AABB, colour: Int) {
+ val player = MC.player?.position ?: Vec3.ZERO
if (box.center.distanceTo(player) < range + maxOf(
- box.lengthZ, box.lengthX, box.lengthY
+ box.zsize, box.xsize, box.ysize
) / 2 && !box.contains(player)
) {
box(box, colour)
@@ -81,9 +81,9 @@ object CustomBlockTexturesDebugger {
)
}
}
- thenArgument("block", BlockStateArgumentType.blockState(event.commandRegistryAccess)) { block ->
+ thenArgument("block", BlockStateArgument.block(event.commandRegistryAccess)) { block ->
thenExecute {
- val block = get(block).blockState.block
+ val block = get(block).state.block
debugMode = DebugMode.ForBlock(block)
MC.sendChat(
tr(
diff --git a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt
index f731982..7e3c018 100644
--- a/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt
+++ b/src/texturePacks/java/moe/nea/firmament/features/texturepack/CustomGlobalArmorOverrides.kt
@@ -8,16 +8,16 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.UseSerializers
-import net.minecraft.client.render.entity.equipment.EquipmentModel
-import net.minecraft.component.type.EquippableComponent
-import net.minecraft.entity.EquipmentSlot
-import net.minecraft.item.ItemStack
-import net.minecraft.item.equipment.EquipmentAssetKeys
-import net.minecraft.registry.RegistryKey
-import net.minecraft.resource.ResourceManager
-import net.minecraft.resource.SinglePreparationResourceReloader
-import net.minecraft.util.Identifier
-import net.minecraft.util.profiler.Profiler
+import net.minecraft.client.resources.model.EquipmentClientInfo
+import net.minecraft.world.item.equipment.Equippable
+import net.minecraft.world.entity.EquipmentSlot
+import net.minecraft.world.item.ItemStack
+import net.minecraft.world.item.equipment.EquipmentAssets
+import net.minecraft.resources.ResourceKey
+import net.minecraft.server.packs.resources.ResourceManager
+import net.minecraft.server.packs.resources.SimplePreparableReloadListener
+import net.minecraft.resources.ResourceLocation
+import net.minecraft.util.profiling.ProfilerFiller
import moe.nea.firmament.Firmament
import moe.nea.firmament.annotations.Subscribe
import moe.nea.firmament.events.FinalizeResourceManagerEvent
@@ -30,14 +30,14 @@ import moe.nea.firmament.util.skyBlockId
object CustomGlobalArmorOverrides {
@Serializable
data class ArmorOverride(
- @SerialName("item_ids")
+ @SerialName("item_ids")
val itemIds: List<String>,
- val layers: List<ArmorOverrideLayer>? = null,
- val model: Identifier? = null,
- val overrides: List<ArmorOverrideOverride> = listOf(),
+ val layers: List<ArmorOverrideLayer>? = null,
+ val model: ResourceLocation? = null,
+ val overrides: List<ArmorOverrideOverride> = listOf(),
) {
@Transient
- lateinit var modelIdentifier: Identifier
+ lateinit var modelIdentifier: ResourceLocation
fun bake(manager: ResourceManager) {
modelIdentifier = bakeModel(model, layers)
overrides.forEach { it.bake(manager) }
@@ -51,16 +51,16 @@ object CustomGlobalArmorOverrides {
@Serializable
data class ArmorOverrideLayer(
- val tint: Boolean = false,
- val identifier: Identifier,
- val suffix: String = "",
+ val tint: Boolean = false,
+ val identifier: ResourceLocation,
+ val suffix: String = "",
)
@Serializable
data class ArmorOverrideOverride(
- val predicate: FirmamentModelPredicate,
- val layers: List<ArmorOverrideLayer>? = null,
- val model: Identifier? = null,
+ val predicate: FirmamentModelPredicate,
+ val layers: List<ArmorOverrideLayer>? = null,
+ val model: ResourceLocation? = null,
) {
init {
require(layers != null || model != null) { "Either model or layers must be specified for armor override override" }
@@ -68,18 +68,18 @@ object CustomGlobalArmorOverrides {
}
@Transient
- lateinit var modelIdentifier: Identifier
+ lateinit var modelIdentifier: ResourceLocation
fun bake(manager: ResourceManager) {
modelIdentifier = bakeModel(model, layers)
}
}
- private fun resolveComponent(slot: EquipmentSlot, model: Identifier): EquippableComponent {
- return EquippableComponent(
+ private fun resolveComponent(slot: EquipmentSlot, model: ResourceLocation): Equippable {
+ return Equippable(
slot,
null,
- Optional.of(RegistryKey.of(EquipmentAssetKeys.REGISTRY_KEY, model)),
+ Optional