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 net.lerariemann.infinity.entity.custom.ChaosSlime;
5import net.lerariemann.infinity.util.InfinityMethods;
6import net.minecraft.client.model.SlimeModel;
7import net.minecraft.client.model.geom.ModelLayers;
8import net.minecraft.client.renderer.MultiBufferSource;
9import net.minecraft.client.renderer.entity.EntityRendererProvider;
10import net.minecraft.client.renderer.entity.MobRenderer;
11//? if >1.21.9 {
12/*import net.minecraft.client.renderer.state.CameraRenderState;
13import net.minecraft.client.renderer.SubmitNodeCollector;
14*///?}
15
16import net.minecraft.resources.ResourceLocation;
17import net.minecraft.util.Mth;
18import org.jetbrains.annotations.NotNull;
19
20public class ChaosSlimeRenderer
21 //? if >1.21.2 {
22 extends MobRenderer<ChaosSlime, TintedRenderState.Slime, SlimeModel>
23 //?} else {
24 /*extends MobRenderer<ChaosSlime, SlimeModel<ChaosSlime>>
25 *///?}
26 {
27 public static final ResourceLocation TEXTURE = InfinityMethods.getId("textures/entity/slime.png");
28
29 public ChaosSlimeRenderer(EntityRendererProvider.Context context) {
30 super(context, new SlimeModel(context.bakeLayer(ModelLayers.SLIME)), 0.25f);
31 this.addLayer(new DimensionalSlimeCoreRenderer(this, context.getBlockRenderDispatcher()));
32 this.addLayer(new TintedLayerRenderer(this, new SlimeModel(context.getModelSet().bakeLayer(ModelLayers.SLIME_OUTER))));
33 }
34
35 //? if >1.21.2 {
36 @Override
37 public ResourceLocation getTextureLocation(TintedRenderState.Slime renderState) {
38 return TEXTURE;
39 }
40
41 @Override
42 public void extractRenderState(ChaosSlime slime, TintedRenderState.Slime state, float f) {
43 super.extractRenderState(slime, state, f);
44 state.core = slime.getCore();
45 state.colour = slime.getColorForRender();
46 state.squish = Mth.lerp(f, slime.oSquish, slime.squish);
47 state.size = slime.getSize();
48 }
49
50 //? if >1.21.8 {
51 /*@Override
52 public void submit(ChaosSlimeRenderState slimeEntity, PoseStack matrixStack, SubmitNodeCollector submitNodeCollector, CameraRenderState cameraRenderState) {
53 this.shadowRadius = 0.25f * (float)slimeEntity.size;
54 }
55 *///?} else {
56 @Override
57 public void render(TintedRenderState.Slime renderState, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) {
58 this.shadowRadius = 0.25f * (float)renderState.size;
59 super.render(renderState, poseStack, bufferSource, packedLight);
60 }
61 //?}
62
63 @Override
64 public TintedRenderState.Slime createRenderState() {
65 return new TintedRenderState.Slime();
66 }
67
68 @Override
69 protected void scale(TintedRenderState.Slime slimeEntity, PoseStack matrixStack) {
70 float g = 0.999f;
71 matrixStack.scale(g, g, g);
72 matrixStack.translate(0.0f, 0.001f, 0.0f);
73 float h = slimeEntity.size;
74 float i = slimeEntity.squish / (g * 0.5F + 1.0F);
75 float j = 1.0f / (i + 1.0f);
76 matrixStack.scale(j * h, 1.0f / j * h, j * h);
77 }
78 //?} else {
79
80 /*@Override
81 public @NotNull ResourceLocation getTextureLocation(ChaosSlime slimeEntity) {
82 return TEXTURE;
83 }
84 @Override
85 public void render(ChaosSlime slimeEntity, float f, float g, PoseStack matrixStack, MultiBufferSource vertexConsumerProvider, int i) {
86 this.shadowRadius = 0.25f * (float)slimeEntity.getSize();
87 super.render(slimeEntity, f, g, matrixStack, vertexConsumerProvider, i);
88 }
89 @Override
90 protected void scale(ChaosSlime slimeEntity, PoseStack matrixStack, float f) {
91 float g = 0.999f;
92 matrixStack.scale(g, g, g);
93 matrixStack.translate(0.0f, 0.001f, 0.0f);
94 float h = slimeEntity.getSize();
95 float i = Mth.lerp(f, slimeEntity.oSquish, slimeEntity.squish) / (h * 0.5f + 1.0f);
96 float j = 1.0f / (i + 1.0f);
97 matrixStack.scale(j * h, 1.0f / j * h, j * h);
98 }
99 *///?}
100}