diff --git a/src/main/java/ru/betterend/entity/model/ModelEntityJello.java b/src/main/java/ru/betterend/entity/model/ModelEntityJello.java index 2bdee3d7..98718938 100644 --- a/src/main/java/ru/betterend/entity/model/ModelEntityJello.java +++ b/src/main/java/ru/betterend/entity/model/ModelEntityJello.java @@ -4,48 +4,102 @@ import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.util.math.MathHelper; import ru.betterend.entity.BlockBenchModel; import ru.betterend.entity.EntityJello; public class ModelEntityJello extends BlockBenchModel { private final ModelPart model; - private final ModelPart tentacles; - private final ModelPart main_cube; + private final ModelPart main_cube_r1; + private final ModelPart tentacle_center_1; + private final ModelPart tentacle_1; + private final ModelPart tentacle_center_2; + private final ModelPart tentacle_2; + private final ModelPart tentacle_center_3; + private final ModelPart tentacle_3; + private final ModelPart tentacle_center_4; + private final ModelPart tentacle_4; + private float scaleY; + private float scaleXZ; public ModelEntityJello() { super(RenderLayer::getEntityTranslucent); textureWidth = 48; textureHeight = 48; - + model = new ModelPart(this); model.setPivot(0.0F, 24.0F, 0.0F); - model.setTextureOffset(16, 17).addCuboid(-4.0F, -7.0F, 4.5F, 8.0F, 7.0F, 0.0F, 0.0F); - model.setTextureOffset(16, 17).addCuboid(-4.0F, -7.0F, -4.5F, 8.0F, 7.0F, 0.0F, 0.0F); model.setTextureOffset(0, 17).addCuboid(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F, 0.0F); - tentacles = new ModelPart(this); - tentacles.setPivot(0.0F, -6.0F, 0.0F); - model.addChild(tentacles); - setRotationAngle(tentacles, 0.0F, -1.5708F, 0.0F); - tentacles.setTextureOffset(16, 17).addCuboid(-4.0F, -1.0F, 4.5F, 8.0F, 7.0F, 0.0F, 0.0F); - tentacles.setTextureOffset(16, 17).addCuboid(-4.0F, -1.0F, -4.5F, 8.0F, 7.0F, 0.0F, 0.0F); + main_cube_r1 = new ModelPart(this); + main_cube_r1.setPivot(0.0F, -14.0F, 0.0F); + model.addChild(main_cube_r1); + setRotationAngle(main_cube_r1, 0.0F, 0.0F, -3.1416F); + main_cube_r1.setTextureOffset(0, 0).addCuboid(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F); - main_cube = new ModelPart(this); - main_cube.setPivot(0.0F, -14.0F, 0.0F); - model.addChild(main_cube); - setRotationAngle(main_cube, 0.0F, 0.0F, -3.1416F); - main_cube.setTextureOffset(0, 0).addCuboid(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F); + tentacle_center_1 = new ModelPart(this); + tentacle_center_1.setPivot(0.0F, 0.0F, 0.0F); + model.addChild(tentacle_center_1); + + + tentacle_1 = new ModelPart(this); + tentacle_1.setPivot(0.0F, -7.0F, 4.5F); + tentacle_center_1.addChild(tentacle_1); + tentacle_1.setTextureOffset(16, 17).addCuboid(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_2 = new ModelPart(this); + tentacle_center_2.setPivot(0.0F, 0.0F, 0.0F); + model.addChild(tentacle_center_2); + setRotationAngle(tentacle_center_2, 0.0F, -1.5708F, 0.0F); + + + tentacle_2 = new ModelPart(this); + tentacle_2.setPivot(0.0F, -7.0F, 4.5F); + tentacle_center_2.addChild(tentacle_2); + tentacle_2.setTextureOffset(16, 17).addCuboid(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_3 = new ModelPart(this); + tentacle_center_3.setPivot(0.0F, 0.0F, 0.0F); + model.addChild(tentacle_center_3); + setRotationAngle(tentacle_center_3, 0.0F, 3.1416F, 0.0F); + + + tentacle_3 = new ModelPart(this); + tentacle_3.setPivot(0.0F, -7.0F, 4.5F); + tentacle_center_3.addChild(tentacle_3); + tentacle_3.setTextureOffset(16, 17).addCuboid(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); + + tentacle_center_4 = new ModelPart(this); + tentacle_center_4.setPivot(0.0F, 0.0F, 0.0F); + model.addChild(tentacle_center_4); + setRotationAngle(tentacle_center_4, 0.0F, 1.5708F, 0.0F); + + + tentacle_4 = new ModelPart(this); + tentacle_4.setPivot(0.0F, -7.0F, 4.5F); + tentacle_center_4.addChild(tentacle_4); + tentacle_4.setTextureOffset(16, 17).addCuboid(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F); } @Override public void setAngles(EntityJello entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + float sin = MathHelper.sin(animationProgress * 0.13F); + scaleY = sin * 0.1F + 0.9F; + scaleXZ = MathHelper.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F; + tentacle_1.pitch = sin * 0.15F; + tentacle_2.pitch = sin * 0.15F; + tentacle_3.pitch = sin * 0.15F; + tentacle_4.pitch = sin * 0.15F; } @Override public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + matrices.push(); + matrices.scale(scaleXZ, scaleY, scaleXZ); model.render(matrices, vertices, light, overlay); + matrices.pop(); } } diff --git a/src/main/java/ru/betterend/entity/render/RendererEntityJello.java b/src/main/java/ru/betterend/entity/render/RendererEntityJello.java index 68e15ead..b1911d21 100644 --- a/src/main/java/ru/betterend/entity/render/RendererEntityJello.java +++ b/src/main/java/ru/betterend/entity/render/RendererEntityJello.java @@ -1,7 +1,9 @@ package ru.betterend.entity.render; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.entity.EntityRenderDispatcher; import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.client.render.entity.feature.EyesFeatureRenderer; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.Identifier; import ru.betterend.BetterEnd; @@ -10,9 +12,16 @@ import ru.betterend.entity.model.ModelEntityJello; public class RendererEntityJello extends MobEntityRenderer { private static final Identifier TEXTURE = BetterEnd.makeID("textures/entity/jello.png"); + private static final RenderLayer GLOW = RenderLayer.getEyes(BetterEnd.makeID("textures/entity/jello_glow.png")); public RendererEntityJello(EntityRenderDispatcher entityRenderDispatcher) { super(entityRenderDispatcher, new ModelEntityJello(), 0.5f); + this.addFeature(new EyesFeatureRenderer(this) { + @Override + public RenderLayer getEyesTexture() { + return GLOW; + } + }); } @Override diff --git a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java index a2354df9..1a8d2386 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java +++ b/src/main/java/ru/betterend/world/biome/BiomeFoggyMushroomland.java @@ -36,6 +36,7 @@ public class BiomeFoggyMushroomland extends EndBiome { .addStructureFeature(ConfiguredStructureFeatures.END_CITY) .addMobSpawn(EndEntities.DRAGONFLY, 80, 2, 5) .addMobSpawn(EndEntities.END_FISH, 20, 2, 5) + .addMobSpawn(EndEntities.JELLO, 10, 3, 8) .addMobSpawn(EndEntities.END_SLIME, 10, 1, 2) .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); } diff --git a/src/main/java/ru/betterend/world/biome/BiomeMegalake.java b/src/main/java/ru/betterend/world/biome/BiomeMegalake.java index 5cb2b1f7..2ad59e09 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeMegalake.java +++ b/src/main/java/ru/betterend/world/biome/BiomeMegalake.java @@ -29,6 +29,7 @@ public class BiomeMegalake extends EndBiome { .addFeature(EndFeatures.MENGER_SPONGE) .addMobSpawn(EndEntities.DRAGONFLY, 50, 1, 3) .addMobSpawn(EndEntities.END_FISH, 50, 3, 8) + .addMobSpawn(EndEntities.JELLO, 50, 3, 8) .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); } } diff --git a/src/main/java/ru/betterend/world/biome/BiomeMegalakeGrove.java b/src/main/java/ru/betterend/world/biome/BiomeMegalakeGrove.java index c258d748..25b74dde 100644 --- a/src/main/java/ru/betterend/world/biome/BiomeMegalakeGrove.java +++ b/src/main/java/ru/betterend/world/biome/BiomeMegalakeGrove.java @@ -32,6 +32,7 @@ public class BiomeMegalakeGrove extends EndBiome { .addFeature(EndFeatures.MENGER_SPONGE) .addMobSpawn(EndEntities.DRAGONFLY, 20, 1, 3) .addMobSpawn(EndEntities.END_FISH, 20, 3, 8) + .addMobSpawn(EndEntities.JELLO, 50, 3, 8) .addMobSpawn(EntityType.ENDERMAN, 10, 1, 2)); } } diff --git a/src/main/resources/assets/betterend/materialmaps/entity/jello.json b/src/main/resources/assets/betterend/materialmaps/entity/jello.json new file mode 100644 index 00000000..b63df8a1 --- /dev/null +++ b/src/main/resources/assets/betterend/materialmaps/entity/jello.json @@ -0,0 +1,12 @@ +{ + "map": [ + { + "predicate": { + "materialPredicate": { + "renderLayerName": "eyes" + } + }, + "material": "canvas:emissive_transform" + } + ] +} diff --git a/src/main/resources/assets/betterend/textures/entity/jello.png b/src/main/resources/assets/betterend/textures/entity/jello.png index f38db9da..83871b42 100644 Binary files a/src/main/resources/assets/betterend/textures/entity/jello.png and b/src/main/resources/assets/betterend/textures/entity/jello.png differ diff --git a/src/main/resources/assets/betterend/textures/entity/jello_glow.png b/src/main/resources/assets/betterend/textures/entity/jello_glow.png new file mode 100644 index 00000000..59ff2735 Binary files /dev/null and b/src/main/resources/assets/betterend/textures/entity/jello_glow.png differ