de.pewpewproject.lasertag.block.entity.render.LasertagFlagRenderer   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 63
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A render(LasertagFlagBlockEntity,float,MatrixStack,VertexConsumerProvider,int) 0 53 3
A LasertagFlagRenderer(Context) 0 2 1
1
package de.pewpewproject.lasertag.block.entity.render;
2
3
import com.mojang.blaze3d.systems.RenderSystem;
4
import de.pewpewproject.lasertag.block.entity.LasertagFlagBlockEntity;
5
import net.minecraft.block.enums.DoubleBlockHalf;
6
import net.minecraft.client.MinecraftClient;
7
import net.minecraft.client.render.OverlayTexture;
8
import net.minecraft.client.render.RenderLayer;
9
import net.minecraft.client.render.VertexConsumerProvider;
10
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
11
import net.minecraft.client.util.math.MatrixStack;
12
import software.bernie.geckolib3.core.util.Color;
13
import software.bernie.geckolib3.geo.render.built.GeoModel;
14
import software.bernie.geckolib3.renderers.geo.GeoBlockRenderer;
15
import software.bernie.geckolib3.util.EModelRenderCycle;
16
17
/**
18
 * Custom renderer for the lasertag flag block entity
19
 *
20
 * @author Étienne Muser
21
 */
22
public class LasertagFlagRenderer extends GeoBlockRenderer<LasertagFlagBlockEntity> {
23
24
    private static final LasertagFlagModel MODEL = new LasertagFlagModel();
25
26
    private static final LasertagFlagLightsModel LIGHTS_MODEL = new LasertagFlagLightsModel();
27
28
    public LasertagFlagRenderer(BlockEntityRendererFactory.Context context) {
29
        super(MODEL);
30
    }
31
32
    @Override
33
    public void render(LasertagFlagBlockEntity blockEntity, float partialTick, MatrixStack poseStack, VertexConsumerProvider bufferSource, int packedLight) {
34
35
        // Only render if is bottom half
36
        if (blockEntity.getHalf() == DoubleBlockHalf.UPPER) {
37
            return;
38
        }
39
40
        // Get the game managers
41
        var gameManager = MinecraftClient.getInstance().world.getClientLasertagManager();
42
        var syncedState = gameManager.getSyncedState();
43
        var teamsConfigState = syncedState.getTeamsConfigState();
44
45
        // Render base
46
        GeoModel model = modelProvider.getModel(modelProvider.getModelResource(blockEntity));
47
        this.dispatchedMat = poseStack.peek().getPositionMatrix().copy();
48
        this.setCurrentModelRenderCycle(EModelRenderCycle.INITIAL);
49
        poseStack.push();
50
51
        RenderSystem.setShaderTexture(0, getTextureLocation(blockEntity));
52
        Color renderColor = getRenderColor(blockEntity, partialTick, poseStack, bufferSource, null, packedLight);
53
        RenderLayer renderType = RenderLayer.getEntityCutout(getTextureLocation(animatable));
54
        render(model, blockEntity, partialTick, renderType, poseStack, bufferSource, null, packedLight, OverlayTexture.DEFAULT_UV,
55
                renderColor.getRed() / 255f, renderColor.getGreen() / 255f,
56
                renderColor.getBlue() / 255f, renderColor.getAlpha() / 255f);
57
        poseStack.pop();
58
59
        // Render lights
60
        poseStack.push();
61
62
        var lightsModel = LIGHTS_MODEL.getModel(LIGHTS_MODEL.getModelResource(null));
63
64
        var cameo = RenderLayer.getEntityTranslucentEmissive(LIGHTS_MODEL.getTextureResource(null));
65
66
        // Get the team of the flag
67
        var teamOptional = teamsConfigState.getTeamOfName(blockEntity.getTeamName());
68
69
        var r = 1.0f;
70
        var g = 1.0f;
71
        var b = 1.0f;
72
        var brightness = 1.0f;
73
74
        // If flag has team
75
        if (teamOptional.isPresent()) {
76
77
            var color = teamOptional.get().color();
78
            r = color.r() / 255.0f;
79
            g = color.g() / 255.0f;
80
            b = color.b() / 255.0f;
81
        }
82
83
        this.render(lightsModel, blockEntity, partialTick, cameo, poseStack, bufferSource, bufferSource.getBuffer(cameo), 255, OverlayTexture.DEFAULT_UV, r, g, b, brightness);
84
        poseStack.pop();
85
    }
86
}
87