From fcf1be070cd93af4445db2b6a58560cb00bb9b9f Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Fri, 15 Jan 2021 13:55:11 +0300 Subject: [PATCH] Moth model --- .../ru/betterend/entity/SilkMothEntity.java | 45 ++++++ .../entity/model/SilkMothEntityModel.java | 137 ++++++++++++++++++ .../entity/render/SilkMothEntityRenderer.java | 21 +++ .../ru/betterend/registry/EndEntities.java | 2 + .../registry/EndEntitiesRenders.java | 2 + .../betterend/textures/entity/silk_moth.png | Bin 0 -> 1221 bytes 6 files changed, 207 insertions(+) create mode 100644 src/main/java/ru/betterend/entity/SilkMothEntity.java create mode 100644 src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java create mode 100644 src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java create mode 100644 src/main/resources/assets/betterend/textures/entity/silk_moth.png diff --git a/src/main/java/ru/betterend/entity/SilkMothEntity.java b/src/main/java/ru/betterend/entity/SilkMothEntity.java new file mode 100644 index 00000000..7c4809f4 --- /dev/null +++ b/src/main/java/ru/betterend/entity/SilkMothEntity.java @@ -0,0 +1,45 @@ +package ru.betterend.entity; + +import net.minecraft.entity.EntityType; +import net.minecraft.entity.Flutterer; +import net.minecraft.entity.passive.AnimalEntity; +import net.minecraft.entity.passive.PassiveEntity; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.World; +import ru.betterend.registry.EndEntities; + +public class SilkMothEntity extends AnimalEntity implements Flutterer { + public SilkMothEntity(EntityType entityType, World world) { + super(entityType, world); + } + + @Override + public boolean isPushable() { + return false; + } + + @Override + protected boolean hasWings() { + return true; + } + + @Override + public boolean handleFallDamage(float fallDistance, float damageMultiplier) { + return false; + } + + @Override + public boolean canClimb() { + return false; + } + + @Override + public boolean hasNoGravity() { + return true; + } + + @Override + public PassiveEntity createChild(ServerWorld world, PassiveEntity entity) { + return EndEntities.SILK_MOTH.create(world); + } +} diff --git a/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java new file mode 100644 index 00000000..c9751121 --- /dev/null +++ b/src/main/java/ru/betterend/entity/model/SilkMothEntityModel.java @@ -0,0 +1,137 @@ +package ru.betterend.entity.model; + +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.SilkMothEntity; + +public class SilkMothEntityModel extends BlockBenchModel { + private final ModelPart legsL; + private final ModelPart cube_r1; + private final ModelPart cube_r2; + private final ModelPart cube_r3; + private final ModelPart legsR; + private final ModelPart cube_r4; + private final ModelPart cube_r5; + private final ModelPart cube_r6; + private final ModelPart head_pivot; + private final ModelPart tendril_r_r1; + private final ModelPart tendril_r_r2; + private final ModelPart bb_main; + private final ModelPart wingR_r1; + private final ModelPart wingL_r1; + private final ModelPart abdomen_r1; + + public SilkMothEntityModel() { + super(RenderLayer::getEntityCutout); + + textureWidth = 64; + textureHeight = 64; + + legsL = new ModelPart(this); + legsL.setPivot(1.5F, 19.9F, -0.45F); + setRotationAngle(legsL, 0.0F, 0.0F, 0.6981F); + + cube_r1 = new ModelPart(this); + cube_r1.setPivot(0.0F, 0.0F, -1.0F); + legsL.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 0.2182F, 0.3927F); + cube_r1.setTextureOffset(0, 13).addCuboid(0.0216F, 0.0F, -0.5976F, 3.0F, 0.0F, 1.0F, 0.0F); + + cube_r2 = new ModelPart(this); + cube_r2.setPivot(0.5F, 0.1F, -0.05F); + legsL.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.0F, 0.3927F); + cube_r2.setTextureOffset(0, 15).addCuboid(0.0F, 0.0F, -0.6F, 3.0F, 0.0F, 1.0F, 0.0F); + + cube_r3 = new ModelPart(this); + cube_r3.setPivot(0.0F, 0.0F, 0.9F); + legsL.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, -0.2182F, 0.3927F); + cube_r3.setTextureOffset(0, 14).addCuboid(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); + + legsR = new ModelPart(this); + legsR.setPivot(-1.5F, 19.9F, -0.55F); + setRotationAngle(legsR, 0.0F, 3.1416F, -0.6545F); + + cube_r4 = new ModelPart(this); + cube_r4.setPivot(0.0F, 0.0F, -1.0F); + legsR.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, 0.2182F, 0.3927F); + cube_r4.setTextureOffset(0, 10).addCuboid(0.0F, 0.0F, -0.5F, 3.0F, 0.0F, 1.0F, 0.0F); + + cube_r5 = new ModelPart(this); + cube_r5.setPivot(0.5F, 0.1F, -0.05F); + legsR.addChild(cube_r5); + setRotationAngle(cube_r5, 0.0F, 0.0F, 0.3927F); + cube_r5.setTextureOffset(0, 11).addCuboid(0.0F, 0.0F, -0.4F, 3.0F, 0.0F, 1.0F, 0.0F); + + cube_r6 = new ModelPart(this); + cube_r6.setPivot(0.0F, 0.0F, 0.9F); + legsR.addChild(cube_r6); + setRotationAngle(cube_r6, 0.0F, -0.2182F, 0.3927F); + cube_r6.setTextureOffset(0, 12).addCuboid(0.0216F, 0.0F, -0.4024F, 3.0F, 0.0F, 1.0F, 0.0F); + + head_pivot = new ModelPart(this); + head_pivot.setPivot(0.0F, 18.0F, -3.0F); + head_pivot.setTextureOffset(15, 10).addCuboid(-1.5F, -1.5F, -2.0F, 3.0F, 3.0F, 3.0F, 0.0F); + + tendril_r_r1 = new ModelPart(this); + tendril_r_r1.setPivot(1.0F, -1.15F, -1.0F); + head_pivot.addChild(tendril_r_r1); + setRotationAngle(tendril_r_r1, 0.0F, 0.0F, 0.3927F); + tendril_r_r1.setTextureOffset(23, 0).addCuboid(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F, true); + + tendril_r_r2 = new ModelPart(this); + tendril_r_r2.setPivot(-1.0F, -1.15F, -1.0F); + head_pivot.addChild(tendril_r_r2); + setRotationAngle(tendril_r_r2, 0.0F, 0.0F, -0.3927F); + tendril_r_r2.setTextureOffset(23, 0).addCuboid(-1.5F, -5.0F, 0.0F, 3.0F, 5.0F, 0.0F, 0.0F); + + bb_main = new ModelPart(this); + bb_main.setPivot(0.0F, 24.0F, 0.0F); + bb_main.setTextureOffset(19, 19).addCuboid(-2.5F, -8.5F, -3.0F, 5.0F, 5.0F, 3.0F, 0.0F); + + wingR_r1 = new ModelPart(this); + wingR_r1.setPivot(-1.5F, -6.5F, 0.5F); + bb_main.addChild(wingR_r1); + setRotationAngle(wingR_r1, 0.0F, 0.0F, 0.3927F); + wingR_r1.setTextureOffset(0, 5).addCuboid(-7.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F, true); + + wingL_r1 = new ModelPart(this); + wingL_r1.setPivot(1.5F, -6.5F, 0.5F); + bb_main.addChild(wingL_r1); + setRotationAngle(wingL_r1, 0.0F, 0.0F, -0.3927F); + wingL_r1.setTextureOffset(0, 5).addCuboid(-2.0F, 0.0F, -3.0F, 9.0F, 0.0F, 5.0F, 0.0F); + + abdomen_r1 = new ModelPart(this); + abdomen_r1.setPivot(1.0F, -3.9F, 0.0F); + bb_main.addChild(abdomen_r1); + setRotationAngle(abdomen_r1, -0.3927F, 0.0F, 0.0F); + abdomen_r1.setTextureOffset(0, 10).addCuboid(-3.0F, -4.0F, -1.0F, 4.0F, 4.0F, 7.0F, 0.0F); + } + + + @Override + public void setAngles(SilkMothEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) { + wingR_r1.roll = MathHelper.sin(animationProgress * 2F) * 0.4F + 0.3927F; + wingL_r1.roll = -wingR_r1.roll; + head_pivot.pitch = MathHelper.sin(animationProgress * 0.03F) * 0.1F; + tendril_r_r1.roll = MathHelper.sin(animationProgress * 0.07F) * 0.2F + 0.3927F; + tendril_r_r2.roll = -tendril_r_r1.roll; + abdomen_r1.pitch = MathHelper.sin(animationProgress * 0.05F) * 0.1F - 0.3927F; + legsR.roll = MathHelper.sin(animationProgress * 0.07F) * 0.1F - 0.6545F; + legsL.roll = -legsR.roll; + } + + + @Override + public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) { + bb_main.render(matrices, vertices, light, overlay); + head_pivot.render(matrices, vertices, light, overlay); + legsL.render(matrices, vertices, light, overlay); + legsR.render(matrices, vertices, light, overlay); + } +} diff --git a/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java new file mode 100644 index 00000000..818520d6 --- /dev/null +++ b/src/main/java/ru/betterend/entity/render/SilkMothEntityRenderer.java @@ -0,0 +1,21 @@ +package ru.betterend.entity.render; + +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.render.entity.MobEntityRenderer; +import net.minecraft.util.Identifier; +import ru.betterend.BetterEnd; +import ru.betterend.entity.SilkMothEntity; +import ru.betterend.entity.model.SilkMothEntityModel; + +public class SilkMothEntityRenderer extends MobEntityRenderer { + private static final Identifier TEXTURE = BetterEnd.makeID("textures/entity/silk_moth.png"); + + public SilkMothEntityRenderer(EntityRenderDispatcher entityRenderDispatcher) { + super(entityRenderDispatcher, new SilkMothEntityModel(), 0.5f); + } + + @Override + public Identifier getTexture(SilkMothEntity entity) { + return TEXTURE; + } +} \ No newline at end of file diff --git a/src/main/java/ru/betterend/registry/EndEntities.java b/src/main/java/ru/betterend/registry/EndEntities.java index 60480491..3da97dc8 100644 --- a/src/main/java/ru/betterend/registry/EndEntities.java +++ b/src/main/java/ru/betterend/registry/EndEntities.java @@ -18,6 +18,7 @@ import ru.betterend.entity.DragonflyEntity; import ru.betterend.entity.EndFishEntity; import ru.betterend.entity.EndSlimeEntity; import ru.betterend.entity.ShadowWalkerEntity; +import ru.betterend.entity.SilkMothEntity; import ru.betterend.util.MHelper; import ru.betterend.util.SpawnHelper; @@ -27,6 +28,7 @@ public class EndEntities { public static final EntityType END_FISH = register("end_fish", SpawnGroup.WATER_AMBIENT, 0.5F, 0.5F, EndFishEntity::new, EndFishEntity.createMobAttributes(), true, MHelper.color(3, 50, 76), MHelper.color(120, 206, 255)); public static final EntityType SHADOW_WALKER = register("shadow_walker", SpawnGroup.MONSTER, 0.6F, 1.95F, ShadowWalkerEntity::new, ShadowWalkerEntity.createMobAttributes(), true, MHelper.color(30, 30, 30), MHelper.color(5, 5, 5)); public static final EntityType CUBOZOA = register("cubozoa", SpawnGroup.WATER_AMBIENT, 0.6F, 1F, CubozoaEntity::new, CubozoaEntity.createMobAttributes(), true, MHelper.color(151, 77, 181), MHelper.color(93, 176, 238)); + public static final EntityType SILK_MOTH = register("silk_moth", SpawnGroup.AMBIENT, 0.6F, 0.6F, SilkMothEntity::new, SilkMothEntity.createMobAttributes(), true, MHelper.color(0, 0, 0), MHelper.color(225, 225, 225)); public static void register() { SpawnHelper.restrictionAir(DRAGONFLY, DragonflyEntity::canSpawn); diff --git a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java index 7c0b0ed5..35d2a367 100644 --- a/src/main/java/ru/betterend/registry/EndEntitiesRenders.java +++ b/src/main/java/ru/betterend/registry/EndEntitiesRenders.java @@ -11,6 +11,7 @@ import ru.betterend.entity.render.RendererEntityDragonfly; import ru.betterend.entity.render.RendererEntityEndFish; import ru.betterend.entity.render.RendererEntityEndSlime; import ru.betterend.entity.render.RendererEntityShadowWalker; +import ru.betterend.entity.render.SilkMothEntityRenderer; public class EndEntitiesRenders { @@ -20,6 +21,7 @@ public class EndEntitiesRenders { register(EndEntities.END_FISH, RendererEntityEndFish::new); register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker::new); register(EndEntities.CUBOZOA, RendererEntityCubozoa::new); + register(EndEntities.SILK_MOTH, SilkMothEntityRenderer::new); } private static void register(EntityType type, Function> render) { diff --git a/src/main/resources/assets/betterend/textures/entity/silk_moth.png b/src/main/resources/assets/betterend/textures/entity/silk_moth.png new file mode 100644 index 0000000000000000000000000000000000000000..d622f9401b3c0dd39d7869a81a5f63544911ebd3 GIT binary patch literal 1221 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEVCnI6aSW-5dm9pFh3)`H`pprps+Uv@9?uk<-t10(v!eW1X?{vV`1$&`>rJaNb{u%d zzUf5X*@e+xAKcA&+&S65+b}R^pY8Ss`Fb}N=v(To>&*LdkJngu-h<}zxuTEP$HpAn zoX^7`!In6Mck_FhS&i25u0fF-6q!E-SKe83g_S$)yI8{1;E0*)*%<^DXqe4h{_Mif zELQ7&yO}49BqT$2?3?+ri8*Ea^ML3qb_SP?4{u1{kNLh`{?5b`Cyn=cH2(ea^ShG> zXG6}zpa*+3%sf~B?_>x#GUMkLAF+Ey(%Ji~n|MXcJYNE3=IrRn)M57cykQ5g|2)4% zH!^q++*v5}CrW;5ytLBq+iBhz+h#E`a~x2SUd#BPUEq5CI<|*urVR`}n>=k8_Sf!w z@;$8jgO=X1Zz2loB`Z#Cd-&V#PhI>Okb4LPlxE1o6ur{;4bsw%fIjwfz3gC(ps~peS6+YQ_59D|FW=Ox=7j|NDm*+9zZF zD>F{GAAMxnO<$&lsI7WH#n$t0iZT>bZxnhXA6N0uwdU8uN}1}n8v7!4iDa(qUG3vi zFj>Muy84#e?`7H&3cqEy3m=&~UytSb*{f~^zKma2F*AB9Ngrb}@MOMpwC9IQ-TSYX z3yk>uYQLDB+xLs_PG7gVy@hgE|GO&oxwG1REW0hhLy|M{ZtC*3@M&Z6SQhkr+=9=_4AE^gl=_p1#{ zQoiIp-ca}FjkSH~hKaYIb!=RFlr81{CY^%Jt)!b1KQ#=6udcuIii9 z`+|d4GD@tqle7Ee@#w|B^$Zi5yISwKFr<7t*;2Mt)y&t1chdeEyBhs>lNT*u@yLAl z!y~gx{^fZ!?*rLenNNNG-OwWu&h&?C%5S#H0;l@J-;>xM?;rN3|uUHy%Yx*4CDlo5LJ?vY}aEK@2?CJkv78ie~vz4eboW5G> zSkEa^f4E&Iu+*(}ZV{W$B?imFoi_iLn>e_-z1zyalxN5FgR3j%Gdi$#S^YNPxnNnX zm1NEn(75QF9S?KKxp`eTc$q^Mtk}$dm|^bb