evo/src/main/java/a/o.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();
}
}
}
}