minecraft-src/net/minecraft/client/renderer/blockentity/VaultRenderer.java
2025-07-04 03:45:38 +03:00

50 lines
2.4 KiB
Java

package net.minecraft.client.renderer.blockentity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider.Context;
import net.minecraft.client.renderer.entity.ItemEntityRenderer;
import net.minecraft.client.renderer.entity.state.ItemClusterRenderState;
import net.minecraft.client.renderer.item.ItemModelResolver;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
import net.minecraft.world.item.ItemDisplayContext;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.vault.VaultBlockEntity;
import net.minecraft.world.level.block.entity.vault.VaultClientData;
import net.minecraft.world.phys.Vec3;
@Environment(EnvType.CLIENT)
public class VaultRenderer implements BlockEntityRenderer<VaultBlockEntity> {
private final ItemModelResolver itemModelResolver;
private final RandomSource random = RandomSource.create();
private final ItemClusterRenderState renderState = new ItemClusterRenderState();
public VaultRenderer(Context context) {
this.itemModelResolver = context.getItemModelResolver();
}
public void render(VaultBlockEntity vaultBlockEntity, float f, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, int j, Vec3 vec3) {
if (VaultBlockEntity.Client.shouldDisplayActiveEffects(vaultBlockEntity.getSharedData())) {
Level level = vaultBlockEntity.getLevel();
if (level != null) {
ItemStack itemStack = vaultBlockEntity.getSharedData().getDisplayItem();
if (!itemStack.isEmpty()) {
this.itemModelResolver.updateForTopItem(this.renderState.item, itemStack, ItemDisplayContext.GROUND, level, null, 0);
this.renderState.count = ItemClusterRenderState.getRenderedAmount(itemStack.getCount());
this.renderState.seed = ItemClusterRenderState.getSeedForItemStack(itemStack);
VaultClientData vaultClientData = vaultBlockEntity.getClientData();
poseStack.pushPose();
poseStack.translate(0.5F, 0.4F, 0.5F);
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.rotLerp(f, vaultClientData.previousSpin(), vaultClientData.currentSpin())));
ItemEntityRenderer.renderMultipleFromCount(poseStack, multiBufferSource, i, this.renderState, this.random);
poseStack.popPose();
}
}
}
}
}