mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-23 13:37:58 +01:00
Give them legs and they can breath underwater now
This commit is contained in:
parent
2749bab863
commit
22d6874102
4 changed files with 62 additions and 19 deletions
File diff suppressed because one or more lines are too long
|
@ -1,6 +1,9 @@
|
|||
// Made with Blockbench 4.9.4
|
||||
// Exported for Minecraft version 1.17+ for Yarn
|
||||
// Paste this class into your mod and generate all required imports
|
||||
|
||||
package com.example.mod;
|
||||
|
||||
public class mimic extends EntityModel<Entity> {
|
||||
private final ModelPart lid;
|
||||
private final ModelPart tongue_r1;
|
||||
|
@ -8,9 +11,13 @@ public class mimic extends EntityModel<Entity> {
|
|||
private final ModelPart cube_r1;
|
||||
private final ModelPart lower_teeth;
|
||||
private final ModelPart cube_r2;
|
||||
private final ModelPart right_leg;
|
||||
private final ModelPart left_leg;
|
||||
public mimic(ModelPart root) {
|
||||
this.lid = root.getChild("lid");
|
||||
this.lower_teeth = root.getChild("lower_teeth");
|
||||
this.right_leg = root.getChild("right_leg");
|
||||
this.left_leg = root.getChild("left_leg");
|
||||
}
|
||||
public static TexturedModelData getTexturedModelData() {
|
||||
ModelData modelData = new ModelData();
|
||||
|
@ -40,6 +47,10 @@ public class mimic extends EntityModel<Entity> {
|
|||
.uv(0, 0).cuboid(-6.0F, -1.0F, 5.0F, 2.0F, 4.0F, 1.0F, new Dilation(0.0F))
|
||||
.uv(0, 0).cuboid(-9.0F, -1.0F, 5.0F, 2.0F, 4.0F, 1.0F, new Dilation(0.0F))
|
||||
.uv(0, 0).cuboid(-12.0F, -1.0F, 5.0F, 2.0F, 4.0F, 1.0F, new Dilation(0.0F)), ModelTransform.of(0.0F, 0.0F, 0.0F, 0.0F, 1.5708F, 0.0F));
|
||||
|
||||
ModelPartData right_leg = modelPartData.addChild("right_leg", ModelPartBuilder.create().uv(7, 30).cuboid(-2.5F, -1.5F, -3.0F, 5.0F, 7.0F, 6.0F, new Dilation(0.0F)), ModelTransform.pivot(3.5F, 25.5F, 1.0F));
|
||||
|
||||
ModelPartData left_leg = modelPartData.addChild("left_leg", ModelPartBuilder.create().uv(7, 30).mirrored().cuboid(-9.5F, -1.5F, -3.0F, 5.0F, 7.0F, 6.0F, new Dilation(0.0F)).mirrored(false), ModelTransform.pivot(3.5F, 25.5F, 1.0F));
|
||||
return TexturedModelData.of(modelData, 64, 64);
|
||||
}
|
||||
@Override
|
||||
|
@ -49,5 +60,7 @@ public class mimic extends EntityModel<Entity> {
|
|||
public void render(MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay, float red, float green, float blue, float alpha) {
|
||||
lid.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
|
||||
lower_teeth.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
|
||||
right_leg.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
|
||||
left_leg.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
|
||||
}
|
||||
}
|
|
@ -34,6 +34,8 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
|||
|
||||
@Override
|
||||
public void render(MimicEntity entity, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertices, int light) {
|
||||
matrices.push();
|
||||
matrices.translate(0, 0.3F * entity.getPeekAmount(), 0);
|
||||
super.render(entity, yaw, tickDelta, matrices,
|
||||
FloatingArtefactEntityRenderer.getDestructionOverlayProvider(
|
||||
matrices,
|
||||
|
@ -41,6 +43,7 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
|||
1,
|
||||
FloatingArtefactEntityRenderer.getDestructionStage(entity)
|
||||
), light);
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -76,29 +79,34 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
|||
static class MimicModel extends EntityModel<MimicEntity> {
|
||||
private ModelPart part;
|
||||
private ModelPart lid;
|
||||
private ModelPart leftLeg;
|
||||
private ModelPart rightLeg;
|
||||
|
||||
public MimicModel(ModelPart part) {
|
||||
this.part = part;
|
||||
this.lid = part.getChild("lid");
|
||||
this.leftLeg = part.getChild("left_leg");
|
||||
this.rightLeg = part.getChild("right_leg");
|
||||
}
|
||||
|
||||
public static TexturedModelData getTexturedModelData() {
|
||||
ModelData data = new ModelData();
|
||||
ModelPartData root = data.getRoot();
|
||||
ModelPartData lid = root.addChild("lid", ModelPartBuilder.create(), ModelTransform.of(0, 17, -7, -0.829F, 0, -3.1416F));
|
||||
ModelPartData lid = root.addChild("lid", ModelPartBuilder.create(), ModelTransform.of(0, 15, -7, 0, 0, -3.1416F));
|
||||
lid.addChild("tongue", ModelPartBuilder.create()
|
||||
.uv(11, 34).cuboid(-3, -11, 1, 6, 1, 8, Dilation.NONE), ModelTransform.of(0, 6, 9, 0.8F, 0, 0));
|
||||
lid.addChild("upper_teeth", ModelPartBuilder.create()
|
||||
.uv(0, 0).cuboid(-1, -8, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-4, -8, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(2, -8, 5, 2, 4, 1, Dilation.NONE), ModelTransform.pivot(0, 6, 9))
|
||||
//.uv(0, 0).cuboid(-7, 0, 0, 14, 5, 14, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-1, -2, 12, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-4, -2, 12, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(2, -2, 12, 2, 4, 1, Dilation.NONE), ModelTransform.NONE)
|
||||
.addChild("cube_r1", ModelPartBuilder.create()
|
||||
.uv(0, 0).cuboid(-6, -1, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-9, -1, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-12, -1, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-6, -1, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-9, -1, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-12, -1, 5, 2, 4, 1, Dilation.NONE), ModelTransform.of(0, -7, -7, 0, 1.5708F, 0));
|
||||
.uv(0, 0).cuboid(-5, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-8, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-11, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-5, -2, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-8, -2, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-11, -2, 5, 2, 4, 1, Dilation.NONE), ModelTransform.of(0, 0, 0, 0, 1.5708F, 0));
|
||||
root.addChild("lower_teeth", ModelPartBuilder.create()
|
||||
.uv(0, 0).cuboid(-1, -1, 12, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-4, -1, 12, 2, 4, 1, Dilation.NONE)
|
||||
|
@ -110,14 +118,15 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
|||
.uv(0, 0).cuboid(-6, -1, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-9, -1, 5, 2, 4, 1, Dilation.NONE)
|
||||
.uv(0, 0).cuboid(-12, -1, 5, 2, 4, 1, Dilation.NONE), ModelTransform.of(0, 0, 0, 0, 1.5708F, 0));
|
||||
root.addChild("right_leg", ModelPartBuilder.create()
|
||||
.uv(7, 30).cuboid(-2.5F, -1.5F, -3.5F, 5, 7, 6, Dilation.NONE), ModelTransform.pivot(3.5F, 23.5F, 0));
|
||||
root.addChild("left_leg", ModelPartBuilder.create()
|
||||
.uv(7, 30).mirrored().cuboid(-9.5F, -1.5F, -3.5F, 5, 7, 6, Dilation.NONE), ModelTransform.pivot(3.5F, 23.5F, 0));
|
||||
return TexturedModelData.of(data, 64, 64);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void animateModel(MimicEntity entity, float limbAngle, float limbDistance, float tickDelta) {
|
||||
var data = getTexturedModelData();
|
||||
part = data.createModel();
|
||||
lid = part.getChild("lid");
|
||||
ChestBlockEntity tileData = entity.getChestData();
|
||||
if (tileData != null) {
|
||||
var properties = CloudChestBlockEntityRenderer.getProperties(tileData.getCachedState(), tileData);
|
||||
|
@ -129,15 +138,24 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
|||
part.yaw = MathHelper.RADIANS_PER_DEGREE * 180;
|
||||
part.pitch = -entity.getPitch(tickDelta) * MathHelper.RADIANS_PER_DEGREE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAngles(MimicEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
|
||||
rightLeg.resetTransform();
|
||||
leftLeg.resetTransform();
|
||||
rightLeg.pitch = MathHelper.cos(limbAngle * 0.6662F) * 1.4F * limbDistance;
|
||||
leftLeg.pitch = MathHelper.cos(limbAngle * 0.6662F + (float) Math.PI) * 1.4F * limbDistance;
|
||||
float revealPercentage = entity.getPeekAmount();
|
||||
float velocy = (1 - revealPercentage) * -10F;
|
||||
rightLeg.pivotY += velocy;
|
||||
leftLeg.pivotY += velocy;
|
||||
rightLeg.visible = revealPercentage > 0.2F;
|
||||
leftLeg.visible = revealPercentage > 0.2F;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
|
||||
if (lid.pitch != 0) {
|
||||
part.render(matrices, vertices, light, overlay);
|
||||
}
|
||||
part.render(matrices, vertices, light, overlay);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -68,7 +68,7 @@ public class MimicEntity extends PathAwareEntity {
|
|||
}
|
||||
float spawnChance = (difficulty / 3F) * 0.25F;
|
||||
float roll = world.random.nextFloat();
|
||||
System.out.println("Roll mimic: " + roll + " < " + spawnChance);
|
||||
|
||||
if (roll >= spawnChance) {
|
||||
return TypedActionResult.pass(null);
|
||||
}
|
||||
|
@ -112,6 +112,11 @@ public class MimicEntity extends PathAwareEntity {
|
|||
return isAlive();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canBreatheInWater() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public ItemStack getPickBlockStack() {
|
||||
|
@ -121,7 +126,7 @@ public class MimicEntity extends PathAwareEntity {
|
|||
|
||||
@Override
|
||||
protected void initGoals() {
|
||||
goalSelector.add(2, new AttackGoal(this, 1.0, false));
|
||||
goalSelector.add(2, new AttackGoal(this, 0.6F, false));
|
||||
}
|
||||
|
||||
public void setChest(ChestBlock chest) {
|
||||
|
@ -168,6 +173,10 @@ public class MimicEntity extends PathAwareEntity {
|
|||
setMouthOpen(true);
|
||||
}
|
||||
|
||||
public float getPeekAmount() {
|
||||
return MathHelper.clamp((float)getVelocity().lengthSquared() * 50F, 0, 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
@ -183,6 +192,9 @@ public class MimicEntity extends PathAwareEntity {
|
|||
setBodyYaw(MathHelper.floor(getBodyYaw() / 90) * 90);
|
||||
setYaw(MathHelper.floor(getYaw() / 90) * 90);
|
||||
setHeadYaw(MathHelper.floor(getHeadYaw() / 90) * 90);
|
||||
if (getHealth() < getMaxHealth() && getWorld().random.nextInt(20) == 0) {
|
||||
heal(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue