Skip to content

Commit 58115f1

Browse files
committed
Simplified the entity renderers of all the cabinet block variants
1 parent a8d670e commit 58115f1

8 files changed

Lines changed: 177 additions & 191 deletions

File tree

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,19 @@
11
package io.github.mikip98.humilityafm.content.blockentities.cabinetBlock;
22

3+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.ItemWallRendering;
34
import io.github.mikip98.humilityafm.content.blocks.cabinet.CabinetBlock;
45
import net.fabricmc.api.EnvType;
56
import net.fabricmc.api.Environment;
67
import net.minecraft.block.BlockState;
7-
import net.minecraft.client.MinecraftClient;
88
import net.minecraft.client.render.VertexConsumerProvider;
99
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
1010
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
11-
import net.minecraft.client.render.model.BakedModel;
12-
import net.minecraft.client.render.model.json.ModelTransformationMode;
1311
import net.minecraft.client.util.math.MatrixStack;
14-
import net.minecraft.item.ItemStack;
15-
import net.minecraft.state.property.Properties;
1612
import net.minecraft.util.math.BlockPos;
1713
import net.minecraft.world.World;
18-
import org.joml.Quaternionf;
1914

2015
@Environment(EnvType.CLIENT)
21-
public class CabinetBlockEntityRenderer implements BlockEntityRenderer<CabinetBlockEntity> {
16+
public class CabinetBlockEntityRenderer implements BlockEntityRenderer<CabinetBlockEntity>, ItemWallRendering {
2217
@SuppressWarnings("unused")
2318
public CabinetBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {}
2419

@@ -33,34 +28,4 @@ public void render(CabinetBlockEntity blockEntity, float tickDelta, MatrixStack
3328

3429
renderItem(blockEntity, blockState, matrices, vertexConsumers, light, overlay);
3530
}
36-
37-
public static void renderItem(CabinetBlockEntity blockEntity, BlockState blockState, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
38-
final ItemStack stack = blockEntity.getStack(0);
39-
if (stack.isEmpty()) return;
40-
41-
matrices.push();
42-
43-
// Center in a block; Required for correct rotation
44-
matrices.translate(0.5, 0.5, 0.5);
45-
46-
switch (blockState.get(Properties.HORIZONTAL_FACING)) {
47-
case SOUTH -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(180), 0, 0));
48-
case EAST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(270), 0, 0));
49-
case WEST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(90), 0, 0));
50-
}
51-
52-
// X -> Left/Right; positive is left; negative is right
53-
// Y -> Height
54-
// Z -> Depth; positive is deeper; negative is closer
55-
float scale = 0.59375f; // 19/32
56-
matrices.translate(0, 0, 0.4375 - 3f/64*(1-scale)); // Z is 7/16 - 3f/64*(1-scale)
57-
matrices.scale(scale, scale, scale);
58-
59-
// Render the item inside the cabinet
60-
final BakedModel model = MinecraftClient.getInstance().getItemRenderer().getModel(stack, null, null, 0);
61-
MinecraftClient.getInstance().getItemRenderer().renderItem(stack, ModelTransformationMode.FIXED, false, matrices, vertexConsumers, light, overlay, model);
62-
63-
// Mandatory call after GL calls
64-
matrices.pop();
65-
}
6631
}
Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,19 @@
11
package io.github.mikip98.humilityafm.content.blockentities.cabinetBlock;
22

3-
import io.github.mikip98.humilityafm.content.blocks.cabinet.CabinetBlock;
3+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.ItemFloorRendering;
4+
import io.github.mikip98.humilityafm.content.blocks.cabinet.FloorCabinetBlock;
45
import net.fabricmc.api.EnvType;
56
import net.fabricmc.api.Environment;
67
import net.minecraft.block.BlockState;
7-
import net.minecraft.block.enums.BlockHalf;
8-
import net.minecraft.client.MinecraftClient;
98
import net.minecraft.client.render.VertexConsumerProvider;
109
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
1110
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
12-
import net.minecraft.client.render.model.BakedModel;
13-
import net.minecraft.client.render.model.json.ModelTransformationMode;
1411
import net.minecraft.client.util.math.MatrixStack;
15-
import net.minecraft.item.ItemStack;
16-
import net.minecraft.state.property.Properties;
1712
import net.minecraft.util.math.BlockPos;
1813
import net.minecraft.world.World;
19-
import org.joml.Quaternionf;
2014

2115
@Environment(EnvType.CLIENT)
22-
public class FloorCabinetBlockEntityRenderer implements BlockEntityRenderer<FloorCabinetBlockEntity> {
16+
public class FloorCabinetBlockEntityRenderer implements BlockEntityRenderer<FloorCabinetBlockEntity>, ItemFloorRendering {
2317
@SuppressWarnings("unused")
2418
public FloorCabinetBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {}
2519

@@ -30,41 +24,8 @@ public void render(FloorCabinetBlockEntity blockEntity, float tickDelta, MatrixS
3024
if (world == null || pos == null) return;
3125

3226
BlockState blockState = world.getBlockState(pos);
33-
if (blockState == null || !(blockState.getBlock() instanceof CabinetBlock)) return;
27+
if (blockState == null || !(blockState.getBlock() instanceof FloorCabinetBlock)) return;
3428

3529
renderItem(blockEntity, blockState, matrices, vertexConsumers, light, overlay);
3630
}
37-
38-
public static void renderItem(CabinetBlockEntity blockEntity, BlockState blockState, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
39-
final ItemStack stack = blockEntity.getStack(0);
40-
if (stack.isEmpty()) return;
41-
42-
float scale = 0.59375f; // 19/32
43-
44-
matrices.push();
45-
46-
// Center in a block; Required for correct rotation
47-
matrices.translate(0.5, 0.5, 0.5);
48-
49-
float rotationX = (float) (blockState.get(Properties.BLOCK_HALF) == BlockHalf.BOTTOM ? Math.toRadians(90) : Math.toRadians(270));
50-
switch (blockState.get(Properties.HORIZONTAL_FACING)) {
51-
case NORTH -> matrices.multiply(new Quaternionf().rotationYXZ(0, rotationX, 0));
52-
case SOUTH -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(180), rotationX, 0));
53-
case EAST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(270), rotationX, 0));
54-
case WEST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(90), rotationX, 0));
55-
}
56-
57-
// X -> Left/Right; positive is left; negative is right
58-
// Y -> Height
59-
// Z -> Depth; positive is deeper; negative is closer
60-
matrices.translate(0, 0, 0.4375 - 3f/64*(1-scale));
61-
matrices.scale(scale, scale, scale);
62-
63-
// Render the item inside the cabinet
64-
final BakedModel model = MinecraftClient.getInstance().getItemRenderer().getModel(stack, null, null, 0);
65-
MinecraftClient.getInstance().getItemRenderer().renderItem(stack, ModelTransformationMode.FIXED, false, matrices, vertexConsumers, light, overlay, model);
66-
67-
// Mandatory call after GL calls
68-
matrices.pop();
69-
}
7031
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.github.mikip98.humilityafm.content.blockentities.cabinetBlock;
22

3+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.ItemFloorRendering;
4+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.RenderSelfBrightening;
35
import io.github.mikip98.humilityafm.content.blocks.cabinet.FloorIlluminatedCabinetBlock;
4-
import io.github.mikip98.humilityafm.helpers.BlockEntityRendererHelper;
56
import net.fabricmc.api.EnvType;
67
import net.fabricmc.api.Environment;
78
import net.minecraft.block.BlockState;
8-
import net.minecraft.client.MinecraftClient;
99
import net.minecraft.client.render.VertexConsumerProvider;
1010
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
1111
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
@@ -14,7 +14,7 @@
1414
import net.minecraft.world.World;
1515

1616
@Environment(EnvType.CLIENT)
17-
public class FloorIlluminatedCabinetBlockEntityRenderer implements BlockEntityRenderer<FloorIlluminatedCabinetBlockEntity> {
17+
public class FloorIlluminatedCabinetBlockEntityRenderer implements BlockEntityRenderer<FloorIlluminatedCabinetBlockEntity>, ItemFloorRendering, RenderSelfBrightening {
1818
@SuppressWarnings("unused")
1919
public FloorIlluminatedCabinetBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {}
2020

@@ -27,64 +27,8 @@ public void render(FloorIlluminatedCabinetBlockEntity blockEntity, float tickDel
2727
BlockState blockState = world.getBlockState(pos);
2828
if (blockState == null || !(blockState.getBlock() instanceof FloorIlluminatedCabinetBlock)) return;
2929

30-
31-
FloorCabinetBlockEntityRenderer.renderItem(blockEntity, blockState, matrices, vertexConsumers, 255, overlay);
32-
33-
34-
final float blockSizeYZ = 0.875f;
30+
renderItem(blockEntity, blockState, matrices, vertexConsumers, 255, overlay);
3531
final float posisionConstant = 1.15f;
36-
37-
final float blockSizeX = 0.25f;
38-
float posisionConstantX = posisionConstant;
39-
float posisionConstantZ = posisionConstant;
40-
41-
// switch (blockState.get(Properties.HORIZONTAL_FACING)) {
42-
// case NORTH -> {
43-
// posisionConstantX = 4f;
44-
// posisionConstantZ = 2f;
45-
// }
46-
// case SOUTH -> {
47-
// posisionConstantX = 4f;
48-
// posisionConstantZ = 0.3f;
49-
// }
50-
// case WEST -> posisionConstantX = 7f;
51-
// }
52-
53-
// Render the brightened outside shell of the cabinet
54-
renderSelf(
55-
1.1f, 1,
56-
blockSizeX, blockSizeYZ, posisionConstant, posisionConstantX, posisionConstantZ, 1.005f,
57-
blockState, matrices, vertexConsumers, light, overlay
58-
);
59-
60-
// Render the brightened inside walls of the cabinet
61-
renderSelf(
62-
1.15f, 3,
63-
blockSizeX, blockSizeYZ, posisionConstant, posisionConstantX, posisionConstantZ, 0.992f,
64-
blockState, matrices, vertexConsumers, light, overlay
65-
);
66-
}
67-
68-
protected static void renderSelf(
69-
float lightMultiplayer, int lightAddition,
70-
float blockSizeX, float blockSizeYZ, float posisionConstant, float posisionConstantX, float posisionConstantZ, float scale,
71-
BlockState blockState, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay
72-
) {
73-
matrices.push();
74-
75-
matrices.translate(
76-
-blockSizeX /2*(scale-1)*posisionConstantX,
77-
-blockSizeYZ/2*(scale-1)*posisionConstant,
78-
-blockSizeYZ/2*(scale-1)*posisionConstantZ
79-
);
80-
matrices.scale(scale, scale, scale);
81-
82-
int outsideLight = BlockEntityRendererHelper.multiplyLight(light, lightMultiplayer);
83-
outsideLight = BlockEntityRendererHelper.addLight(outsideLight, lightAddition);
84-
85-
MinecraftClient.getInstance().getBlockRenderManager().renderBlockAsEntity(
86-
blockState, matrices, vertexConsumers, outsideLight, overlay); // 0xF000F0
87-
88-
matrices.pop();
32+
renderSelfBrightening(blockState, posisionConstant, posisionConstant, posisionConstant, matrices, vertexConsumers, light, overlay);
8933
}
9034
}
Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.github.mikip98.humilityafm.content.blockentities.cabinetBlock;
22

3+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.ItemWallRendering;
4+
import io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering.RenderSelfBrightening;
35
import io.github.mikip98.humilityafm.content.blocks.cabinet.IlluminatedCabinetBlock;
4-
import io.github.mikip98.humilityafm.helpers.BlockEntityRendererHelper;
56
import net.fabricmc.api.EnvType;
67
import net.fabricmc.api.Environment;
78
import net.minecraft.block.BlockState;
8-
import net.minecraft.client.MinecraftClient;
99
import net.minecraft.client.render.VertexConsumerProvider;
1010
import net.minecraft.client.render.block.entity.BlockEntityRenderer;
1111
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
@@ -15,77 +15,53 @@
1515
import net.minecraft.world.World;
1616

1717
@Environment(EnvType.CLIENT)
18-
public class IlluminatedCabinetBlockEntityRenderer implements BlockEntityRenderer<IlluminatedCabinetBlockEntity> {
18+
public class IlluminatedCabinetBlockEntityRenderer implements BlockEntityRenderer<IlluminatedCabinetBlockEntity>, ItemWallRendering, RenderSelfBrightening {
1919
@SuppressWarnings("unused")
2020
public IlluminatedCabinetBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {}
2121

2222
@Override
23-
public void render(IlluminatedCabinetBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
23+
public void render(
24+
IlluminatedCabinetBlockEntity blockEntity, float tickDelta,
25+
MatrixStack matrices, VertexConsumerProvider vertexConsumers,
26+
int light, int overlay
27+
) {
2428
World world = blockEntity.getWorld();
2529
BlockPos pos = blockEntity.getPos();
2630
if (world == null || pos == null) return;
2731

2832
BlockState blockState = world.getBlockState(pos);
2933
if (blockState == null || !(blockState.getBlock() instanceof IlluminatedCabinetBlock)) return;
3034

35+
renderItem(blockEntity, blockState, matrices, vertexConsumers, 255, overlay);
36+
selfBrighteningRunner(blockState, matrices, vertexConsumers, light, overlay);
37+
}
3138

32-
CabinetBlockEntityRenderer.renderItem(blockEntity, blockState, matrices, vertexConsumers, 255, overlay);
33-
34-
35-
final float blockSizeYZ = 0.875f;
39+
protected void selfBrighteningRunner(
40+
BlockState blockState,
41+
MatrixStack matrices, VertexConsumerProvider vertexConsumers,
42+
int light, int overlay
43+
) {
3644
final float posisionConstant = 1.15f;
37-
38-
final float blockSizeX = 0.25f;
3945
float posisionConstantX = posisionConstant;
4046
float posisionConstantZ = posisionConstant;
4147

4248
switch (blockState.get(Properties.HORIZONTAL_FACING)) {
43-
case NORTH -> {
49+
case NORTH:
4450
posisionConstantX = 4f;
4551
posisionConstantZ = 2f;
46-
}
47-
case SOUTH -> {
52+
break;
53+
case SOUTH:
4854
posisionConstantX = 4f;
4955
posisionConstantZ = 0.3f;
50-
}
51-
case WEST -> posisionConstantX = 7f;
56+
break;
57+
case WEST:
58+
posisionConstantX = 7f;
5259
}
5360

54-
// Render the brightened outside shell of the cabinet
55-
renderSelf(
56-
1.1f, 1,
57-
blockSizeX, blockSizeYZ, posisionConstant, posisionConstantX, posisionConstantZ, 1.005f,
58-
blockState, matrices, vertexConsumers, light, overlay
59-
);
60-
61-
// Render the brightened inside walls of the cabinet
62-
renderSelf(
63-
1.15f, 3,
64-
blockSizeX, blockSizeYZ, posisionConstant, posisionConstantX, posisionConstantZ, 0.992f,
65-
blockState, matrices, vertexConsumers, light, overlay
61+
renderSelfBrightening(
62+
blockState,
63+
posisionConstant, posisionConstantX, posisionConstantZ,
64+
matrices, vertexConsumers, light, overlay
6665
);
6766
}
68-
69-
protected static void renderSelf(
70-
float lightMultiplayer, int lightAddition,
71-
float blockSizeX, float blockSizeYZ, float posisionConstant, float posisionConstantX, float posisionConstantZ, float scale,
72-
BlockState blockState, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay
73-
) {
74-
matrices.push();
75-
76-
matrices.translate(
77-
-blockSizeX /2*(scale-1)*posisionConstantX,
78-
-blockSizeYZ/2*(scale-1)*posisionConstant,
79-
-blockSizeYZ/2*(scale-1)*posisionConstantZ
80-
);
81-
matrices.scale(scale, scale, scale);
82-
83-
int outsideLight = BlockEntityRendererHelper.multiplyLight(light, lightMultiplayer);
84-
outsideLight = BlockEntityRendererHelper.addLight(outsideLight, lightAddition);
85-
86-
MinecraftClient.getInstance().getBlockRenderManager().renderBlockAsEntity(
87-
blockState, matrices, vertexConsumers, outsideLight, overlay); // 0xF000F0
88-
89-
matrices.pop();
90-
}
9167
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.github.mikip98.humilityafm.content.blockentities.cabinetBlock.rendering;
2+
3+
import net.minecraft.block.BlockState;
4+
import net.minecraft.block.enums.BlockHalf;
5+
import net.minecraft.client.util.math.MatrixStack;
6+
import net.minecraft.state.property.Properties;
7+
import org.joml.Quaternionf;
8+
9+
public non-sealed interface ItemFloorRendering extends ItemRendering {
10+
default MatrixStack rotateMatrices(MatrixStack matrices, BlockState blockState) {
11+
float rotationX = (float) (blockState.get(Properties.BLOCK_HALF) == BlockHalf.BOTTOM ? Math.toRadians(90) : Math.toRadians(270));
12+
switch (blockState.get(Properties.HORIZONTAL_FACING)) {
13+
case NORTH -> matrices.multiply(new Quaternionf().rotationYXZ(0, rotationX, 0));
14+
case SOUTH -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(180), rotationX, 0));
15+
case EAST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(270), rotationX, 0));
16+
case WEST -> matrices.multiply(new Quaternionf().rotationYXZ((float) Math.toRadians(90), rotationX, 0));
17+
}
18+
return matrices;
19+
}
20+
}

0 commit comments

Comments
 (0)