73 lines
3.2 KiB
Java
73 lines
3.2 KiB
Java
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();
|
|
}
|
|
}
|
|
}
|
|
}
|