148 lines
6.3 KiB
Java
148 lines
6.3 KiB
Java
package net.minecraft.client.renderer.entity;
|
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.SheetedDecalTextureGenerator;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import com.mojang.blaze3d.vertex.VertexMultiConsumer;
|
|
import com.mojang.math.MatrixUtil;
|
|
import java.util.List;
|
|
import javax.annotation.Nullable;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.client.renderer.Sheets;
|
|
import net.minecraft.client.renderer.block.model.BakedQuad;
|
|
import net.minecraft.client.renderer.item.ItemModelResolver;
|
|
import net.minecraft.client.renderer.item.ItemStackRenderState;
|
|
import net.minecraft.resources.ResourceLocation;
|
|
import net.minecraft.util.ARGB;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.item.ItemDisplayContext;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
public class ItemRenderer {
|
|
public static final ResourceLocation ENCHANTED_GLINT_ARMOR = ResourceLocation.withDefaultNamespace("textures/misc/enchanted_glint_armor.png");
|
|
public static final ResourceLocation ENCHANTED_GLINT_ITEM = ResourceLocation.withDefaultNamespace("textures/misc/enchanted_glint_item.png");
|
|
public static final int GUI_SLOT_CENTER_X = 8;
|
|
public static final int GUI_SLOT_CENTER_Y = 8;
|
|
public static final int ITEM_DECORATION_BLIT_OFFSET = 200;
|
|
public static final float COMPASS_FOIL_UI_SCALE = 0.5F;
|
|
public static final float COMPASS_FOIL_FIRST_PERSON_SCALE = 0.75F;
|
|
public static final float COMPASS_FOIL_TEXTURE_SCALE = 0.0078125F;
|
|
public static final int NO_TINT = -1;
|
|
private final ItemModelResolver resolver;
|
|
private final ItemStackRenderState scratchItemStackRenderState = new ItemStackRenderState();
|
|
|
|
public ItemRenderer(ItemModelResolver p_377469_) {
|
|
this.resolver = p_377469_;
|
|
}
|
|
|
|
public static void renderItem(
|
|
ItemDisplayContext p_362035_,
|
|
PoseStack p_370127_,
|
|
MultiBufferSource p_365365_,
|
|
int p_363416_,
|
|
int p_367651_,
|
|
int[] p_378157_,
|
|
List<BakedQuad> p_395550_,
|
|
RenderType p_377949_,
|
|
ItemStackRenderState.FoilType p_378770_
|
|
) {
|
|
VertexConsumer vertexconsumer;
|
|
if (p_378770_ == ItemStackRenderState.FoilType.SPECIAL) {
|
|
PoseStack.Pose posestack$pose = p_370127_.last().copy();
|
|
if (p_362035_ == ItemDisplayContext.GUI) {
|
|
MatrixUtil.mulComponentWise(posestack$pose.pose(), 0.5F);
|
|
} else if (p_362035_.firstPerson()) {
|
|
MatrixUtil.mulComponentWise(posestack$pose.pose(), 0.75F);
|
|
}
|
|
|
|
vertexconsumer = getCompassFoilBuffer(p_365365_, p_377949_, posestack$pose);
|
|
} else {
|
|
vertexconsumer = getFoilBuffer(p_365365_, p_377949_, true, p_378770_ != ItemStackRenderState.FoilType.NONE);
|
|
}
|
|
|
|
renderQuadList(p_370127_, vertexconsumer, p_395550_, p_378157_, p_363416_, p_367651_);
|
|
}
|
|
|
|
public static VertexConsumer getArmorFoilBuffer(MultiBufferSource p_115185_, RenderType p_115186_, boolean p_115187_) {
|
|
return p_115187_ ? VertexMultiConsumer.create(p_115185_.getBuffer(RenderType.armorEntityGlint()), p_115185_.getBuffer(p_115186_)) : p_115185_.getBuffer(p_115186_);
|
|
}
|
|
|
|
private static VertexConsumer getCompassFoilBuffer(MultiBufferSource p_115181_, RenderType p_115182_, PoseStack.Pose p_115183_) {
|
|
return VertexMultiConsumer.create(
|
|
new SheetedDecalTextureGenerator(p_115181_.getBuffer(RenderType.glint()), p_115183_, 0.0078125F), p_115181_.getBuffer(p_115182_)
|
|
);
|
|
}
|
|
|
|
public static VertexConsumer getFoilBuffer(MultiBufferSource p_115212_, RenderType p_115213_, boolean p_115214_, boolean p_115215_) {
|
|
if (p_115215_) {
|
|
return Minecraft.useShaderTransparency() && p_115213_ == Sheets.translucentItemSheet()
|
|
? VertexMultiConsumer.create(p_115212_.getBuffer(RenderType.glintTranslucent()), p_115212_.getBuffer(p_115213_))
|
|
: VertexMultiConsumer.create(p_115212_.getBuffer(p_115214_ ? RenderType.glint() : RenderType.entityGlint()), p_115212_.getBuffer(p_115213_));
|
|
} else {
|
|
return p_115212_.getBuffer(p_115213_);
|
|
}
|
|
}
|
|
|
|
private static int getLayerColorSafe(int[] p_377342_, int p_378491_) {
|
|
return p_378491_ >= 0 && p_378491_ < p_377342_.length ? p_377342_[p_378491_] : -1;
|
|
}
|
|
|
|
private static void renderQuadList(PoseStack p_115163_, VertexConsumer p_115164_, List<BakedQuad> p_115165_, int[] p_375549_, int p_115167_, int p_115168_) {
|
|
PoseStack.Pose posestack$pose = p_115163_.last();
|
|
|
|
for (BakedQuad bakedquad : p_115165_) {
|
|
float f;
|
|
float f1;
|
|
float f2;
|
|
float f3;
|
|
if (bakedquad.isTinted()) {
|
|
int i = getLayerColorSafe(p_375549_, bakedquad.tintIndex());
|
|
f = ARGB.alpha(i) / 255.0F;
|
|
f1 = ARGB.red(i) / 255.0F;
|
|
f2 = ARGB.green(i) / 255.0F;
|
|
f3 = ARGB.blue(i) / 255.0F;
|
|
} else {
|
|
f = 1.0F;
|
|
f1 = 1.0F;
|
|
f2 = 1.0F;
|
|
f3 = 1.0F;
|
|
}
|
|
|
|
p_115164_.putBulkData(posestack$pose, bakedquad, f1, f2, f3, f, p_115167_, p_115168_);
|
|
}
|
|
}
|
|
|
|
public void renderStatic(
|
|
ItemStack p_270761_,
|
|
ItemDisplayContext p_270648_,
|
|
int p_270410_,
|
|
int p_270894_,
|
|
PoseStack p_270430_,
|
|
MultiBufferSource p_270457_,
|
|
@Nullable Level p_270149_,
|
|
int p_270509_
|
|
) {
|
|
this.renderStatic(null, p_270761_, p_270648_, p_270430_, p_270457_, p_270149_, p_270410_, p_270894_, p_270509_);
|
|
}
|
|
|
|
public void renderStatic(
|
|
@Nullable LivingEntity p_270101_,
|
|
ItemStack p_270637_,
|
|
ItemDisplayContext p_270437_,
|
|
PoseStack p_270230_,
|
|
MultiBufferSource p_270411_,
|
|
@Nullable Level p_270641_,
|
|
int p_270595_,
|
|
int p_270927_,
|
|
int p_270845_
|
|
) {
|
|
this.resolver.updateForTopItem(this.scratchItemStackRenderState, p_270637_, p_270437_, p_270641_, p_270101_, p_270845_);
|
|
this.scratchItemStackRenderState.render(p_270230_, p_270411_, p_270595_, p_270927_);
|
|
}
|
|
} |