*Cubozoa* Model
This commit is contained in:
parent
9372ecf28f
commit
d8383121e3
3 changed files with 118 additions and 64 deletions
|
@ -2,46 +2,66 @@ 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 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 float scaleY;
|
||||
private float scaleXZ;
|
||||
private final static int TENTACLE_COUNT = 4;
|
||||
|
||||
public CubozoaEntityModel() {
|
||||
super(RenderType::entityTranslucent);
|
||||
|
||||
texWidth = 48;
|
||||
texHeight = 48;
|
||||
|
||||
model = new ModelPart(this);
|
||||
private final ModelPart model;
|
||||
private final ModelPart[] tentacle_center;
|
||||
private final ModelPart[] tentacle;
|
||||
private float scaleY;
|
||||
private float scaleXZ;
|
||||
|
||||
public static LayerDefinition getTexturedModelData() {
|
||||
MeshDefinition modelData = new MeshDefinition();
|
||||
PartDefinition modelPartData = modelData.getRoot();
|
||||
|
||||
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);
|
||||
|
@ -52,7 +72,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
|||
tentacle_center_2.setPos(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.setPos(0.0F, -7.0F, 4.5F);
|
||||
|
@ -63,7 +82,6 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
|||
tentacle_center_3.setPos(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.setPos(0.0F, -7.0F, 4.5F);
|
||||
|
@ -74,31 +92,47 @@ public class CubozoaEntityModel extends BlockBenchModel<CubozoaEntity> {
|
|||
tentacle_center_4.setPos(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.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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setupAnim(CubozoaEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
|
||||
float sin = Mth.sin(animationProgress * 0.13F);
|
||||
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;
|
||||
}
|
||||
tentacle_4.texOffs(16, 17).addBox(-4.0F, 0.0F, 0.0F, 8.0F, 7.0F, 0.0F, 0.0F);*/
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
|
||||
matrices.pushPose();
|
||||
matrices.scale(scaleXZ, scaleY, scaleXZ);
|
||||
model.render(matrices, vertices, light, overlay);
|
||||
matrices.popPose();
|
||||
}
|
||||
/* 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
|
||||
public void setupAnim(CubozoaEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
|
||||
float sin = Mth.sin(animationProgress * 0.13F);
|
||||
scaleY = sin * 0.1F + 0.9F;
|
||||
scaleXZ = Mth.sin(animationProgress * 0.13F + 3.14F) * 0.1F + 0.9F;
|
||||
|
||||
for (int i=1; i<=TENTACLE_COUNT; i++){
|
||||
tentacle[i].xRot = sin * 0.15f;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderToBuffer(PoseStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
|
||||
matrices.pushPose();
|
||||
matrices.scale(scaleXZ, scaleY, scaleXZ);
|
||||
model.render(matrices, vertices, light, overlay);
|
||||
matrices.popPose();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() {
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue