Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.
at master 100 lines 4.0 kB view raw
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}