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