mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 07:17: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
|
// Made with Blockbench 4.9.4
|
||||||
// Exported for Minecraft version 1.17+ for Yarn
|
// Exported for Minecraft version 1.17+ for Yarn
|
||||||
// Paste this class into your mod and generate all required imports
|
// Paste this class into your mod and generate all required imports
|
||||||
|
|
||||||
|
package com.example.mod;
|
||||||
|
|
||||||
public class mimic extends EntityModel<Entity> {
|
public class mimic extends EntityModel<Entity> {
|
||||||
private final ModelPart lid;
|
private final ModelPart lid;
|
||||||
private final ModelPart tongue_r1;
|
private final ModelPart tongue_r1;
|
||||||
|
@ -8,9 +11,13 @@ public class mimic extends EntityModel<Entity> {
|
||||||
private final ModelPart cube_r1;
|
private final ModelPart cube_r1;
|
||||||
private final ModelPart lower_teeth;
|
private final ModelPart lower_teeth;
|
||||||
private final ModelPart cube_r2;
|
private final ModelPart cube_r2;
|
||||||
|
private final ModelPart right_leg;
|
||||||
|
private final ModelPart left_leg;
|
||||||
public mimic(ModelPart root) {
|
public mimic(ModelPart root) {
|
||||||
this.lid = root.getChild("lid");
|
this.lid = root.getChild("lid");
|
||||||
this.lower_teeth = root.getChild("lower_teeth");
|
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() {
|
public static TexturedModelData getTexturedModelData() {
|
||||||
ModelData modelData = new ModelData();
|
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(-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(-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));
|
.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);
|
return TexturedModelData.of(modelData, 64, 64);
|
||||||
}
|
}
|
||||||
@Override
|
@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) {
|
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);
|
lid.render(matrices, vertexConsumer, light, overlay, red, green, blue, alpha);
|
||||||
lower_teeth.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
|
@Override
|
||||||
public void render(MimicEntity entity, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertices, int light) {
|
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,
|
super.render(entity, yaw, tickDelta, matrices,
|
||||||
FloatingArtefactEntityRenderer.getDestructionOverlayProvider(
|
FloatingArtefactEntityRenderer.getDestructionOverlayProvider(
|
||||||
matrices,
|
matrices,
|
||||||
|
@ -41,6 +43,7 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
||||||
1,
|
1,
|
||||||
FloatingArtefactEntityRenderer.getDestructionStage(entity)
|
FloatingArtefactEntityRenderer.getDestructionStage(entity)
|
||||||
), light);
|
), light);
|
||||||
|
matrices.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -76,29 +79,34 @@ public class MimicEntityRenderer extends MobEntityRenderer<MimicEntity, MimicEnt
|
||||||
static class MimicModel extends EntityModel<MimicEntity> {
|
static class MimicModel extends EntityModel<MimicEntity> {
|
||||||
private ModelPart part;
|
private ModelPart part;
|
||||||
private ModelPart lid;
|
private ModelPart lid;
|
||||||
|
private ModelPart leftLeg;
|
||||||
|
private ModelPart rightLeg;
|
||||||
|
|
||||||
public MimicModel(ModelPart part) {
|
public MimicModel(ModelPart part) {
|
||||||
this.part = part;
|
this.part = part;
|
||||||
this.lid = part.getChild("lid");
|
this.lid = part.getChild("lid");
|
||||||
|
this.leftLeg = part.getChild("left_leg");
|
||||||
|
this.rightLeg = part.getChild("right_leg");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TexturedModelData getTexturedModelData() {
|
public static TexturedModelData getTexturedModelData() {
|
||||||
ModelData data = new ModelData();
|
ModelData data = new ModelData();
|
||||||
ModelPartData root = data.getRoot();
|
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()
|
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));
|
.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()
|
lid.addChild("upper_teeth", ModelPartBuilder.create()
|
||||||
.uv(0, 0).cuboid(-1, -8, 5, 2, 4, 1, Dilation.NONE)
|
//.uv(0, 0).cuboid(-7, 0, 0, 14, 5, 14, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-4, -8, 5, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-1, -2, 12, 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(-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()
|
.addChild("cube_r1", ModelPartBuilder.create()
|
||||||
.uv(0, 0).cuboid(-6, -1, -6, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-5, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-9, -1, -6, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-8, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-12, -1, -6, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-11, -2, -6, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-6, -1, 5, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-5, -2, 5, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-9, -1, 5, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-8, -2, 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(-11, -2, 5, 2, 4, 1, Dilation.NONE), ModelTransform.of(0, 0, 0, 0, 1.5708F, 0));
|
||||||
root.addChild("lower_teeth", ModelPartBuilder.create()
|
root.addChild("lower_teeth", ModelPartBuilder.create()
|
||||||
.uv(0, 0).cuboid(-1, -1, 12, 2, 4, 1, Dilation.NONE)
|
.uv(0, 0).cuboid(-1, -1, 12, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-4, -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(-6, -1, 5, 2, 4, 1, Dilation.NONE)
|
||||||
.uv(0, 0).cuboid(-9, -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));
|
.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);
|
return TexturedModelData.of(data, 64, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void animateModel(MimicEntity entity, float limbAngle, float limbDistance, float tickDelta) {
|
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();
|
ChestBlockEntity tileData = entity.getChestData();
|
||||||
if (tileData != null) {
|
if (tileData != null) {
|
||||||
var properties = CloudChestBlockEntityRenderer.getProperties(tileData.getCachedState(), tileData);
|
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.yaw = MathHelper.RADIANS_PER_DEGREE * 180;
|
||||||
part.pitch = -entity.getPitch(tickDelta) * MathHelper.RADIANS_PER_DEGREE;
|
part.pitch = -entity.getPitch(tickDelta) * MathHelper.RADIANS_PER_DEGREE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngles(MimicEntity entity, float limbAngle, float limbDistance, float animationProgress, float headYaw, float headPitch) {
|
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
|
@Override
|
||||||
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
|
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 spawnChance = (difficulty / 3F) * 0.25F;
|
||||||
float roll = world.random.nextFloat();
|
float roll = world.random.nextFloat();
|
||||||
System.out.println("Roll mimic: " + roll + " < " + spawnChance);
|
|
||||||
if (roll >= spawnChance) {
|
if (roll >= spawnChance) {
|
||||||
return TypedActionResult.pass(null);
|
return TypedActionResult.pass(null);
|
||||||
}
|
}
|
||||||
|
@ -112,6 +112,11 @@ public class MimicEntity extends PathAwareEntity {
|
||||||
return isAlive();
|
return isAlive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canBreatheInWater() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public ItemStack getPickBlockStack() {
|
public ItemStack getPickBlockStack() {
|
||||||
|
@ -121,7 +126,7 @@ public class MimicEntity extends PathAwareEntity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initGoals() {
|
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) {
|
public void setChest(ChestBlock chest) {
|
||||||
|
@ -168,6 +173,10 @@ public class MimicEntity extends PathAwareEntity {
|
||||||
setMouthOpen(true);
|
setMouthOpen(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float getPeekAmount() {
|
||||||
|
return MathHelper.clamp((float)getVelocity().lengthSquared() * 50F, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void tick() {
|
public void tick() {
|
||||||
super.tick();
|
super.tick();
|
||||||
|
@ -183,6 +192,9 @@ public class MimicEntity extends PathAwareEntity {
|
||||||
setBodyYaw(MathHelper.floor(getBodyYaw() / 90) * 90);
|
setBodyYaw(MathHelper.floor(getBodyYaw() / 90) * 90);
|
||||||
setYaw(MathHelper.floor(getYaw() / 90) * 90);
|
setYaw(MathHelper.floor(getYaw() / 90) * 90);
|
||||||
setHeadYaw(MathHelper.floor(getHeadYaw() / 90) * 90);
|
setHeadYaw(MathHelper.floor(getHeadYaw() / 90) * 90);
|
||||||
|
if (getHealth() < getMaxHealth() && getWorld().random.nextInt(20) == 0) {
|
||||||
|
heal(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue