Inspired by 2020's April Fools' 20w14infinite Snapshot, this mod brings endless randomly generated dimensions into Minecraft.

creepers and skeletons fixed

Lera 6e8629df 2fa6ddc7

+187 -34
+136 -11
src/main/java/net/lerariemann/infinity/entity/client/ChaosCreeperRenderer.java
··· 1 1 package net.lerariemann.infinity.entity.client; 2 2 3 + import com.mojang.blaze3d.vertex.PoseStack; 4 + import net.lerariemann.infinity.entity.custom.ChaosCreeper; 3 5 import net.lerariemann.infinity.util.InfinityMethods; 4 - import net.minecraft.client.model.CreeperModel; 6 + import net.minecraft.client.renderer.entity.*; 5 7 import net.minecraft.client.model.geom.ModelLayers; 6 - import net.minecraft.client.renderer.entity.CreeperRenderer; 7 - import net.minecraft.client.renderer.entity.EntityRendererProvider; 8 8 //? if >1.21.4 { 9 - import net.minecraft.client.renderer.entity.state.CreeperRenderState; 10 - //?} 9 + import net.minecraft.client.renderer.entity.layers.EnergySwirlLayer; 10 + import net.minecraft.client.model.EntityModel; 11 + import net.minecraft.client.model.geom.EntityModelSet; 12 + import net.minecraft.client.model.geom.ModelPart; 13 + import net.minecraft.client.model.geom.PartPose; 14 + import net.minecraft.client.model.geom.builders.*; 15 + //?} else { 16 + /*import net.minecraft.world.entity.monster.Creeper; 17 + import net.minecraft.client.model.CreeperModel; 18 + *///?} 11 19 import net.minecraft.resources.ResourceLocation; 12 - import net.minecraft.world.entity.monster.Creeper; 20 + import net.minecraft.util.Mth; 13 21 14 - public class ChaosCreeperRenderer extends CreeperRenderer { 15 - private static final ResourceLocation TEXTURE2 = InfinityMethods.getId("textures/entity/creeper.png"); 22 + public class ChaosCreeperRenderer extends 23 + //? if >1.21.2 { 24 + MobRenderer<ChaosCreeper, TintedRenderState.Creeper, ChaosCreeperRenderer.Model> 25 + //?} else { 26 + /*CreeperRenderer 27 + *///?} 28 + { 29 + public static final ResourceLocation TEXTURE = InfinityMethods.getId("textures/entity/creeper.png"); 16 30 17 31 @Override 18 32 public ResourceLocation getTextureLocation( 19 33 //? if >1.21.2 { 20 - CreeperRenderState 34 + TintedRenderState.Creeper 21 35 //?} else { 22 36 /*Creeper 23 37 *///?} 24 38 creeperEntity) { 25 - return TEXTURE2; 39 + return TEXTURE; 26 40 } 27 41 28 42 public ChaosCreeperRenderer(EntityRendererProvider.Context context) { 29 - super(context); 43 + //? if <1.21.2 { 44 + /*super(context); 30 45 this.addLayer(new TintedLayerRenderer<>(this, new CreeperModel(context.bakeLayer(ModelLayers.CREEPER)))); 46 + *///?} else { 47 + super(context, new ChaosCreeperRenderer.Model(context.bakeLayer(ModelLayers.CREEPER)), 0.5F); 48 + this.addLayer(new PowerLayer(this, context.getModelSet())); 49 + this.addLayer(new TintedLayerRenderer<>(this, new ChaosCreeperRenderer.Model(context.bakeLayer(ModelLayers.CREEPER)))); 50 + //?} 31 51 } 52 + 53 + //? if >1.21.2 { 54 + public TintedRenderState.Creeper createRenderState() { 55 + return new TintedRenderState.Creeper(); 56 + } 57 + 58 + public void extractRenderState(ChaosCreeper creeper, TintedRenderState.Creeper state, float f) { 59 + super.extractRenderState(creeper, state, f); 60 + state.swelling = creeper.getSwelling(f); 61 + state.isPowered = creeper.isPowered(); 62 + state.colour = creeper.getColorForRender(); 63 + } 64 + 65 + //mojang decided abstract creepers should not exist and now i have to suffer 66 + protected void scale(TintedRenderState.Creeper state, PoseStack poseStack) { 67 + float f = state.swelling; 68 + float f1 = 1.0F + Mth.sin(f * 100.0F) * f * 0.01F; 69 + f = Mth.clamp(f, 0.0F, 1.0F); 70 + f *= f; 71 + f *= f; 72 + float f2 = (1.0F + f * 0.4F) * f1; 73 + float f3 = (1.0F + f * 0.1F) / f1; 74 + poseStack.scale(f2, f3, f2); 75 + } 76 + 77 + public float getWhiteOverlayProgress(TintedRenderState.Creeper state) { 78 + float f = state.swelling; 79 + return (int)(f * 10.0F) % 2 == 0 ? 0.0F : Mth.clamp(f, 0.5F, 1.0F); 80 + } 81 + 82 + public class PowerLayer extends EnergySwirlLayer<TintedRenderState.Creeper, ChaosCreeperRenderer.Model> { 83 + private static final ResourceLocation POWER_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/creeper/creeper_armor.png"); 84 + private final ChaosCreeperRenderer.Model model; 85 + 86 + public PowerLayer(RenderLayerParent<TintedRenderState.Creeper, ChaosCreeperRenderer.Model> renderer, EntityModelSet modelSet) { 87 + super(renderer); 88 + this.model = new ChaosCreeperRenderer.Model(modelSet.bakeLayer(ModelLayers.CREEPER_ARMOR)); 89 + } 90 + 91 + protected boolean isPowered(TintedRenderState.Creeper renderState) { 92 + return renderState.isPowered; 93 + } 94 + 95 + @Override 96 + protected float xOffset(float tickCount) { 97 + return tickCount * 0.01F; 98 + } 99 + 100 + @Override 101 + protected ResourceLocation getTextureLocation() { 102 + return POWER_LOCATION; 103 + } 104 + 105 + protected ChaosCreeperRenderer.Model model() { 106 + return this.model; 107 + } 108 + } 109 + 110 + public static class Model extends EntityModel<TintedRenderState.Creeper> { 111 + private final ModelPart head; 112 + private final ModelPart rightHindLeg; 113 + private final ModelPart leftHindLeg; 114 + private final ModelPart rightFrontLeg; 115 + private final ModelPart leftFrontLeg; 116 + private static final int Y_OFFSET = 6; 117 + 118 + public Model(ModelPart root) { 119 + super(root); 120 + this.head = root.getChild("head"); 121 + this.leftHindLeg = root.getChild("right_hind_leg"); 122 + this.rightHindLeg = root.getChild("left_hind_leg"); 123 + this.leftFrontLeg = root.getChild("right_front_leg"); 124 + this.rightFrontLeg = root.getChild("left_front_leg"); 125 + } 126 + 127 + public static LayerDefinition createBodyLayer(CubeDeformation cubeDeformation) { 128 + MeshDefinition meshdefinition = new MeshDefinition(); 129 + PartDefinition partdefinition = meshdefinition.getRoot(); 130 + partdefinition.addOrReplaceChild( 131 + "head", CubeListBuilder.create().texOffs(0, 0).addBox(-4.0F, -8.0F, -4.0F, 8.0F, 8.0F, 8.0F, cubeDeformation), PartPose.offset(0.0F, 6.0F, 0.0F) 132 + ); 133 + partdefinition.addOrReplaceChild( 134 + "body", CubeListBuilder.create().texOffs(16, 16).addBox(-4.0F, 0.0F, -2.0F, 8.0F, 12.0F, 4.0F, cubeDeformation), PartPose.offset(0.0F, 6.0F, 0.0F) 135 + ); 136 + CubeListBuilder cubelistbuilder = CubeListBuilder.create().texOffs(0, 16).addBox(-2.0F, 0.0F, -2.0F, 4.0F, 6.0F, 4.0F, cubeDeformation); 137 + partdefinition.addOrReplaceChild("right_hind_leg", cubelistbuilder, PartPose.offset(-2.0F, 18.0F, 4.0F)); 138 + partdefinition.addOrReplaceChild("left_hind_leg", cubelistbuilder, PartPose.offset(2.0F, 18.0F, 4.0F)); 139 + partdefinition.addOrReplaceChild("right_front_leg", cubelistbuilder, PartPose.offset(-2.0F, 18.0F, -4.0F)); 140 + partdefinition.addOrReplaceChild("left_front_leg", cubelistbuilder, PartPose.offset(2.0F, 18.0F, -4.0F)); 141 + return LayerDefinition.create(meshdefinition, 64, 32); 142 + } 143 + 144 + public void setupAnim(TintedRenderState.Creeper renderState) { 145 + super.setupAnim(renderState); 146 + this.head.yRot = renderState.yRot * (float) (Math.PI / 180.0); 147 + this.head.xRot = renderState.xRot * (float) (Math.PI / 180.0); 148 + float f = renderState.walkAnimationSpeed; 149 + float f1 = renderState.walkAnimationPos; 150 + this.rightHindLeg.xRot = Mth.cos(f1 * 0.6662F) * 1.4F * f; 151 + this.leftHindLeg.xRot = Mth.cos(f1 * 0.6662F + (float) Math.PI) * 1.4F * f; 152 + this.rightFrontLeg.xRot = Mth.cos(f1 * 0.6662F + (float) Math.PI) * 1.4F * f; 153 + this.leftFrontLeg.xRot = Mth.cos(f1 * 0.6662F) * 1.4F * f; 154 + } 155 + } 156 + //?} 32 157 }
+41 -7
src/main/java/net/lerariemann/infinity/entity/client/ChaosSkeletonRenderer.java
··· 1 1 package net.lerariemann.infinity.entity.client; 2 2 3 - //? if =1.21.1 { 4 - /*import net.lerariemann.infinity.entity.custom.ChaosSkeleton; 5 - *///?} 3 + import net.lerariemann.infinity.entity.custom.ChaosSkeleton; 4 + import net.lerariemann.infinity.util.VersionMethods; 6 5 import net.minecraft.client.model.SkeletonModel; 7 6 import net.minecraft.client.model.geom.ModelLayers; 7 + //? if >1.21.1 { 8 + import net.minecraft.client.renderer.entity.AbstractSkeletonRenderer; 9 + //?} else { 10 + /*import net.minecraft.client.renderer.entity.SkeletonRenderer; 11 + *///?} 8 12 import net.minecraft.client.renderer.entity.EntityRendererProvider; 9 - import net.minecraft.client.renderer.entity.SkeletonRenderer; 13 + import net.minecraft.resources.ResourceLocation; 10 14 11 - public class ChaosSkeletonRenderer extends SkeletonRenderer 15 + public class ChaosSkeletonRenderer extends 16 + //? if <1.21.1 { 17 + /*SkeletonRenderer 18 + *///?} 12 19 //? if =1.21.1 { 13 - /*<ChaosSkeleton> 20 + /*SkeletonRenderer<ChaosSkeleton> 14 21 *///?} 22 + //? if >1.21.1 { 23 + AbstractSkeletonRenderer<ChaosSkeleton, TintedRenderState.Skeleton> 24 + //?} 15 25 { 26 + public static final ResourceLocation TEXTURE = VersionMethods.id("textures/entity/skeleton/skeleton.png"); 27 + 16 28 public ChaosSkeletonRenderer(EntityRendererProvider.Context context) { 17 - super(context); 29 + //? if <1.21.2 { 30 + /*super(context); 31 + *///?} else { 32 + super(context, ModelLayers.SKELETON, ModelLayers.SKELETON_INNER_ARMOR, ModelLayers.SKELETON_OUTER_ARMOR); 33 + //?} 18 34 this.addLayer(new TintedLayerRenderer<>(this, new SkeletonModel<>(context.bakeLayer(ModelLayers.SKELETON)))); 19 35 } 36 + 37 + //? if >1.21.2 { 38 + @Override 39 + public TintedRenderState.Skeleton createRenderState() { 40 + return new TintedRenderState.Skeleton(); 41 + } 42 + 43 + @Override 44 + public void extractRenderState(ChaosSkeleton skeleton, TintedRenderState.Skeleton state, float f) { 45 + super.extractRenderState(skeleton, state, f); 46 + state.colour = skeleton.getColorForRender(); 47 + } 48 + 49 + @Override 50 + public ResourceLocation getTextureLocation(TintedRenderState.Skeleton renderState) { 51 + return TEXTURE; 52 + } 53 + //?} 20 54 }
+2 -3
src/main/java/net/lerariemann/infinity/entity/client/ChaosSlimeRenderer.java
··· 24 24 /*<ChaosSlime, SlimeModel<ChaosSlime>> 25 25 *///?} 26 26 { 27 - private static final ResourceLocation TEXTURE = InfinityMethods.getId("textures/entity/slime.png"); 27 + public static final ResourceLocation TEXTURE = InfinityMethods.getId("textures/entity/slime.png"); 28 28 29 29 public ChaosSlimeRenderer(EntityRendererProvider.Context context) { 30 30 super(context, new SlimeModel(context.bakeLayer(ModelLayers.SLIME)), 0.25f); 31 31 this.addLayer(new DimensionalSlimeCoreRenderer(this, context.getBlockRenderDispatcher())); 32 32 this.addLayer(new TintedLayerRenderer(this, new SlimeModel(context.getModelSet().bakeLayer(ModelLayers.SLIME_OUTER)))); 33 33 } 34 - //? if >1.21.2 { 35 34 35 + //? if >1.21.2 { 36 36 @Override 37 37 public ResourceLocation getTextureLocation(TintedRenderState.Slime renderState) { 38 38 return TEXTURE; ··· 53 53 this.shadowRadius = 0.25f * (float)slimeEntity.size; 54 54 } 55 55 *///?} else { 56 - 57 56 @Override 58 57 public void render(TintedRenderState.Slime renderState, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) { 59 58 this.shadowRadius = 0.25f * (float)renderState.size;
+1 -4
src/main/java/net/lerariemann/infinity/entity/client/TintedLayerRenderer.java
··· 18 18 /*import net.minecraft.util.FastColor; 19 19 *///?} else { 20 20 import net.minecraft.client.renderer.entity.state.LivingEntityRenderState; 21 + import net.minecraft.util.ARGB; 21 22 //?} 22 23 import net.minecraft.resources.ResourceLocation; 23 - import net.minecraft.util.ARGB; 24 24 import net.minecraft.world.entity.Mob; 25 25 26 26 public class TintedLayerRenderer<T extends ··· 83 83 } 84 84 VertexConsumer vertexConsumer = vertexConsumerProvider.getBuffer(bl ? 85 85 RenderType.outline(texture) : RenderType.entityTranslucent(texture)); 86 - // TODO 1.21.3 these were probably necessary 87 - // this.getContextModel().copyStateTo(this.model); 88 - // this.model.animateModel(livingEntity, f, g, h); 89 86 this.model.setupAnim(livingEntity); 90 87 int color = 16777215; 91 88 if (livingEntity instanceof TintedRenderState ent) {
+7 -9
src/main/java/net/lerariemann/infinity/entity/client/TintedRenderState.java
··· 1 1 package net.lerariemann.infinity.entity.client; 2 2 3 3 //? if >1.21.2 { 4 - import net.lerariemann.infinity.util.InfinityMethods; 5 - import net.lerariemann.infinity.util.VersionMethods; 4 + import net.minecraft.client.renderer.entity.state.CreeperRenderState; 5 + import net.minecraft.client.renderer.entity.state.SkeletonRenderState; 6 6 import net.minecraft.client.renderer.entity.state.SlimeRenderState; 7 7 import net.minecraft.resources.ResourceLocation; 8 8 import net.minecraft.world.level.block.state.BlockState; ··· 17 17 class Slime extends SlimeRenderState implements TintedRenderState { 18 18 public BlockState core; 19 19 public int colour; 20 - public float squish; 21 - public int size = 1; 22 20 23 21 @Override 24 22 public int getColour() { ··· 27 25 28 26 @Override 29 27 public ResourceLocation getTexture() { 30 - return InfinityMethods.getId("textures/entity/slime.png"); 28 + return ChaosSlimeRenderer.TEXTURE; 31 29 } 32 30 } 33 31 34 - class Creeper extends SlimeRenderState implements TintedRenderState { 32 + class Creeper extends CreeperRenderState implements TintedRenderState { 35 33 public int colour; 36 34 37 35 @Override ··· 41 39 42 40 @Override 43 41 public ResourceLocation getTexture() { 44 - return InfinityMethods.getId("textures/entity/creeper.png"); 42 + return ChaosCreeperRenderer.TEXTURE; 45 43 } 46 44 } 47 45 48 - class Skeleton extends SlimeRenderState implements TintedRenderState { 46 + class Skeleton extends SkeletonRenderState implements TintedRenderState { 49 47 public int colour; 50 48 51 49 @Override ··· 55 53 56 54 @Override 57 55 public ResourceLocation getTexture() { 58 - return VersionMethods.id("textures/entity/skeleton/skeleton.png"); 56 + return ChaosSkeletonRenderer.TEXTURE; 59 57 } 60 58 } 61 59 }