WIP: Port some 1.21.5 things

This commit is contained in:
Linnea Gräf
2025-04-01 01:37:55 +02:00
parent 9501ca2e34
commit bb02aa6ddd
43 changed files with 249 additions and 615 deletions

View File

@@ -19,8 +19,8 @@ import kotlinx.serialization.serializer
import kotlin.jvm.optionals.getOrNull
import net.minecraft.block.Block
import net.minecraft.block.BlockState
import net.minecraft.client.render.model.BakedModel
import net.minecraft.client.util.ModelIdentifier
import net.minecraft.client.render.item.model.ItemModel
import net.minecraft.client.render.model.BlockStateModel
import net.minecraft.registry.RegistryKey
import net.minecraft.registry.RegistryKeys
import net.minecraft.resource.ResourceManager
@@ -57,11 +57,11 @@ object CustomBlockTextures {
) {
@Transient
val blockModelIdentifier get() = ModelIdentifier(block.withPrefixedPath("block/"), "firmament")
val blockModelIdentifier get() = block.withPrefixedPath("block/")
@Transient
val bakedModel: BakedModel by lazy(LazyThreadSafetyMode.NONE) {
MC.instance.bakedModelManager.getModel(blockModelIdentifier)
val bakedModel: ItemModel by lazy(LazyThreadSafetyMode.NONE) {
MC.instance.bakedModelManager.blockModels.(blockModelIdentifier)
}
@OptIn(ExperimentalSerializationApi::class)
@@ -189,7 +189,7 @@ object CustomBlockTextures {
}
@JvmStatic
fun getReplacementModel(block: BlockState, blockPos: BlockPos?): BakedModel? {
fun getReplacementModel(block: BlockState, blockPos: BlockPos?): BlockStateModel? {
return getReplacement(block, blockPos)?.bakedModel
}
@@ -269,11 +269,6 @@ object CustomBlockTextures {
return BakedReplacements(map.mapValues { LocationReplacements(it.value) })
}
@JvmStatic
fun patchIndigo(orig: BakedModel, pos: BlockPos, state: BlockState): BakedModel {
return getReplacementModel(state, pos) ?: orig
}
@Subscribe
fun onStart(event: FinalizeResourceManagerEvent) {
event.resourceManager.registerReloader(object :

View File

@@ -81,7 +81,11 @@ object CustomGlobalArmorOverrides {
null,
Optional.of(RegistryKey.of(EquipmentAssetKeys.REGISTRY_KEY, model)),
Optional.empty(),
Optional.empty(), false, false, false
Optional.empty(),
false,
false,
false,
false
)
}

View File

@@ -8,7 +8,6 @@ import org.slf4j.LoggerFactory
import kotlinx.serialization.Serializable
import kotlinx.serialization.UseSerializers
import kotlin.jvm.optionals.getOrNull
import net.minecraft.client.util.ModelIdentifier
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.SinglePreparationResourceReloader
import net.minecraft.text.Text

View File

@@ -9,12 +9,11 @@ import net.minecraft.client.render.item.ItemRenderState
import net.minecraft.client.render.item.model.BasicItemModel
import net.minecraft.client.render.item.model.ItemModel
import net.minecraft.client.render.item.model.ItemModelTypes
import net.minecraft.client.render.item.tint.TintSource
import net.minecraft.client.render.model.ResolvableModel
import net.minecraft.client.world.ClientWorld
import net.minecraft.entity.LivingEntity
import net.minecraft.item.ItemDisplayContext
import net.minecraft.item.ItemStack
import net.minecraft.item.ModelTransformationMode
import net.minecraft.util.Identifier
import moe.nea.firmament.features.texturepack.predicates.AndPredicate
@@ -29,10 +28,10 @@ class PredicateModel {
)
override fun update(
state: ItemRenderState,
state: ItemRenderState?,
stack: ItemStack,
resolver: ItemModelManager,
transformationMode: ModelTransformationMode,
resolver: ItemModelManager?,
displayContext: ItemDisplayContext?,
world: ClientWorld?,
user: LivingEntity?,
seed: Int
@@ -42,7 +41,7 @@ class PredicateModel {
.findLast { it.predicate.test(stack, user) }
?.model
?: fallback
model.update(state, stack, resolver, transformationMode, world, user, seed)
model.update(state, stack, resolver, displayContext, world, user, seed)
}
}

View File

@@ -13,6 +13,7 @@ import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlin.jvm.optionals.getOrNull
import net.minecraft.nbt.NbtString
import net.minecraft.text.Text
import moe.nea.firmament.util.MC
@@ -26,7 +27,7 @@ interface StringMatcher {
}
fun matches(nbt: NbtString): Boolean {
val string = nbt.asString()
val string = nbt.value
val jsonStart = string.indexOf('{')
val stringStart = string.indexOf('"')
val isString = stringStart >= 0 && string.subSequence(0, stringStart).isBlank()

View File

@@ -1,3 +1,4 @@
package moe.nea.firmament.features.texturepack.predicates
import com.google.gson.Gson
@@ -5,8 +6,9 @@ import com.google.gson.JsonArray
import com.google.gson.JsonElement
import com.google.gson.JsonObject
import com.google.gson.JsonPrimitive
import com.mojang.serialization.JsonOps
import kotlin.jvm.optionals.getOrDefault
import kotlin.jvm.optionals.getOrNull
import com.mojang.serialization.JsonOps
import moe.nea.firmament.features.texturepack.FirmamentModelPredicate
import moe.nea.firmament.features.texturepack.FirmamentModelPredicateParser
import moe.nea.firmament.features.texturepack.StringMatcher

View File

@@ -7,16 +7,17 @@ import moe.nea.firmament.features.texturepack.CustomBlockTextures;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.block.BlockModels;
import net.minecraft.client.render.block.BlockRenderManager;
import net.minecraft.client.render.chunk.SectionBuilder;
import net.minecraft.client.render.model.BakedModel;
import net.minecraft.client.render.model.BlockStateModel;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(BlockRenderManager.class)
@Mixin(SectionBuilder.class)
public class ReplaceBlockRenderManagerBlockModel {
@WrapOperation(method = "renderBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/BlockRenderManager;getModel(Lnet/minecraft/block/BlockState;)Lnet/minecraft/client/render/model/BakedModel;"))
private BakedModel replaceModelInRenderBlock(
BlockRenderManager instance, BlockState state, Operation<BakedModel> original, @Local(argsOnly = true) BlockPos pos) {
@WrapOperation(method = "build", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/block/BlockRenderManager;getModel(Lnet/minecraft/block/BlockState;)Lnet/minecraft/client/render/model/BlockStateModel;"))
private BlockStateModel replaceModelInRenderBlock(BlockRenderManager instance, BlockState state, Operation<BlockStateModel> original, @Local(argsOnly = true) BlockPos pos) {
var replacement = CustomBlockTextures.getReplacementModel(state, pos);
if (replacement != null) return replacement;
CustomBlockTextures.enterFallbackCall();