*Cubozoa* Model

This commit is contained in:
Frank Bauer 2021-06-23 23:21:16 +02:00
parent 9372ecf28f
commit d8383121e3
3 changed files with 118 additions and 64 deletions

View file

@ -2,47 +2,67 @@ package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
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.util.Mth;
import ru.betterend.entity.CubozoaEntity;
public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
private final static int TENTACLE_COUNT = 4;
private final ModelPart model;
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 final ModelPart[] tentacle_center;
private final ModelPart[] tentacle;
private float scaleY;
private float scaleXZ;
public CubozoaEntityModel() {
super(RenderType::entityTranslucent);
public static LayerDefinition getTexturedModelData() {
MeshDefinition modelData = new MeshDefinition();
PartDefinition modelPartData = modelData.getRoot();
texWidth = 48;
texHeight = 48;
model = new ModelPart(this);
PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
.texOffs(0, 17)
.addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F), PartPose.offset(0.0F, 24.0F, 0.0F));
/*model = new ModelPart(this);
model.setPos(0.0F, 24.0F, 0.0F);
model.texOffs(0, 17).addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F, 0.0F);
model.texOffs(0, 17).addBox(-2.0F, -12.5F, -2.0F, 4.0F, 4.0F, 4.0F, 0.0F);*/
main_cube_r1 = new ModelPart(this);
bodyPart.addOrReplaceChild("main_cube_r1", CubeListBuilder.create()
.texOffs(0, 0)
.addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F), PartPose.offsetAndRotation(0.0F, -14.0F, 0.0F, 0.0F, 0.0F, -3.1416F));
/*main_cube_r1 = new ModelPart(this);
main_cube_r1.setPos(0.0F, -14.0F, 0.0F);
model.addChild(main_cube_r1);
setRotationAngle(main_cube_r1, 0.0F, 0.0F, -3.1416F);
main_cube_r1.texOffs(0, 0).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F);
main_cube_r1.texOffs(0, 0).addBox(-5.0F, -7.0F, -5.0F, 10.0F, 7.0F, 10.0F, 0.0F);*/
float[] angles = {0, (float)Math.PI/-2, (float)Math.PI, (float)Math.PI/2};
tentacle_center_1 = new ModelPart(this);
for (int i=1; i<=TENTACLE_COUNT; i++){
PartDefinition tentaclePart = bodyPart
.addOrReplaceChild("tentacle_center_"+i,
CubeListBuilder.create(),
PartPose.offsetAndRotation(
0.0F, 0.0F, 0.0F,
0.0F, -1.5708F, 0.0F
)
);
tentaclePart.addOrReplaceChild("tentacle_"+i, CubeListBuilder.create()
.texOffs(16, 17)
.addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F),
PartPose.offset(0.0F, -7.0F, 4.5F));
}
/*tentacle_center_1 = new ModelPart(this);
tentacle_center_1.setPos(0.0F, 0.0F, 0.0F);
model.addChild(tentacle_center_1);
tentacle_1 = new ModelPart(this);
tentacle_1.setPos(0.0F, -7.0F, 4.5F);
tentacle_center_1.addChild(tentacle_1);
@ -53,7 +73,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
model.addChild(tentacle_center_2);
setRotationAngle(tentacle_center_2, 0.0F, -1.5708F, 0.0F);
tentacle_2 = new ModelPart(this);
tentacle_2.setPos(0.0F, -7.0F, 4.5F);
tentacle_center_2.addChild(tentacle_2);
@ -64,7 +83,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
model.addChild(tentacle_center_3);
setRotationAngle(tentacle_center_3, 0.0F, 3.1416F, 0.0F);
tentacle_3 = new ModelPart(this);
tentacle_3.setPos(0.0F, -7.0F, 4.5F);
tentacle_center_3.addChild(tentacle_3);
@ -79,7 +97,24 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
tentacle_4 = new ModelPart(this);
tentacle_4.setPos(0.0F, -7.0F, 4.5F);
tentacle_center_4.addChild(tentacle_4);
tentacle_4.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F);
tentacle_4.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F);*/
/* texWidth = 48;
texHeight = 48; */
return LayerDefinition.create(modelData, 48, 48);
}
public CubozoaEntityModel(ModelPart modelPart) {
super(RenderType::entityTranslucent);
tentacle = new ModelPart[TENTACLE_COUNT];
tentacle_center = new ModelPart[TENTACLE_COUNT];
model = modelPart.getChild(PartNames.BODY);
for (int i=1; i<=TENTACLE_COUNT; i++){
tentacle_center[i] = model.getChild("tentacle_center_"+i);
tentacle[i] = tentacle_center[i].getChild("tentacle_"+i);
}
}
@Override
@ -88,10 +123,9 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
scaleY = sin * 0.1F + 0.9F;
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F;
tentacle_1.xRot = sin * 0.15F;
tentacle_2.xRot = sin * 0.15F;
tentacle_3.xRot = sin * 0.15F;
tentacle_4.xRot = sin * 0.15F;
for (int i=1; i<=TENTACLE_COUNT; i++){
tentacle[i].xRot = sin * 0.15f;
}
}
@Override

View file

@ -1,11 +1,11 @@
package ru.betterend.entity.render;
package ru.betterend.entity.model;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
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.layers.EyesLayer;
import net.minecraft.client.renderer.texture.OverlayTexture;
@ -13,13 +13,14 @@ import net.minecraft.resources.ResourceLocation;
import ru.betterend.BetterEnd;
import ru.betterend.entity.CubozoaEntity;
import ru.betterend.entity.model.CubozoaEntityModel;
import ru.betterend.registry.EndEntitiesRenders;
public class RendererEntityCubozoa extends MobRenderer<CubozoaEntity, CubozoaEntityModel> {
private static final ResourceLocation[] TEXTURE = new ResourceLocation[2];
private static final RenderType[] GLOW = new RenderType[2];
public RendererEntityCubozoa(EntityRenderDispatcher entityRenderDispatcher) {
super(entityRenderDispatcher, new CubozoaEntityModel(), 0.5f);
public RendererEntityCubozoa(EntityRendererProvider.Context ctx) {
super(ctx, new CubozoaEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f);
this.addLayer(new EyesLayer<CubozoaEntity, CubozoaEntityModel>(this) {
@Override
public RenderType renderType() {

View file

@ -2,11 +2,16 @@ package ru.betterend.registry;
import java.util.function.Function;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.api.client.rendereregistry.v1.EntityRendererRegistry;
import net.minecraft.client.model.geom.ModelLayerLocation;
import net.minecraft.client.renderer.entity.EntityRenderDispatcher;
import net.minecraft.client.renderer.entity.MobRenderer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import ru.betterend.entity.render.RendererEntityCubozoa;
import ru.betterend.BetterEnd;
import ru.betterend.entity.model.CubozoaEntityModel;
import ru.betterend.entity.model.RendererEntityCubozoa;
import ru.betterend.entity.render.RendererEntityDragonfly;
import ru.betterend.entity.render.RendererEntityEndFish;
import ru.betterend.entity.render.RendererEntityEndSlime;
@ -14,19 +19,33 @@ import ru.betterend.entity.render.RendererEntityShadowWalker;
import ru.betterend.entity.render.SilkMothEntityRenderer;
public class EndEntitiesRenders {
public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly");
public static void register() {
register(EndEntities.DRAGONFLY, RendererEntityDragonfly::new);
register(EndEntities.END_SLIME, RendererEntityEndSlime::new);
register(EndEntities.END_FISH, RendererEntityEndFish::new);
register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker::new);
register(EndEntities.CUBOZOA, RendererEntityCubozoa::new);
register(EndEntities.SILK_MOTH, SilkMothEntityRenderer::new);
register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class);
register(EndEntities.END_SLIME, RendererEntityEndSlime.class);
register(EndEntities.END_FISH, RendererEntityEndFish.class);
register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker.class);
register(EndEntities.CUBOZOA, RendererEntityCubozoa.class);
register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class);
EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, CubozoaEntityModel::getTexturedModelData);
}
private static void register(EntityType<?> type, Function<EntityRenderDispatcher, MobRenderer<?, ?>> render) {
EntityRendererRegistry.INSTANCE.register(type, (entityRenderDispatcher, context) -> {
return render.apply(entityRenderDispatcher);
private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) {
EntityRendererRegistry.INSTANCE.register(type, (context) -> {
MobRenderer render = null;
try {
render = renderer.getConstructor(context.getClass()).newInstance(context);
}
catch (Exception e) {
e.printStackTrace();
}
return render;
});
}
private static ModelLayerLocation registerMain(String id){
return new ModelLayerLocation(new ResourceLocation(BetterEnd.MOD_ID, id), "main");
}
}