Skip to content

Commit 4ea5faf

Browse files
KaupenjoeKaupenjoe
authored andcommitted
block entity renderer
1 parent 4af272d commit 4ea5faf

3 files changed

Lines changed: 61 additions & 0 deletions

File tree

src/main/java/net/kaupenjoe/tutorialmod/TutorialMod.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import net.kaupenjoe.tutorialmod.block.ModBlocks;
44
import net.kaupenjoe.tutorialmod.block.entity.ModBlockEntities;
5+
import net.kaupenjoe.tutorialmod.block.entity.renderer.PedestalBlockEntityRenderer;
56
import net.kaupenjoe.tutorialmod.component.ModDataComponents;
67
import net.kaupenjoe.tutorialmod.effect.ModEffects;
78
import net.kaupenjoe.tutorialmod.enchantment.ModEnchantmentEffects;
@@ -20,6 +21,7 @@
2021
import net.kaupenjoe.tutorialmod.villager.ModVillagers;
2122
import net.minecraft.client.renderer.entity.EntityRenderers;
2223
import net.minecraft.world.item.CreativeModeTabs;
24+
import net.neoforged.neoforge.client.event.EntityRenderersEvent;
2325
import net.neoforged.neoforge.client.event.RegisterParticleProvidersEvent;
2426
import org.slf4j.Logger;
2527

@@ -121,5 +123,10 @@ public static void onClientSetup(FMLClientSetupEvent event) {
121123
public static void registerParticleFactories(RegisterParticleProvidersEvent event) {
122124
event.registerSpriteSet(ModParticles.BISMUTH_PARTICLES.get(), BismuthParticles.Provider::new);
123125
}
126+
127+
@SubscribeEvent
128+
public static void registerBER(EntityRenderersEvent.RegisterRenderers event) {
129+
event.registerBlockEntityRenderer(ModBlockEntities.PEDESTAL_BE.get(), PedestalBlockEntityRenderer::new);
130+
}
124131
}
125132
}

src/main/java/net/kaupenjoe/tutorialmod/block/entity/PedestalBlockEntity.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,20 @@ protected void onContentsChanged(int slot) {
2929
}
3030
}
3131
};
32+
private float rotation;
3233

3334
public PedestalBlockEntity(BlockPos pos, BlockState blockState) {
3435
super(ModBlockEntities.PEDESTAL_BE.get(), pos, blockState);
3536
}
3637

38+
public float getRenderingRotation() {
39+
rotation += 0.5f;
40+
if(rotation >= 360) {
41+
rotation = 0;
42+
}
43+
return rotation;
44+
}
45+
3746
public void clearContents() {
3847
inventory.setStackInSlot(0, ItemStack.EMPTY);
3948
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package net.kaupenjoe.tutorialmod.block.entity.renderer;
2+
3+
import com.mojang.blaze3d.vertex.PoseStack;
4+
import com.mojang.math.Axis;
5+
import net.kaupenjoe.tutorialmod.block.entity.PedestalBlockEntity;
6+
import net.minecraft.client.Minecraft;
7+
import net.minecraft.client.renderer.LightTexture;
8+
import net.minecraft.client.renderer.MultiBufferSource;
9+
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
10+
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
11+
import net.minecraft.client.renderer.entity.ItemRenderer;
12+
import net.minecraft.client.renderer.texture.OverlayTexture;
13+
import net.minecraft.core.BlockPos;
14+
import net.minecraft.world.item.ItemDisplayContext;
15+
import net.minecraft.world.item.ItemStack;
16+
import net.minecraft.world.level.Level;
17+
import net.minecraft.world.level.LightLayer;
18+
19+
public class PedestalBlockEntityRenderer implements BlockEntityRenderer<PedestalBlockEntity> {
20+
public PedestalBlockEntityRenderer(BlockEntityRendererProvider.Context context) {
21+
22+
}
23+
24+
@Override
25+
public void render(PedestalBlockEntity pBlockEntity, float pPartialTick, PoseStack pPoseStack,
26+
MultiBufferSource pBufferSource, int pPackedLight, int pPackedOverlay) {
27+
ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer();
28+
ItemStack stack = pBlockEntity.inventory.getStackInSlot(0);
29+
30+
pPoseStack.pushPose();
31+
pPoseStack.translate(0.5f, 1.15f, 0.5f);
32+
pPoseStack.scale(0.5f, 0.5f, 0.5f);
33+
pPoseStack.mulPose(Axis.YP.rotationDegrees(pBlockEntity.getRenderingRotation()));
34+
35+
itemRenderer.renderStatic(stack, ItemDisplayContext.FIXED, getLightLevel(pBlockEntity.getLevel(),
36+
pBlockEntity.getBlockPos()), OverlayTexture.NO_OVERLAY, pPoseStack, pBufferSource, pBlockEntity.getLevel(), 1);
37+
pPoseStack.popPose();
38+
}
39+
40+
private int getLightLevel(Level level, BlockPos pos) {
41+
int bLight = level.getBrightness(LightLayer.BLOCK, pos);
42+
int sLight = level.getBrightness(LightLayer.SKY, pos);
43+
return LightTexture.pack(bLight, sLight);
44+
}
45+
}

0 commit comments

Comments
 (0)