*Dragonfly* Model

This commit is contained in:
Frank Bauer 2021-06-24 10:09:02 +02:00
parent fd062bf9a9
commit 813880aa19
3 changed files with 144 additions and 62 deletions

View file

@ -4,103 +4,179 @@ import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.ModelPart;
import net.minecraft.client.model.geom.PartNames;
import net.minecraft.client.model.geom.PartPose;
import net.minecraft.client.model.geom.builders.CubeListBuilder;
import net.minecraft.client.model.geom.builders.LayerDefinition;
import net.minecraft.client.model.geom.builders.MeshDefinition;
import net.minecraft.client.model.geom.builders.PartDefinition;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import ru.betterend.entity.DragonflyEntity; import ru.betterend.entity.DragonflyEntity;
public class DragonflyEntityModel extends BlockBenchModel<DragonflyEntity> { public class DragonflyEntityModel extends BlockBenchModel<DragonflyEntity> {
private final ModelPart model; private final ModelPart model;
private final ModelPart head; private final ModelPart head;
private final ModelPart tail; private final ModelPart tail;
private final ModelPart tail_2; private final ModelPart tail_2;
private final ModelPart wing_1; private final ModelPart wing_1;
private final ModelPart wing_2; private final ModelPart wing_2;
private final ModelPart wing_3; private final ModelPart wing_3;
private final ModelPart wing_4; private final ModelPart wing_4;
private final ModelPart legs_1; private final ModelPart legs_1;
private final ModelPart legs_2; private final ModelPart legs_2;
public DragonflyEntityModel() { public static LayerDefinition getTexturedModelData() {
super(RenderType::entityCutout); MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
texWidth = 64; PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
texHeight = 64; .texOffs(0, 0)
.addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F),
model = new ModelPart(this); PartPose.offset(2.0F, 21.5F, -4.0F));
/*model = new ModelPart(this);
model.setPos(2.0F, 21.5F, -4.0F); model.setPos(2.0F, 21.5F, -4.0F);
model.texOffs(0, 0).addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F, 0.0F); model.texOffs(0, 0).addBox(-4.0F, -4.0F, 0.0F, 4.0F, 4.0F, 9.0F, 0.0F);*/
head = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.HEAD, CubeListBuilder.create()
.texOffs(17, 0)
.addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F),
PartPose.offsetAndRotation(-2.0F, -2.0F, 0.0F,
0.3491F, 0.0F, 0.0F));
/*head = new ModelPart(this);
head.setPos(-2.0F, -2.0F, 0.0F); head.setPos(-2.0F, -2.0F, 0.0F);
model.addChild(head); model.addChild(head);
setRotationAngle(head, 0.3491F, 0.0F, 0.0F); setRotationAngle(head, 0.3491F, 0.0F, 0.0F);
head.texOffs(17, 0).addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F, 0.0F); head.texOffs(17, 0).addBox(-1.5F, -1.5F, -2.5F, 3.0F, 3.0F, 3.0F, 0.0F);*/
PartDefinition tailPart = bodyPart.addOrReplaceChild(PartNames.TAIL, CubeListBuilder.create()
.texOffs(26, 0)
.addBox(-1.5F, -1.5F, 0.0F, 3.0F, 3.0F, 7.0F),
PartPose.offset(-2.0F, -2.0F, 9.0F));
/*
tail = new ModelPart(this); tail = new ModelPart(this);
tail.setPos(-2.0F, -2.0F, 9.0F); tail.setPos(-2.0F, -2.0F, 9.0F);
model.addChild(tail); model.addChild(tail);
tail.texOffs(26, 0).addBox(-1.5F, -1.5F, 0.0F, 3.0F, 3.0F, 7.0F, 0.0F); tail.texOffs(26, 0).addBox(-1.5F, -1.5F, 0.0F, 3.0F, 3.0F, 7.0F, 0.0F);
*/
tailPart.addOrReplaceChild(PartNames.TAIL_FIN, CubeListBuilder.create()
.texOffs(36, 0)
.addBox(-1.0F, -1.0F, 0.0F, 2.0F, 2.0F, 10.0F),
PartPose.offset(0.0F, 0.0F, 7.0F));
/*
tail_2 = new ModelPart(this); tail_2 = new ModelPart(this);
tail_2.setPos(0.0F, 0.0F, 7.0F); tail_2.setPos(0.0F, 0.0F, 7.0F);
tail.addChild(tail_2); tail.addChild(tail_2);
tail_2.texOffs(36, 0).addBox(-1.0F, -1.0F, 0.0F, 2.0F, 2.0F, 10.0F, 0.0F); tail_2.texOffs(36, 0).addBox(-1.0F, -1.0F, 0.0F, 2.0F, 2.0F, 10.0F, 0.0F);
*/
wing_1 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.LEFT_WING, CubeListBuilder.create()
.texOffs(0, 13)
.addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F),
PartPose.offset(-2.0F, -4.0F, 4.0F));
/*wing_1 = new ModelPart(this);
wing_1.setPos(-2.0F, -4.0F, 4.0F); wing_1.setPos(-2.0F, -4.0F, 4.0F);
model.addChild(wing_1); model.addChild(wing_1);
wing_1.texOffs(0, 13).addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F); wing_1.texOffs(0, 13).addBox(-15.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F);*/
wing_2 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.RIGHT_WING, CubeListBuilder.create()
.mirror()
.texOffs(0, 13)
.addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F),
PartPose.offset(-2.0F, -4.0F, 4.0F));
/*wing_2 = new ModelPart(this);
wing_2.setPos(-2.0F, -4.0F, 4.0F); wing_2.setPos(-2.0F, -4.0F, 4.0F);
model.addChild(wing_2); model.addChild(wing_2);
wing_2.mirror = true; wing_2.mirror = true;
wing_2.texOffs(0, 13).addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F); wing_2.texOffs(0, 13).addBox(0.0F, 0.0F, -3.0F, 15.0F, 0.0F, 4.0F, 0.0F);*/
wing_3 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.LEFT_WING_BASE, CubeListBuilder.create()
.texOffs(4, 17)
.addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F),
PartPose.offset(-2.0F, -4.0F, 8.0F));
/*wing_3 = new ModelPart(this);
wing_3.setPos(-2.0F, -4.0F, 8.0F); wing_3.setPos(-2.0F, -4.0F, 8.0F);
model.addChild(wing_3); model.addChild(wing_3);
wing_3.texOffs(4, 17).addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F); wing_3.texOffs(4, 17).addBox(-12.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F);*/
wing_4 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.RIGHT_WING_BASE, CubeListBuilder.create()
wing_4.setPos(-2.0F, -4.0F, 8.0F); .mirror()
model.addChild(wing_4); .texOffs(4, 17)
wing_4.mirror = true; .addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F),
wing_4.texOffs(4, 17).addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F); PartPose.offset(-2.0F, -4.0F, 8.0F));
/*wing_4 = new ModelPart(this);
wing_4.setPos(-2.0F, -4.0F, 8.0F);
model.addChild(wing_4);
wing_4.mirror = true;
wing_4.texOffs(4, 17).addBox(0.0F, 0.0F, -2.5F, 12.0F, 0.0F, 3.0F, 0.0F);*/
legs_1 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.LEFT_LEG, CubeListBuilder.create()
legs_1.setPos(-1.0F, 0.0F, 1.0F); .texOffs(50, 1)
model.addChild(legs_1); .addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F),
setRotationAngle(legs_1, 0.0F, 0.0F, -0.5236F); PartPose.offsetAndRotation(-1.0F, 0.0F, 1.0F,
legs_1.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F); 0.0F, 0.0F, -0.5236F));
/*legs_1 = new ModelPart(this);
legs_1.setPos(-1.0F, 0.0F, 1.0F);
model.addChild(legs_1);
setRotationAngle(legs_1, 0.0F, 0.0F, -0.5236F);
legs_1.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F);*/
legs_2 = new ModelPart(this); bodyPart.addOrReplaceChild(PartNames.RIGHT_LEG, CubeListBuilder.create()
legs_2.setPos(-3.0F, 0.0F, 1.0F); .texOffs(50, 1)
model.addChild(legs_2); .addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F),
setRotationAngle(legs_2, 0.0F, 0.0F, 0.5236F); PartPose.offsetAndRotation(-3.0F, 0.0F, 1.0F,
legs_2.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F); 0.0F, 0.0F, 0.5236F));
} /*legs_2 = new ModelPart(this);
legs_2.setPos(-3.0F, 0.0F, 1.0F);
model.addChild(legs_2);
setRotationAngle(legs_2, 0.0F, 0.0F, 0.5236F);
legs_2.texOffs(50, 1).addBox(0.0F, 0.0F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F);*/
@Override /*
public void setupAnim(DragonflyEntity entity, float limbAngle, float limbDistance, float animationProgress, texWidth = 64;
float headYaw, float headPitch) { texHeight = 64;
float progress = animationProgress * 2F; */
return LayerDefinition.create(modelData, 64, 64);
}
wing_1.zRot = 0.3491F + (float) Math.sin(progress) * 0.3491F; public DragonflyEntityModel(ModelPart modelPart) {
wing_2.zRot = -wing_1.zRot; super(RenderType::entityCutout);
wing_3.zRot = 0.3491F + (float) Math.cos(progress) * 0.3491F; model = modelPart.getChild(PartNames.BODY);
wing_4.zRot = -wing_3.zRot; head = modelPart.getChild(PartNames.HEAD);
tail = modelPart.getChild(PartNames.TAIL);
tail_2 = modelPart.getChild(PartNames.TAIL_FIN);
wing_1 = modelPart.getChild(PartNames.LEFT_WING);
wing_2 = modelPart.getChild(PartNames.RIGHT_WING);
wing_3 = modelPart.getChild(PartNames.LEFT_WING_TIP);
wing_4 = modelPart.getChild(PartNames.RIGHT_WING_BASE);
legs_1 = modelPart.getChild(PartNames.LEFT_LEG);
legs_2 = modelPart.getChild(PartNames.RIGHT_LEG);
}
progress = animationProgress * 0.05F; @Override
public void setupAnim(DragonflyEntity entity, float limbAngle, float limbDistance, float animationProgress,
float headYaw, float headPitch) {
float progress = animationProgress * 2F;
head.xRot = 0.3491F + (float) Math.sin(progress * 0.7F) * 0.1F; wing_1.zRot = 0.3491F + (float) Math.sin(progress) * 0.3491F;
tail.xRot = (float) Math.cos(progress) * 0.05F - 0.05F; wing_2.zRot = -wing_1.zRot;
tail_2.xRot = -tail.xRot * 1.5F;
}
@Override wing_3.zRot = 0.3491F + (float) Math.cos(progress) * 0.3491F;
public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, wing_4.zRot = -wing_3.zRot;
float green, float blue, float alpha) {
model.render(matrices, vertices, light, overlay); progress = animationProgress * 0.05F;
}
head.xRot = 0.3491F + (float) Math.sin(progress * 0.7F) * 0.1F;
tail.xRot = (float) Math.cos(progress) * 0.05F - 0.05F;
tail_2.xRot = -tail.xRot * 1.5F;
}
@Override
public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red,
float green, float blue, float alpha) {
model.render(matrices, vertices, light, overlay);
}
} }

View file

@ -2,19 +2,22 @@ package ru.betterend.entity.render;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher; import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.client.renderer.entity.MobRenderer; import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.client.renderer.entity.layers.EyesLayer; import net.minecraft.client.renderer.entity.layers.EyesLayer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.entity.DragonflyEntity; import ru.betterend.entity.DragonflyEntity;
import ru.betterend.entity.model.CubozoaEntityModel;
import ru.betterend.entity.model.DragonflyEntityModel; import ru.betterend.entity.model.DragonflyEntityModel;
import ru.betterend.registry.EndEntitiesRenders;
public class RendererEntityDragonfly extends MobRenderer<DragonflyEntity, DragonflyEntityModel> { public class RendererEntityDragonfly extends MobRenderer<DragonflyEntity, DragonflyEntityModel> {
private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/dragonfly.png"); private static final ResourceLocation TEXTURE = BetterEnd.makeID("textures/entity/dragonfly.png");
private static final RenderType GLOW = RenderType.eyes(BetterEnd.makeID("textures/entity/dragonfly_glow.png")); private static final RenderType GLOW = RenderType.eyes(BetterEnd.makeID("textures/entity/dragonfly_glow.png"));
public RendererEntityDragonfly(EntityRenderDispatcher entityRenderDispatcher) { public RendererEntityDragonfly(EntityRendererProvider.Context ctx) {
super(entityRenderDispatcher, new DragonflyEntityModel(), 0.5f); super(ctx, new DragonflyEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f);
this.addLayer(new EyesLayer<DragonflyEntity, DragonflyEntityModel>(this) { this.addLayer(new EyesLayer<DragonflyEntity, DragonflyEntityModel>(this) {
@Override @Override
public RenderType renderType() { public RenderType renderType() {

View file

@ -8,6 +8,7 @@ import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.entity.model.CubozoaEntityModel; import ru.betterend.entity.model.CubozoaEntityModel;
import ru.betterend.entity.model.DragonflyEntityModel;
import ru.betterend.entity.model.EndSlimeEntityModel; import ru.betterend.entity.model.EndSlimeEntityModel;
import ru.betterend.entity.render.RendererEntityCubozoa; import ru.betterend.entity.render.RendererEntityCubozoa;
import ru.betterend.entity.render.RendererEntityDragonfly; import ru.betterend.entity.render.RendererEntityDragonfly;
@ -18,6 +19,7 @@ import ru.betterend.entity.render.SilkMothEntityRenderer;
public class EndEntitiesRenders { public class EndEntitiesRenders {
public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa"); public static final ModelLayerLocation CUBOZOA_MODEL = registerMain("cubozoa");
public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly");
public static final ModelLayerLocation END_SLIME_SHELL_MODEL = registerMain("endslime_shell"); public static final ModelLayerLocation END_SLIME_SHELL_MODEL = registerMain("endslime_shell");
public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime"); public static final ModelLayerLocation END_SLIME_MODEL = registerMain("endslime");
@ -29,9 +31,10 @@ public class EndEntitiesRenders {
register(EndEntities.CUBOZOA, RendererEntityCubozoa.class); register(EndEntities.CUBOZOA, RendererEntityCubozoa.class);
register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class); register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class);
EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData); EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, DragonflyEntityModel::getTexturedModelData);
EntityModelLayerRegistry.registerModelLayer(END_SLIME_SHELL_MODEL, EndSlimeEntityModel::getShellOnlyTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_SHELL_MODEL, EndSlimeEntityModel::getShellOnlyTexturedModelData);
EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData); EntityModelLayerRegistry.registerModelLayer(END_SLIME_MODEL, EndSlimeEntityModel::getCompleteTexturedModelData);
EntityModelLayerRegistry.registerModelLayer(CUBOZOA_MODEL, CubozoaEntityModel::getTexturedModelData);
} }
private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) { private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) {