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 .block .model .ItemTransforms ;
108import net .minecraft .client .renderer .entity .ItemRenderer ;
119import net .minecraft .client .resources .model .BakedModel ;
1210import net .minecraft .client .resources .model .SimpleBakedModel ;
13- import net .minecraft .core .Direction ;
14- import net .minecraft .util .RandomSource ;
1511import net .minecraft .world .item .BlockItem ;
1612import net .minecraft .world .item .ItemStack ;
1713import org .embeddedt .modernfix .render .FastItemRenderType ;
1814import org .embeddedt .modernfix .render .RenderState ;
19- import org .spongepowered . asm . mixin . Final ;
15+ import org .embeddedt . modernfix . render . SimpleItemModelView ;
2016import org .spongepowered .asm .mixin .Mixin ;
21- import org .spongepowered .asm .mixin .Shadow ;
2217import org .spongepowered .asm .mixin .injection .At ;
2318import org .spongepowered .asm .mixin .injection .Inject ;
19+ import org .spongepowered .asm .mixin .injection .ModifyVariable ;
2420import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
2521
26- import java .util .List ;
27-
28- @ Mixin (ItemRenderer .class )
22+ @ Mixin (value = ItemRenderer .class , priority = 600 )
2923public 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-
3624 private ItemTransforms .TransformType transformType ;
25+ private final SimpleItemModelView modelView = new SimpleItemModelView ();
3726
3827 @ Inject (method = "render" , at = @ At ("HEAD" ))
3928 private void markRenderingType (ItemStack itemStack , ItemTransforms .TransformType transformType , boolean leftHand , PoseStack matrixStack , MultiBufferSource buffer , int combinedLight , int combinedOverlay , BakedModel model , CallbackInfo ci ) {
4029 this .transformType = transformType ;
4130 }
4231
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-
5432 /**
5533 * If a model
5634 * - is a vanilla item model (SimpleBakedModel),
@@ -59,8 +37,8 @@ private boolean isCorrectDirectionForType(FastItemRenderType type, Direction dir
5937 * we do not need to go through the process of rendering every quad. Just render the south ones (the ones facing the
6038 * camera).
6139 */
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 ) {
40+ @ ModifyVariable (method = "renderModelLists" , at = @ At ("HEAD" ), index = 1 , argsOnly = true )
41+ private BakedModel useSimpleWrappedItemModel (BakedModel model , BakedModel arg , ItemStack stack , int combinedLight , int combinedOverlay , PoseStack matrixStack , VertexConsumer buffer ) {
6442 if (!RenderState .IS_RENDERING_LEVEL && !stack .isEmpty () && model .getClass () == SimpleBakedModel .class && transformType == ItemTransforms .TransformType .GUI ) {
6543 FastItemRenderType type ;
6644 ItemTransform transform = model .getTransforms ().gui ;
@@ -69,43 +47,17 @@ private void fasterItemRender(BakedModel model, ItemStack stack, int combinedLig
6947 else if (stack .getItem () instanceof BlockItem && isBlockTransforms (transform ))
7048 type = FastItemRenderType .SIMPLE_BLOCK ;
7149 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- }
50+ return model ;
51+ modelView .setItem (model );
52+ modelView .setType (type );
53+ return modelView ;
54+ } else
55+ return model ;
9256 }
9357
9458 private boolean isBlockTransforms (ItemTransform transform ) {
9559 return transform .rotation .x () == 30f
9660 && transform .rotation .y () == 225f
9761 && transform .rotation .z () == 0f ;
9862 }
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- }
11163}
0 commit comments