minecraft-src/net/minecraft/client/renderer/blockentity/VaultRenderer.java
2025-07-04 01:41:11 +03:00

69 lines
2.3 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.entity.ItemEntityRenderer;
import net.minecraft.client.renderer.entity.ItemRenderer;
import net.minecraft.util.Mth;
import net.minecraft.util.RandomSource;
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;
@Environment(EnvType.CLIENT)
public class VaultRenderer implements BlockEntityRenderer<VaultBlockEntity> {
private final ItemRenderer itemRenderer;
private final RandomSource random = RandomSource.create();
public VaultRenderer(BlockEntityRendererProvider.Context context) {
this.itemRenderer = context.getItemRenderer();
}
public void render(VaultBlockEntity blockEntity, float partialTick, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, int packedOverlay) {
if (VaultBlockEntity.Client.shouldDisplayActiveEffects(blockEntity.getSharedData())) {
Level level = blockEntity.getLevel();
if (level != null) {
ItemStack itemStack = blockEntity.getSharedData().getDisplayItem();
if (!itemStack.isEmpty()) {
this.random.setSeed(ItemEntityRenderer.getSeedForItemStack(itemStack));
VaultClientData vaultClientData = blockEntity.getClientData();
renderItemInside(
partialTick,
level,
poseStack,
bufferSource,
packedLight,
itemStack,
this.itemRenderer,
vaultClientData.previousSpin(),
vaultClientData.currentSpin(),
this.random
);
}
}
}
}
public static void renderItemInside(
float partialTick,
Level level,
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
ItemStack item,
ItemRenderer itemRenderer,
float previousSpin,
float currentSpin,
RandomSource random
) {
poseStack.pushPose();
poseStack.translate(0.5F, 0.4F, 0.5F);
poseStack.mulPose(Axis.YP.rotationDegrees(Mth.rotLerp(partialTick, previousSpin, currentSpin)));
ItemEntityRenderer.renderMultipleFromCount(itemRenderer, poseStack, buffer, packedLight, item, random, level);
poseStack.popPose();
}
}