diff --git a/src/main/java/betterblockentities/mixin/minecraft/SpecialItemModelMixin.java b/src/main/java/betterblockentities/mixin/minecraft/SpecialItemModelMixin.java new file mode 100644 index 0000000..0b655a5 --- /dev/null +++ b/src/main/java/betterblockentities/mixin/minecraft/SpecialItemModelMixin.java @@ -0,0 +1,39 @@ +package betterblockentities.mixin.minecraft; + +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import net.minecraft.client.render.item.ItemRenderState; +import net.minecraft.client.render.item.model.SpecialItemModel; +import net.minecraft.client.render.item.model.special.SpecialModelRenderer; +import org.joml.Vector3f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +import java.util.Set; +import java.util.function.Supplier; + +@Mixin(SpecialItemModel.class) +public class SpecialItemModelMixin { + + @Shadow + @Final + private SpecialModelRenderer specialModelType; + + @Unique + private Vector3f[] cachedVertices; + + @Redirect(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/item/ItemRenderState$LayerRenderState;setVertices(Ljava/util/function/Supplier;)V")) + private void cacheSetVertices(ItemRenderState.LayerRenderState instance, Supplier originalSupplier) { + instance.setVertices(() -> { + if (this.cachedVertices == null) { + Set set = new ObjectOpenHashSet<>(); + this.specialModelType.collectVertices(set); + this.cachedVertices = set.toArray(new Vector3f[0]); + } + return this.cachedVertices; + }); + } +} diff --git a/src/main/resources/betterblockentities.mixins.json b/src/main/resources/betterblockentities.mixins.json index 0e99bb5..bb53b02 100644 --- a/src/main/resources/betterblockentities.mixins.json +++ b/src/main/resources/betterblockentities.mixins.json @@ -4,30 +4,25 @@ "compatibilityLevel": "JAVA_21", "mixins": [ "minecraft.bell.BellBlockEntityMixin", - "minecraft.chest.ChestBlockEntityAccessor", "minecraft.chest.ChestBlockEntityMixin", "minecraft.chest.ChestBlockEntityRendererMixin", "minecraft.chest.ChestLidAnimatorAccessor", "minecraft.chest.EnderChestBlockEntityMixin", - "minecraft.decordatedpot.DecoratedPotBlockEntityMixin", - "minecraft.shulker.ShulkerBoxBlockEntityMixin", - "minecraft.sign.AbstractSignBlockEntityRendererMixin", - "sodium.AbstractBlockRenderContextAccessor", "sodium.BlockRendererMixin", "sodium.SodiumWorldRendererMixin", - "minecraft.AbstractBlockMixin", "minecraft.BlockEntityMixin", "minecraft.ClientWorldMixin", "minecraft.OrderedRenderCommandQueueImplMixin", "minecraft.RenderLayersMixin", "minecraft.ResourcePackManagerMixin", - "minecraft.WorldRendererMixin" + "minecraft.WorldRendererMixin", + "minecraft.SpecialItemModelMixin" ], "server": [], "injectors": {