package a; import defpackage.*; import b.l; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.QuadInstance; import com.mojang.blaze3d.vertex.PoseStack.Pose; import net.minecraft.client.Minecraft; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.feature.ItemFeatureRenderer; import net.minecraft.client.renderer.feature.ItemFeatureRenderer.Submit; import net.minecraft.client.renderer.rendertype.RenderType; import net.minecraft.client.resources.model.geometry.BakedQuad; import net.minecraft.client.resources.model.geometry.BakedQuad.MaterialInfo; import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ItemFeatureRenderer.class) public abstract class o { @Unique private static int hmi$getTint(int[] tints, int index) { return index >= 0 && index < tints.length ? tints[index] : -1; } @Inject(method = "prepareMainSubmit", at = @At("HEAD"), cancellable = true) private void hmi$prepareMainSubmit(Submit submit, CallbackInfo ci) { if (ve.active()) { Minecraft minecraft = Minecraft.getInstance(); AbstractClientPlayer player = minecraft.player; ItemDisplayContext displayContext = submit.displayContext(); boolean handContext = (displayContext == ItemDisplayContext.THIRD_PERSON_LEFT_HAND || displayContext == ItemDisplayContext.THIRD_PERSON_RIGHT_HAND) && player != null && minecraft.getEntityRenderDispatcher().options.getCameraType().isFirstPerson(); if (handContext) { ah context = ai.get(); ItemStack renderedItem = ae.getRenderedItem(); am.itemModelCache.executeModel(context, renderedItem, player, af.modelPartAnimator); for (al cache : am.itemModelAddonsCache) { cache.executeModel(context, renderedItem, player, af.modelPartAnimator); } Pose basePose = submit.pose(); QuadInstance quadInstance = new QuadInstance(); quadInstance.setLightCoords(submit.lightCoords()); quadInstance.setOverlayCoords(submit.overlayCoords()); PoseStack posed = new PoseStack(); int index = 0; for (BakedQuad quad : submit.quads()) { MaterialInfo material = quad.materialInfo(); RenderType renderType = material.itemRenderType(); quadInstance.setColor(material.isTinted() ? hmi$getTint(submit.tintLayers(), material.tintIndex()) : -1); posed.pushPose(); posed.last().set(basePose); af.modelPartAnimator.applyPoses(index, posed); Pose pose = posed.last(); ((l)this).evo$getVertexBuilder(renderType).putBakedQuad(pose, quad, quadInstance); posed.popPose(); index++; } af.modelPartAnimator.clear(); ci.cancel(); } } } }