Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
1package net.lerariemann.infinity.entity.client;
2
3import com.mojang.blaze3d.vertex.PoseStack;
4import com.mojang.blaze3d.vertex.VertexConsumer;
5import net.lerariemann.infinity.entity.custom.TintableEntity;
6import net.lerariemann.infinity.util.InfinityMethods;
7import net.minecraft.client.Minecraft;
8import net.minecraft.client.model.EntityModel;
9import net.minecraft.client.renderer.MultiBufferSource;
10import net.minecraft.client.renderer.RenderType;
11//? if >1.21.9 {
12/*import net.minecraft.client.renderer.SubmitNodeCollector;
13*///?}
14import net.minecraft.client.renderer.entity.LivingEntityRenderer;
15import net.minecraft.client.renderer.entity.RenderLayerParent;
16import net.minecraft.client.renderer.entity.layers.RenderLayer;
17//? if <1.21.2 {
18/*import net.minecraft.util.FastColor;
19*///?} else {
20import net.minecraft.client.renderer.entity.state.LivingEntityRenderState;
21import net.minecraft.util.ARGB;
22//?}
23import net.minecraft.resources.ResourceLocation;
24import net.minecraft.world.entity.Mob;
25
26public class TintedLayerRenderer<T extends
27 //? if >1.21.2 {
28 LivingEntityRenderState
29 //?} else {
30 /*Mob
31 *///?}
32 , S extends EntityModel<T>> extends RenderLayer<T, S> {
33 private final S model;
34
35 public TintedLayerRenderer(RenderLayerParent<T, S> context, S model) {
36 super(context);
37 this.model = model;
38 }
39
40 //? if >1.21.9 {
41
42 /*@Override
43 public void submit(PoseStack matrixStack, SubmitNodeCollector nodeCollector, int packedLight, T renderState, float yRot, float xRot) {
44 boolean bl = renderState.appearsGlowing() && renderState.isInvisible;
45 if (renderState.isInvisible && !bl) {
46 return;
47 }
48
49 // TODO 1.21.10 find a better way of extracting a texture from a render state
50 ResourceLocation texture;
51 if (renderState instanceof ChaosPawnRenderState) {
52 texture = InfinityMethods.getId("textures/entity/empty.png");
53 } else if (renderState instanceof ChaosSlimeRenderState) {
54 texture = InfinityMethods.getId("textures/entity/slime.png");
55 } else {
56 texture = InfinityMethods.getId("textures/entity/empty.png");
57 }
58
59// (this.getParentModel()).copyTransforms(this.model);
60 this.model.setupAnim(renderState);
61 int color = 16777215;
62 if (renderState instanceof TintableEntity ent) {
63 color = ent.getColorForRender();
64 }
65 nodeCollector.submitModel(model, renderState, matrixStack, RenderType.outline(texture), packedLight, LivingEntityRenderer.getOverlayCoords(renderState, 0.0f), color, null, renderState.outlineColor, null);
66 }
67 *///?} else if >1.21.2 {
68 // public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) {
69 @Override
70 public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int light, T livingEntity, float limbAngle, float limbDistance) {
71 boolean bl = livingEntity.appearsGlowing && livingEntity.isInvisible;
72 float a = 1f;
73 if (livingEntity.isInvisible && !bl) {
74 return;
75 }
76 ResourceLocation texture;
77 if (livingEntity instanceof TintedRenderState state) {
78 texture = state.getTexture();
79 a = state.getAlpha();
80 }
81 else {
82 texture = InfinityMethods.getId("textures/entity/empty.png");
83 }
84 VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(bl ?
85 RenderType.outline(texture) : RenderType.entityTranslucent(texture));
86 this.model.setupAnim(livingEntity);
87 int color = 16777215;
88 if (livingEntity instanceof TintedRenderState ent) {
89 color = ent.getColour();
90 }
91 this.model.renderToBuffer(matrixStack, vertexConsumer, light, LivingEntityRenderer.getOverlayCoords(livingEntity, 0.0f), ARGB.color(a, color));
92 }
93
94 //?} else {
95 /*@Override
96 public void render(PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i, T livingEntity, float f, float g, float h, float j, float k, float l) {
97 boolean bl = Minecraft.getInstance().shouldEntityAppearGlowing(livingEntity) && livingEntity.isInvisible();
98 if (livingEntity.isInvisible() && !bl) {
99 return;
100 }
101 VertexConsumer vertexConsumer = bl ? vertexConsumerProvider.getBuffer(RenderType.outline(this.getTextureLocation(livingEntity))) : vertexConsumerProvider.getBuffer(RenderType.entityTranslucent(this.getTextureLocation(livingEntity)));
102 (this.getParentModel()).copyPropertiesTo(this.model);
103 this.model.prepareMobModel(livingEntity, f, g, h);
104 this.model.setupAnim(livingEntity, f, g, j, k, l);
105 int color = 16777215;
106 if (livingEntity instanceof TintableEntity ent) {
107 color = ent.getColorForRender();
108 }
109 //? if >1.21 {
110 this.model.renderToBuffer(matrixStack, vertexConsumer, i, LivingEntityRenderer.getOverlayCoords(livingEntity, 0.0f), color);
111 //?} else {
112 /^this.model.renderToBuffer(matrixStack, vertexConsumer, i, LivingEntityRenderer.getOverlayCoords(livingEntity, 0.0f), FastColor.ARGB32.red(color), FastColor.ARGB32.green(color), FastColor.ARGB32.blue(color), 1.0f);
113 ^///?}
114 }
115 *///?}
116}