69 lines
2.3 KiB
Java
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();
|
|
}
|
|
}
|