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

62 lines
2.2 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.EntityRenderDispatcher;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.BaseSpawner;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.entity.SpawnerBlockEntity;
import net.minecraft.world.phys.Vec3;
@Environment(EnvType.CLIENT)
public class SpawnerRenderer implements BlockEntityRenderer<SpawnerBlockEntity> {
private final EntityRenderDispatcher entityRenderer;
public SpawnerRenderer(Context context) {
this.entityRenderer = context.getEntityRenderer();
}
public void render(SpawnerBlockEntity spawnerBlockEntity, float f, PoseStack poseStack, MultiBufferSource multiBufferSource, int i, int j, Vec3 vec3) {
Level level = spawnerBlockEntity.getLevel();
if (level != null) {
BaseSpawner baseSpawner = spawnerBlockEntity.getSpawner();
Entity entity = baseSpawner.getOrCreateDisplayEntity(level, spawnerBlockEntity.getBlockPos());
if (entity != null) {
renderEntityInSpawner(f, poseStack, multiBufferSource, i, entity, this.entityRenderer, baseSpawner.getoSpin(), baseSpawner.getSpin());
}
}
}
public static void renderEntityInSpawner(
float partialTick,
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
Entity entity,
EntityRenderDispatcher entityRenderer,
double oSpin,
double spin
) {
poseStack.pushPose();
poseStack.translate(0.5F, 0.0F, 0.5F);
float f = 0.53125F;
float g = Math.max(entity.getBbWidth(), entity.getBbHeight());
if (g > 1.0) {
f /= g;
}
poseStack.translate(0.0F, 0.4F, 0.0F);
poseStack.mulPose(Axis.YP.rotationDegrees((float)Mth.lerp((double)partialTick, oSpin, spin) * 10.0F));
poseStack.translate(0.0F, -0.2F, 0.0F);
poseStack.mulPose(Axis.XP.rotationDegrees(-30.0F));
poseStack.scale(f, f, f);
entityRenderer.render(entity, 0.0, 0.0, 0.0, partialTick, poseStack, buffer, packedLight);
poseStack.popPose();
}
}