Ricy40

Untitled

Jun 9th, 2022
894
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.09 KB | None | 0 0
  1. package com.ricy40.caerula.entity.client.model;
  2.  
  3. import com.mojang.blaze3d.vertex.PoseStack;
  4. import com.mojang.blaze3d.vertex.VertexConsumer;
  5. import com.ricy40.caerula.Caerula;
  6. import com.ricy40.caerula.entity.custom.Lula;
  7. import net.minecraft.client.model.EntityModel;
  8. import net.minecraft.client.model.geom.ModelLayerLocation;
  9. import net.minecraft.client.model.geom.ModelPart;
  10. import net.minecraft.client.model.geom.PartPose;
  11. import net.minecraft.client.model.geom.builders.*;
  12. import net.minecraft.resources.ResourceLocation;
  13. import net.minecraft.util.Mth;
  14.  
  15. public class LulaModel<T extends Lula> extends EntityModel<T> {
  16.  
  17.     public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation(Caerula.MOD_ID, "lula_entity"), "main");
  18.     private final ModelPart root;
  19.     private final ModelPart main_body;
  20.     private final ModelPart fin;
  21.     private final ModelPart tentacle1;
  22.     private final ModelPart tentacle2;
  23.     private final ModelPart tentacle3;
  24.     private final ModelPart tentacle4;
  25.     private final ModelPart tentacle5;
  26.     private final ModelPart tentacle6;
  27.     private final ModelPart tentacle7;
  28.     private final ModelPart tentacle8;
  29.     private final ModelPart secondary1;
  30.     private final ModelPart secondary2;
  31.     private final ModelPart secondary3;
  32.     private final ModelPart secondary4;
  33.     private final ModelPart secondary5;
  34.     private final ModelPart secondary6;
  35.     private final ModelPart secondary7;
  36.     private final ModelPart secondary8;
  37.  
  38.     public LulaModel(ModelPart root) {
  39.         this.root = root;
  40.         this.main_body = root.getChild("main_body");
  41.         this.fin = main_body.getChild("fin");
  42.         this.tentacle1 = main_body.getChild("tentacle1");
  43.         this.tentacle2 = main_body.getChild("tentacle2");
  44.         this.tentacle3 = main_body.getChild("tentacle3");
  45.         this.tentacle4 = main_body.getChild("tentacle4");
  46.         this.tentacle5 = main_body.getChild("tentacle5");
  47.         this.tentacle6 = main_body.getChild("tentacle6");
  48.         this.tentacle7 = main_body.getChild("tentacle7");
  49.         this.tentacle8 = main_body.getChild("tentacle8");
  50.         this.secondary1 = tentacle1.getChild("secondary1");
  51.         this.secondary2 = tentacle2.getChild("secondary2");
  52.         this.secondary3 = tentacle3.getChild("secondary3");
  53.         this.secondary4 = tentacle4.getChild("secondary4");
  54.         this.secondary5 = tentacle5.getChild("secondary5");
  55.         this.secondary6 = tentacle6.getChild("secondary6");
  56.         this.secondary7 = tentacle7.getChild("secondary7");
  57.         this.secondary8 = tentacle8.getChild("secondary8");
  58.     }
  59.  
  60.     public static LayerDefinition createBodyLayer() {
  61.         MeshDefinition meshdefinition = new MeshDefinition();
  62.         PartDefinition partdefinition = meshdefinition.getRoot();
  63.  
  64.         PartDefinition main_body = partdefinition.addOrReplaceChild("main_body", CubeListBuilder.create().texOffs(0, 0).addBox(-1.0F, -1.0F, -2.0F, 2.0F, 2.0F, 4.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 23.0F, 0.0F, Mth.PI * -1, Mth.HALF_PI, Mth.PI * -1));
  65.         PartDefinition fin = main_body.addOrReplaceChild("fin", CubeListBuilder.create().texOffs(0, 6).addBox(-2.0F, -1.5F, 0.0F, 4.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 1.0F, 0.0F));
  66.         PartDefinition tentacle1 = main_body.addOrReplaceChild("tentacle1", CubeListBuilder.create().texOffs(8, 0).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(1.0F, 0.5F, -2.0F));
  67.         PartDefinition secondary1 = tentacle1.addOrReplaceChild("secondary1", CubeListBuilder.create().texOffs(12, 0).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  68.         PartDefinition tentacle2 = main_body.addOrReplaceChild("tentacle2", CubeListBuilder.create().texOffs(8, 1).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(1.0F, -0.5F, -2.0F));
  69.         PartDefinition secondary2 = tentacle2.addOrReplaceChild("secondary2", CubeListBuilder.create().texOffs(12, 1).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  70.         PartDefinition tentacle3 = main_body.addOrReplaceChild("tentacle3", CubeListBuilder.create().texOffs(8, -1).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-1.0F, 0.5F, -2.0F));
  71.         PartDefinition secondary3 = tentacle3.addOrReplaceChild("secondary3", CubeListBuilder.create().texOffs(12, -1).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  72.         PartDefinition tentacle4 = main_body.addOrReplaceChild("tentacle4", CubeListBuilder.create().texOffs(8, -2).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-1.0F, -0.5F, -2.0F));
  73.         PartDefinition secondary4 = tentacle4.addOrReplaceChild("secondary4", CubeListBuilder.create().texOffs(12, -2).addBox(0.0F, -0.5F, -2.0F, 0.0F, 1.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  74.         PartDefinition tentacle5 = main_body.addOrReplaceChild("tentacle5", CubeListBuilder.create().texOffs(12, 6).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.5F, 1.0F, -2.0F));
  75.         PartDefinition secondary5 = tentacle5.addOrReplaceChild("secondary5", CubeListBuilder.create().texOffs(12, 9).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  76.         PartDefinition tentacle6 = main_body.addOrReplaceChild("tentacle6", CubeListBuilder.create().texOffs(12, 4).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.5F, 1.0F, -2.0F));
  77.         PartDefinition secondary6 = tentacle6.addOrReplaceChild("secondary6", CubeListBuilder.create().texOffs(10, 4).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  78.         PartDefinition tentacle7 = main_body.addOrReplaceChild("tentacle7", CubeListBuilder.create().texOffs(0, 9).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.5F, -1.0F, -2.0F));
  79.         PartDefinition secondary7 = tentacle7.addOrReplaceChild("secondary7", CubeListBuilder.create().texOffs(0, 6).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  80.         PartDefinition tentacle8 = main_body.addOrReplaceChild("tentacle8", CubeListBuilder.create().texOffs(-2, 9).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(-0.5F, -1.0F, -2.0F));
  81.         PartDefinition secondary8 = tentacle8.addOrReplaceChild("secondary8", CubeListBuilder.create().texOffs(-2, 6).addBox(-0.5F, 0.0F, -2.0F, 1.0F, 0.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, -2.0F));
  82.  
  83.         return LayerDefinition.create(meshdefinition, 16, 16);
  84.     }
  85.  
  86.     @Override
  87.     public void setupAnim(T lula, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
  88.         if (!lula.isFleeing()) {
  89.             float phaseDifference = 0.1f;
  90.             float rot1;
  91.             float rot1Delay;
  92.             float rot2;
  93.             float rot2Delay;
  94.  
  95.             float tick = ageInTicks > 50 ? ageInTicks % 50 : ageInTicks;
  96.             float sec1 = tick / 20 - 0.5f;
  97.  
  98.             if (sec1 >= 0) {
  99.                 float sec2 = sec1 - phaseDifference < 0 ? 0 : sec1 - phaseDifference;
  100.                 float sec1Delay = sec1 - 0.2f < 0 ? 0 : sec1 - 0.2f;
  101.                 float sec2Delay = sec2 - 0.2f < 0 ? 0 : sec2 - 0.2f;
  102.  
  103.                 rot1 = sec1 < 0.5855f ? calculateSCurve(sec1) : calculateExpCurve(sec1 - 0.556f);
  104.                 rot2 = sec2 < 0.5855f ? calculateSCurve(sec2) : calculateExpCurve(sec2 - 0.556f);
  105.                 rot1Delay = sec1Delay < 0.6161f ? calculateOuterSCurve(sec1Delay) : calculateExpCurve(sec1Delay - 0.6f);
  106.                 rot2Delay = sec2Delay < 0.6161f ? calculateOuterSCurve(sec2Delay) : calculateExpCurve(sec2Delay - 0.6f);
  107.  
  108.                 this.tentacle1.yRot = -rot1 * 0.7f;
  109.                 this.secondary1.yRot = -rot1Delay * 0.7f;
  110.                 this.tentacle2.yRot = -rot2 * 0.7f;
  111.                 this.secondary2.yRot = -rot2Delay * 0.7f;
  112.                 this.tentacle3.yRot = rot2 * 0.7f;
  113.                 this.secondary3.yRot = rot2Delay * 0.7f;
  114.                 this.tentacle4.yRot = rot1 * 0.7f;
  115.                 this.secondary4.yRot = rot1Delay * 0.7f;
  116.                 this.tentacle5.xRot = rot1 * 0.7f;
  117.                 this.secondary5.xRot = rot1Delay * 0.7f;
  118.                 this.tentacle6.xRot = rot2 * 0.7f;
  119.                 this.secondary6.xRot = rot2Delay * 0.7f;
  120.                 this.tentacle7.xRot = -rot1 * 0.7f;
  121.                 this.secondary7.xRot = -rot1Delay * 0.7f;
  122.                 this.tentacle8.xRot = -rot2 * 0.7f;
  123.                 this.secondary8.xRot = -rot2Delay * 0.7f;
  124.                 this.fin.yRot = (float) (Math.sin(2.513 * sec1) * 0.05f);
  125.             }
  126.         }
  127.     }
  128.  
  129.     @Override
  130.     public void renderToBuffer(PoseStack poseStack, VertexConsumer vertexConsumer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
  131.         main_body.render(poseStack, vertexConsumer, packedLight, packedOverlay, red, green, blue, alpha);
  132.     }
  133.  
  134.     private float calculateExpCurve(float time) {
  135.         return (float) (Math.pow(Math.E, -2.9 * time) * (Mth.cos(6.8F * time) + 0.5 * Mth.sin(6.8F * time)));
  136.     }
  137.  
  138.     private float calculateSCurve(float time) {
  139.         return (float) ((-0.109 * time) + (10.116 * Math.pow(time, 2)) - (12.022 * Math.pow(time, 3)));
  140.     }
  141.  
  142.     private float calculateOuterSCurve(float time) {
  143.         return (float) (-0.34 +(-0.109 * time) + (11.116 * Math.pow(time, 2)) - (12.022 * Math.pow(time, 3)));
  144.     }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment