22
33import com .mojang .blaze3d .vertex .PoseStack ;
44import com .mojang .blaze3d .vertex .VertexConsumer ;
5- import net .minecraft .client .color .item .ItemColors ;
65import net .minecraft .client .renderer .MultiBufferSource ;
7- import net .minecraft .client .renderer .block .model .BakedQuad ;
86import net .minecraft .client .renderer .block .model .ItemTransform ;
97import net .minecraft .client .renderer .entity .ItemRenderer ;
108import net .minecraft .client .resources .model .BakedModel ;
119import net .minecraft .client .resources .model .SimpleBakedModel ;
12- import net .minecraft .core .Direction ;
1310import net .minecraft .util .RandomSource ;
1411import net .minecraft .world .item .ItemDisplayContext ;
1512import net .minecraft .world .item .BlockItem ;
1613import net .minecraft .world .item .ItemStack ;
1714import org .embeddedt .modernfix .render .FastItemRenderType ;
1815import org .embeddedt .modernfix .render .RenderState ;
19- import org .spongepowered . asm . mixin . Final ;
16+ import org .embeddedt . modernfix . render . SimpleItemModelView ;
2017import org .spongepowered .asm .mixin .Mixin ;
21- import org .spongepowered .asm .mixin .Shadow ;
2218import org .spongepowered .asm .mixin .injection .At ;
2319import org .spongepowered .asm .mixin .injection .Inject ;
20+ import org .spongepowered .asm .mixin .injection .ModifyVariable ;
2421import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2522
26- import java .util .List ;
27-
28- @ Mixin (ItemRenderer .class )
23+ @ Mixin (value = ItemRenderer .class , priority = 600 )
2924public abstract class ItemRendererMixin {
30- @ Shadow @ Final private ItemColors itemColors ;
31-
32- private final RandomSource dummyRandom = RandomSource .createNewThreadLocalInstance ();
33-
34- private static final float [] COLOR_MULTIPLIER = new float []{1.0F , 1.0F , 1.0F , 1.0F };
35-
3625 private ItemDisplayContext transformType ;
26+ private final SimpleItemModelView modelView = new SimpleItemModelView ();
3727
3828 @ Inject (method = "render" , at = @ At ("HEAD" ))
3929 private void markRenderingType (ItemStack itemStack , ItemDisplayContext transformType , boolean leftHand , PoseStack matrixStack , MultiBufferSource buffer , int combinedLight , int combinedOverlay , BakedModel model , CallbackInfo ci ) {
4030 this .transformType = transformType ;
4131 }
4232
43- private static final Direction [] ITEM_DIRECTIONS = new Direction [] { Direction .SOUTH };
44- private static final Direction [] BLOCK_DIRECTIONS = new Direction [] { Direction .UP , Direction .EAST , Direction .NORTH };
45-
46- private boolean isCorrectDirectionForType (FastItemRenderType type , Direction direction ) {
47- if (type == FastItemRenderType .SIMPLE_ITEM )
48- return direction == Direction .SOUTH ;
49- else {
50- return direction == Direction .UP || direction == Direction .EAST || direction == Direction .NORTH ;
51- }
52- }
53-
5433 /**
5534 * If a model
5635 * - is a vanilla item model (SimpleBakedModel),
@@ -59,8 +38,8 @@ private boolean isCorrectDirectionForType(FastItemRenderType type, Direction dir
5938 * we do not need to go through the process of rendering every quad. Just render the south ones (the ones facing the
6039 * camera).
6140 */
62- @ Inject (method = "renderModelLists" , at = @ At ("HEAD" ), cancellable = true )
63- private void fasterItemRender (BakedModel model , ItemStack stack , int combinedLight , int combinedOverlay , PoseStack matrixStack , VertexConsumer buffer , CallbackInfo ci ) {
41+ @ ModifyVariable (method = "renderModelLists" , at = @ At ("HEAD" ), index = 1 , argsOnly = true )
42+ private BakedModel useSimpleWrappedItemModel (BakedModel model , BakedModel arg , ItemStack stack , int combinedLight , int combinedOverlay , PoseStack matrixStack , VertexConsumer buffer ) {
6443 if (!RenderState .IS_RENDERING_LEVEL && !stack .isEmpty () && model .getClass () == SimpleBakedModel .class && transformType == ItemDisplayContext .GUI ) {
6544 FastItemRenderType type ;
6645 ItemTransform transform = model .getTransforms ().gui ;
@@ -69,43 +48,17 @@ private void fasterItemRender(BakedModel model, ItemStack stack, int combinedLig
6948 else if (stack .getItem () instanceof BlockItem && isBlockTransforms (transform ))
7049 type = FastItemRenderType .SIMPLE_BLOCK ;
7150 else
72- return ;
73- ci .cancel ();
74- PoseStack .Pose pose = matrixStack .last ();
75- int [] combinedLights = new int [] {combinedLight , combinedLight , combinedLight , combinedLight };
76- Direction [] directions = type == FastItemRenderType .SIMPLE_ITEM ? ITEM_DIRECTIONS : BLOCK_DIRECTIONS ;
77- for (Direction direction : directions ) {
78- List <BakedQuad > culledFaces = model .getQuads (null , direction , dummyRandom );
79- /* check size to avoid instantiating iterator when the list is empty */
80- if (culledFaces .size () > 0 ) {
81- for (BakedQuad quad : culledFaces ) {
82- render2dItemFace (quad , stack , buffer , pose , combinedLights , combinedOverlay );
83- }
84- }
85- }
86- List <BakedQuad > unculledFaces = model .getQuads (null , null , dummyRandom );
87- for (BakedQuad quad : unculledFaces ) {
88- if (isCorrectDirectionForType (type , quad .getDirection ()))
89- render2dItemFace (quad , stack , buffer , pose , combinedLights , combinedOverlay );
90- }
91- }
51+ return model ;
52+ modelView .setItem (model );
53+ modelView .setType (type );
54+ return modelView ;
55+ } else
56+ return model ;
9257 }
9358
9459 private boolean isBlockTransforms (ItemTransform transform ) {
9560 return transform .rotation .x () == 30f
9661 && transform .rotation .y () == 225f
9762 && transform .rotation .z () == 0f ;
9863 }
99-
100- private void render2dItemFace (BakedQuad quad , ItemStack stack , VertexConsumer buffer , PoseStack .Pose pose , int [] combinedLights , int combinedOverlay ) {
101- int i = -1 ;
102- if (quad .isTinted ()) {
103- i = this .itemColors .getColor (stack , quad .getTintIndex ());
104- }
105-
106- float f = (float )(i >> 16 & 255 ) / 255.0F ;
107- float f1 = (float )(i >> 8 & 255 ) / 255.0F ;
108- float f2 = (float )(i & 255 ) / 255.0F ;
109- buffer .putBulkData (pose , quad , COLOR_MULTIPLIER , f , f1 , f2 , combinedLights , combinedOverlay , true );
110- }
11164}
0 commit comments