*Cubozoa* Model
This commit is contained in:
parent
9372ecf28f
commit
d8383121e3
3 changed files with 118 additions and 64 deletions
|
@ -2,47 +2,67 @@ package ru.betterend.entity.model;
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
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 net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import ru.betterend.entity.CubozoaEntity;
|
import ru.betterend.entity.CubozoaEntity;
|
||||||
|
|
||||||
public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
||||||
|
private final static int TENTACLE_COUNT = 4;
|
||||||
|
|
||||||
private final ModelPart model;
|
private final ModelPart model;
|
||||||
private final ModelPart main_cube_r1;
|
private final ModelPart[] tentacle_center;
|
||||||
private final ModelPart tentacle_center_1;
|
private final ModelPart[] tentacle;
|
||||||
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 scaleY;
|
||||||
private float scaleXZ;
|
private float scaleXZ;
|
||||||
|
|
||||||
public CubozoaEntityModel() {
|
public static LayerDefinition getTexturedModelData() {
|
||||||
super(RenderType::entityTranslucent);
|
MeshDefinition modelData = new MeshDefinition();
|
||||||
|
PartDefinition modelPartData = modelData.getRoot();
|
||||||
|
|
||||||
texWidth = 48;
|
PartDefinition bodyPart = modelPartData.addOrReplaceChild(PartNames.BODY, CubeListBuilder.create()
|
||||||
texHeight = 48;
|
.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 = new ModelPart(this);
|
||||||
model.setPos(0.0F, 24.0F, 0.0F);
|
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);
|
main_cube_r1.setPos(0.0F, -14.0F, 0.0F);
|
||||||
model.addChild(main_cube_r1);
|
model.addChild(main_cube_r1);
|
||||||
setRotationAngle(main_cube_r1, 0.0F, 0.0F, -3.1416F);
|
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);
|
tentacle_center_1.setPos(0.0F, 0.0F, 0.0F);
|
||||||
model.addChild(tentacle_center_1);
|
model.addChild(tentacle_center_1);
|
||||||
|
|
||||||
|
|
||||||
tentacle_1 = new ModelPart(this);
|
tentacle_1 = new ModelPart(this);
|
||||||
tentacle_1.setPos(0.0F, -7.0F, 4.5F);
|
tentacle_1.setPos(0.0F, -7.0F, 4.5F);
|
||||||
tentacle_center_1.addChild(tentacle_1);
|
tentacle_center_1.addChild(tentacle_1);
|
||||||
|
@ -53,7 +73,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
||||||
model.addChild(tentacle_center_2);
|
model.addChild(tentacle_center_2);
|
||||||
setRotationAngle(tentacle_center_2, 0.0F, -1.5708F, 0.0F);
|
setRotationAngle(tentacle_center_2, 0.0F, -1.5708F, 0.0F);
|
||||||
|
|
||||||
|
|
||||||
tentacle_2 = new ModelPart(this);
|
tentacle_2 = new ModelPart(this);
|
||||||
tentacle_2.setPos(0.0F, -7.0F, 4.5F);
|
tentacle_2.setPos(0.0F, -7.0F, 4.5F);
|
||||||
tentacle_center_2.addChild(tentacle_2);
|
tentacle_center_2.addChild(tentacle_2);
|
||||||
|
@ -64,7 +83,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
||||||
model.addChild(tentacle_center_3);
|
model.addChild(tentacle_center_3);
|
||||||
setRotationAngle(tentacle_center_3, 0.0F, 3.1416F, 0.0F);
|
setRotationAngle(tentacle_center_3, 0.0F, 3.1416F, 0.0F);
|
||||||
|
|
||||||
|
|
||||||
tentacle_3 = new ModelPart(this);
|
tentacle_3 = new ModelPart(this);
|
||||||
tentacle_3.setPos(0.0F, -7.0F, 4.5F);
|
tentacle_3.setPos(0.0F, -7.0F, 4.5F);
|
||||||
tentacle_center_3.addChild(tentacle_3);
|
tentacle_center_3.addChild(tentacle_3);
|
||||||
|
@ -79,7 +97,24 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
||||||
tentacle_4 = new ModelPart(this);
|
tentacle_4 = new ModelPart(this);
|
||||||
tentacle_4.setPos(0.0F, -7.0F, 4.5F);
|
tentacle_4.setPos(0.0F, -7.0F, 4.5F);
|
||||||
tentacle_center_4.addChild(tentacle_4);
|
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
|
@Override
|
||||||
|
@ -88,10 +123,9 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
||||||
scaleY = sin * 0.1F + 0.9F;
|
scaleY = sin * 0.1F + 0.9F;
|
||||||
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F;
|
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F;
|
||||||
|
|
||||||
tentacle_1.xRot = sin * 0.15F;
|
for (int i=1; i<=TENTACLE_COUNT; i++){
|
||||||
tentacle_2.xRot = sin * 0.15F;
|
tentacle[i].xRot = sin * 0.15f;
|
||||||
tentacle_3.xRot = sin * 0.15F;
|
}
|
||||||
tentacle_4.xRot = sin * 0.15F;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -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.PoseStack;
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer;
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.MultiBufferSource;
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
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.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.client.renderer.texture.OverlayTexture;
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
@ -13,13 +13,14 @@ import net.minecraft.resources.ResourceLocation;
|
||||||
import ru.betterend.BetterEnd;
|
import ru.betterend.BetterEnd;
|
||||||
import ru.betterend.entity.CubozoaEntity;
|
import ru.betterend.entity.CubozoaEntity;
|
||||||
import ru.betterend.entity.model.CubozoaEntityModel;
|
import ru.betterend.entity.model.CubozoaEntityModel;
|
||||||
|
import ru.betterend.registry.EndEntitiesRenders;
|
||||||
|
|
||||||
public class RendererEntityCubozoa extends MobRenderer<CubozoaEntity, CubozoaEntityModel> {
|
public class RendererEntityCubozoa extends MobRenderer<CubozoaEntity, CubozoaEntityModel> {
|
||||||
private static final ResourceLocation[] TEXTURE = new ResourceLocation[2];
|
private static final ResourceLocation[] TEXTURE = new ResourceLocation[2];
|
||||||
private static final RenderType[] GLOW = new RenderType[2];
|
private static final RenderType[] GLOW = new RenderType[2];
|
||||||
|
|
||||||
public RendererEntityCubozoa(EntityRenderDispatcher entityRenderDispatcher) {
|
public RendererEntityCubozoa(EntityRendererProvider.Context ctx) {
|
||||||
super(entityRenderDispatcher, new CubozoaEntityModel(), 0.5f);
|
super(ctx, new CubozoaEntityModel(ctx.bakeLayer(EndEntitiesRenders.DRAGONFLY_MODEL)), 0.5f);
|
||||||
this.addLayer(new EyesLayer<CubozoaEntity, CubozoaEntityModel>(this) {
|
this.addLayer(new EyesLayer<CubozoaEntity, CubozoaEntityModel>(this) {
|
||||||
@Override
|
@Override
|
||||||
public RenderType renderType() {
|
public RenderType renderType() {
|
|
@ -2,11 +2,16 @@ package ru.betterend.registry;
|
||||||
|
|
||||||
import java.util.function.Function;
|
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.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.EntityRenderDispatcher;
|
||||||
import net.minecraft.client.renderer.entity.MobRenderer;
|
import net.minecraft.client.renderer.entity.MobRenderer;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
import net.minecraft.world.entity.EntityType;
|
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.RendererEntityDragonfly;
|
||||||
import ru.betterend.entity.render.RendererEntityEndFish;
|
import ru.betterend.entity.render.RendererEntityEndFish;
|
||||||
import ru.betterend.entity.render.RendererEntityEndSlime;
|
import ru.betterend.entity.render.RendererEntityEndSlime;
|
||||||
|
@ -14,19 +19,33 @@ import ru.betterend.entity.render.RendererEntityShadowWalker;
|
||||||
import ru.betterend.entity.render.SilkMothEntityRenderer;
|
import ru.betterend.entity.render.SilkMothEntityRenderer;
|
||||||
|
|
||||||
public class EndEntitiesRenders {
|
public class EndEntitiesRenders {
|
||||||
|
public static final ModelLayerLocation DRAGONFLY_MODEL = registerMain("dragonfly");
|
||||||
|
|
||||||
public static void register() {
|
public static void register() {
|
||||||
register(EndEntities.DRAGONFLY, RendererEntityDragonfly::new);
|
register(EndEntities.DRAGONFLY, RendererEntityDragonfly.class);
|
||||||
register(EndEntities.END_SLIME, RendererEntityEndSlime::new);
|
register(EndEntities.END_SLIME, RendererEntityEndSlime.class);
|
||||||
register(EndEntities.END_FISH, RendererEntityEndFish::new);
|
register(EndEntities.END_FISH, RendererEntityEndFish.class);
|
||||||
register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker::new);
|
register(EndEntities.SHADOW_WALKER, RendererEntityShadowWalker.class);
|
||||||
register(EndEntities.CUBOZOA, RendererEntityCubozoa::new);
|
register(EndEntities.CUBOZOA, RendererEntityCubozoa.class);
|
||||||
register(EndEntities.SILK_MOTH, SilkMothEntityRenderer::new);
|
register(EndEntities.SILK_MOTH, SilkMothEntityRenderer.class);
|
||||||
|
|
||||||
|
EntityModelLayerRegistry.registerModelLayer(DRAGONFLY_MODEL, CubozoaEntityModel::getTexturedModelData);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void register(EntityType<?> type, Function<EntityRenderDispatcher, MobRenderer<?, ?>> render) {
|
private static void register(EntityType<?> type, Class<? extends MobRenderer<?, ?>> renderer) {
|
||||||
EntityRendererRegistry.INSTANCE.register(type, (entityRenderDispatcher, context) -> {
|
EntityRendererRegistry.INSTANCE.register(type, (context) -> {
|
||||||
return render.apply(entityRenderDispatcher);
|
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");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue