diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java index 76d644ea..b962a563 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/BasiliskRenderer.java @@ -2,7 +2,12 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.BasiliskModel; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.entity.EntityRendererProvider; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.renderer.GeoEntityRenderer; public class BasiliskRenderer extends GeoEntityRenderer { @@ -11,4 +16,19 @@ public class BasiliskRenderer extends GeoEntityRenderer { super(context, new BasiliskModel()); this.shadowRadius = 1.0F; } + + @Override + public void preRender(PoseStack poseStack, BasiliskEntity animatable, BakedGeoModel model, + @Nullable MultiBufferSource bufferSource, @Nullable VertexConsumer buffer, + boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) { + super.preRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour); + if (animatable.isDeadOrDying()) { + poseStack.translate(0.0D, -0.35D, 0.0D); + } + } + + @Override + protected float getDeathMaxRotation(BasiliskEntity animatable) { + return 0.0F; + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java index 627fb719..6d2454d8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/TriffidEntity.java @@ -17,6 +17,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; +import net.minecraft.tags.DamageTypeTags; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; @@ -226,6 +227,9 @@ public class TriffidEntity extends Monster implements GeoEntity { if (this.isInvulnerableTo(source)) { return false; } + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= 0.33333334F; + } return super.hurt(source, amount); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java index 9c2c0eae..47d84958 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/basilisk/BasiliskEntity.java @@ -44,17 +44,29 @@ import software.bernie.geckolib.animation.PlayState; import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.animation.keyframe.event.builtin.AutoPlayingSoundKeyframeHandler; import software.bernie.geckolib.util.GeckoLibUtil; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; import java.util.UUID; import java.util.function.Predicate; public class BasiliskEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = + SynchedEntityData.defineId(BasiliskEntity.class, EntityDataSerializers.INT); private static final byte ATTACK_ENTITY_EVENT = 4; private static final int ATTACK_ANIM_TICKS = 18; + private static final int DEATH_TICKS = 25; + + private static final int ANIM_IDLE = 0; + private static final int ANIM_WALK = 1; + private static final int ANIM_ATTACK = 2; + private static final int ANIM_DEATH = 3; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); private static final int HISS_COOLDOWN_TICKS = 600; private static final double GAZE_RANGE = 12.0D; @@ -82,6 +94,12 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.xpReward = 50; } + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ANIMATION_STATE, ANIM_IDLE); + } + public static AttributeSupplier.Builder createAttributes() { return Monster.createMonsterAttributes() .add(Attributes.MAX_HEALTH, 150.0D) @@ -149,12 +167,18 @@ public class BasiliskEntity extends Monster implements GeoEntity { this.attackAnimTicks--; } + if (this.isDeadOrDying()) { + this.updateAnimationState(); + return; + } + if (this.level().isClientSide) { return; } this.tickPlayerPetrification(); this.tickPreyPetrification(); + this.updateAnimationState(); } private void tickPlayerPetrification() { @@ -346,9 +370,15 @@ public class BasiliskEntity extends Monster implements GeoEntity { } private PlayState mainController(AnimationState state) { - if (this.attackAnimTicks > 0) { + if (this.getAnimationState() == ANIM_DEATH) { + return state.setAndContinue(DEATH_ANIM); + } + if (this.getAnimationState() == ANIM_ATTACK) { return state.setAndContinue(ATTACK_ANIM); } + if (this.getAnimationState() == ANIM_WALK) { + return state.setAndContinue(WALK_ANIM); + } if (this.getTarget() != null || this.hissChargeTimer > 0 || this.pendingTargetId != null) { return state.setAndContinue(WALK_ANIM); } @@ -367,11 +397,64 @@ public class BasiliskEntity extends Monster implements GeoEntity { public void handleEntityEvent(byte id) { if (id == ATTACK_ENTITY_EVENT) { this.attackAnimTicks = ATTACK_ANIM_TICKS; + this.setAnimationState(ANIM_ATTACK); return; } super.handleEntityEvent(id); } + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.attackAnimTicks = 0; + this.hissChargeTimer = 0; + this.pendingTargetId = null; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + if (this.deathTime >= DEATH_TICKS) { + this.remove(RemovalReason.KILLED); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + if (this.attackAnimTicks > 0) { + this.setAnimationState(ANIM_ATTACK); + return; + } + if (this.getTarget() != null || this.hissChargeTimer > 0 || this.pendingTargetId != null) { + this.setAnimationState(ANIM_WALK); + return; + } + if (this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D) { + this.setAnimationState(ANIM_WALK); + return; + } + this.setAnimationState(ANIM_IDLE); + } + + private int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setAnimationState(int state) { + this.entityData.set(ANIMATION_STATE, state); + } + @Override public boolean canAttack(LivingEntity target) { if (target instanceof Player player) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java index 84146269..e00b85fe 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/nightmare/NightmareEntity.java @@ -1,6 +1,5 @@ package com.craisinlord.antarchy.content.entity.nightmare; -import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.AntarchyTags; @@ -15,7 +14,6 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; -import net.minecraft.sounds.SoundEvents; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; @@ -33,6 +31,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.FlyingMoveControl; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.MeleeAttackGoal; import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; @@ -43,7 +42,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.levelgen.Heightmap; -import net.minecraft.sounds.SoundSource; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -57,10 +55,10 @@ import software.bernie.geckolib.animation.RawAnimation; import software.bernie.geckolib.util.GeckoLibUtil; import java.util.EnumSet; -import java.util.Comparator; import java.util.List; public class NightmareEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(NightmareEntity.class, EntityDataSerializers.BOOLEAN); @@ -72,6 +70,7 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final String INTRO_ROAR_USED_KEY = "IntroRoarUsed"; private static final String TARGETLESS_TICKS_KEY = "TargetlessTicks"; private static final String ANIMATION_STATE_KEY = "AnimationState"; + private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; private static final int ANIM_FLY = 2; @@ -81,6 +80,7 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int ANIM_DEATH = 6; private static final int ANIM_TAKEOFF = 7; private static final int ANIM_FLY_DAMAGED = 8; + private static final int ATTACK_TOTAL_TICKS = 18; private static final int ATTACK_DAMAGE_TICK = 9; private static final int INTRO_ROAR_TICKS = 32; @@ -89,64 +89,46 @@ public class NightmareEntity extends Monster implements GeoEntity { private static final int TARGET_RESET_TICKS = 60; private static final int DREAD_TICKS = 160; private static final int WEAKNESS_TICKS = 100; + private static final int BLOCK_BREAK_TICKS = 10; + private static final int FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; + private static final double PATROL_SPEED = 0.34D; private static final double COMBAT_FLIGHT_SPEED = 0.58D; private static final double GROUND_APPROACH_SPEED = 0.82D; - private static final int FLIGHT_MODE_COMMIT_TICKS = 80; private static final double ATTACK_START_RANGE_SQR = 42.25D; - private static final double GROUND_APPROACH_RANGE_SQR = 16.0D * 16.0D; private static final double ATTACK_REACH_RADIUS = 2.65D; private static final double ATTACK_COMMIT_HORIZONTAL_RANGE = 4.2D; - private static final double ATTACK_COMMIT_VERTICAL_RANGE = 2.8D; - private static final double FLIGHT_REENGAGE_RANGE_SQR = 10.0D * 10.0D; - private static final double FLIGHT_RETURN_RANGE_SQR = 20.0D * 20.0D; - private static final double CLOSE_APPROACH_RANGE_SQR = 6.0D * 6.0D; - private static final int FLIGHT_CEILING_CLEARANCE_BLOCKS = 4; - private static final int BLOCK_BREAK_TICKS = 10; + private static final double FLIGHT_ENGAGE_RANGE_SQR = 100.0D; + private static final double FLIGHT_DISENGAGE_RANGE_SQR = 36.0D; + private static final double ROAR_RETRY_DISTANCE_SQR = 400.0D; private static final double PATROL_AIR_MIN_HEIGHT = 1.15D; private static final double PATROL_AIR_HEIGHT_SPAN = 0.85D; - private static final double COMBAT_FLIGHT_BASE_HEIGHT = 0.75D; - private static final double COMBAT_FLIGHT_HEIGHT_SPAN = 0.70D; - private static final double ROAR_RETRY_DISTANCE_SQR = 20.0D * 20.0D; private static final float AIR_PATROL_CHANCE = 0.2F; - private static final long SPAWN_DEBUG_LOG_INTERVAL = 200L; + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("Idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); - private static final RawAnimation TAKEOFF_ANIM = RawAnimation.begin().thenPlay("animation"); + private static final RawAnimation TAKEOFF_ANIM = RawAnimation.begin().thenPlay("animation").thenLoop("fly"); private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); private static final RawAnimation FLY_DAMAGED_ANIM = RawAnimation.begin().thenLoop("fly_damaged"); - private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); - private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("fly_attack"); - private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar"); - private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack").thenLoop("Idle"); + private static final RawAnimation FLY_ATTACK_ANIM = RawAnimation.begin().thenPlay("fly_attack").thenLoop("fly"); + private static final RawAnimation ROAR_ANIM = RawAnimation.begin().thenPlay("roar").thenLoop("Idle"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death").thenLoop("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); - @Nullable - private Vec3 patrolTarget; + + @Nullable private Vec3 patrolTarget; private int patrolRetargetTicks; - private int strafeRetargetTicks; private int attackCooldown; private int attackAnimationTicks; private int roarTicks; private int roarCooldown; private int targetlessTicks; + private int airborneTicks; + private int wingFlapCooldown; + private int blockBreakCooldown; private boolean attackHitApplied; private boolean introRoarUsed; - private boolean groundCombatMode; - private float orbitDirection = 1.0F; - private double currentOrbitAngle = 0.0D; - private int airborneWithTargetTicks = 0; - private int airborneTicks = 0; - private int ceilingAvoidanceTicks = 0; - private int flightModeCommitTicks = 0; - private int flightTargetRetargetTicks = 0; - private int wingFlapCooldown = 0; - private int blockBreakCooldown = 0; - @Nullable - private Vec3 cachedFlightTarget; - @Nullable - private Vec3 cachedFlightTargetAnchor; - private static long lastSpawnDebugLogTick = Long.MIN_VALUE; public NightmareEntity(EntityType entityType, Level level) { super(entityType, level); @@ -169,8 +151,7 @@ public class NightmareEntity extends Monster implements GeoEntity { boolean sturdy = level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); boolean posEmpty = level.isEmptyBlock(pos); boolean aboveEmpty = level.isEmptyBlock(pos.above()); - boolean allowed = level.getDifficulty() != Difficulty.PEACEFUL && sturdy && posEmpty && aboveEmpty; - return allowed; + return level.getDifficulty() != Difficulty.PEACEFUL && sturdy && posEmpty && aboveEmpty; } @Override @@ -182,10 +163,13 @@ public class NightmareEntity extends Monster implements GeoEntity { @Override protected void registerGoals() { -this.goalSelector.addGoal(4, new NightmareCombatMovementGoal()); - this.goalSelector.addGoal(5, new NightmareAirPatrolGoal()); -this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(1, new NightmareRoarGoal()); + this.goalSelector.addGoal(2, new NightmareAttackAnimationGoal()); + this.goalSelector.addGoal(3, new NightmareFlyToTargetGoal()); + this.goalSelector.addGoal(4, new NightmareMeleeGoal()); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(7, new NightmareWanderGoal()); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, this::canTargetEntity)); @@ -198,7 +182,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); private PlayState mainAnimController(AnimationState state) { state.getController().setAnimationSpeed(this.getAnimationState() == ANIM_FLY ? 0.45D : 1.0D); - return switch (this.getAnimationState()) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); case ANIM_TAKEOFF -> state.setAndContinue(TAKEOFF_ANIM); @@ -239,27 +222,24 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.airborneTicks = this.onGround() ? 0 : this.airborneTicks + 1; - if (this.attackCooldown > 0) { - this.attackCooldown--; - } - if (this.roarCooldown > 0) { - this.roarCooldown--; - } - if (this.blockBreakCooldown > 0) { - this.blockBreakCooldown--; - } + if (this.attackCooldown > 0) this.attackCooldown--; + if (this.roarCooldown > 0) this.roarCooldown--; + if (this.blockBreakCooldown > 0) this.blockBreakCooldown--; LivingEntity target = this.getTarget(); if (!this.canTargetEntity(target)) { this.setTarget(null); target = null; } - if (this.tickCount % 10 == 0) { - LivingEntity bestTarget = this.findBestAttackTarget(target); - if (bestTarget != target) { - this.setTarget(bestTarget); - target = bestTarget; + + if (target == null) { + this.targetlessTicks++; + if (this.targetlessTicks >= TARGET_RESET_TICKS) { + this.introRoarUsed = false; } + } else { + this.targetlessTicks = 0; + this.getLookControl().setLookAt(target, 35.0F, 20.0F); } if (this.isDeadOrDying()) { @@ -268,37 +248,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); return; } - if (target == null) { - this.tickTargetless(); - this.updateAnimationState(); - this.updateFlightRotation(); - return; - } - - this.targetlessTicks = 0; - this.getLookControl().setLookAt(target, 35.0F, 20.0F); - - if (this.isRoaring()) { - this.tickRoar(target); - this.updateAnimationState(); - this.updateFlightRotation(); - return; - } - - if (this.attackAnimationTicks > 0) { - this.tickAttack(target); - this.updateAnimationState(); - this.updateFlightRotation(); - return; - } - - if (target instanceof Player && this.shouldStartRoar(target)) { - this.startRoar(); - this.updateAnimationState(); - this.updateFlightRotation(); - return; - } - this.updateAnimationState(); this.updateFlightRotation(); } @@ -311,16 +260,12 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.setDeltaMovement(this.getDeltaMovement().scale(this.onGround() ? 0.88D : 0.91D)); return; } - super.travel(travelVector); } @Override public boolean doHurtTarget(Entity target) { - if (!(target instanceof LivingEntity livingTarget)) { - return false; - } - + if (!(target instanceof LivingEntity livingTarget)) return false; boolean hurt = this.level() instanceof ServerLevel serverLevel ? livingTarget.hurt(AntarchyDamageSources.nightmareMauling(serverLevel, this), (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE)) : super.doHurtTarget(target); @@ -426,11 +371,9 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); @Override protected void tickDeath() { this.deathTime++; - if (this.deathTime == 1) { this.setAnimationState(ANIM_DEATH); } - if (this.deathTime >= DEATH_TICKS) { this.remove(RemovalReason.KILLED); this.dropExperience(this); @@ -453,128 +396,11 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.entityData.set(ANIMATION_STATE, animationState); } - private void tickTargetless() { - this.targetlessTicks++; - if (this.targetlessTicks >= TARGET_RESET_TICKS) { - this.introRoarUsed = false; - this.currentOrbitAngle = this.random.nextDouble() * Math.PI * 2.0D; - } - - if (this.attackAnimationTicks > 0) { - this.attackAnimationTicks = 0; - this.attackHitApplied = false; - } - if (this.isRoaring()) { - this.roarTicks = 0; - this.setRoaring(false); - } - - this.groundCombatMode = false; - this.ceilingAvoidanceTicks = 0; - this.flightModeCommitTicks = 0; - this.flightTargetRetargetTicks = 0; - this.cachedFlightTarget = null; - this.cachedFlightTargetAnchor = null; - } - - private void tickPatrolMovement() { - this.strafeRetargetTicks = 0; - if (this.patrolRetargetTicks-- <= 0 || this.patrolTarget == null || this.position().distanceToSqr(this.patrolTarget) < 4.0D) { - this.patrolRetargetTicks = 30 + this.random.nextInt(30); - this.patrolTarget = this.findPatrolTarget(); - } - - if (this.patrolTarget != null) { - this.getMoveControl().setWantedPosition(this.patrolTarget.x, this.patrolTarget.y, this.patrolTarget.z, PATROL_SPEED); - } - } - - private void tickCombatMovement(LivingEntity target) { - this.patrolTarget = null; - if (this.ceilingAvoidanceTicks > 0) { - this.ceilingAvoidanceTicks--; - } - - boolean shouldFly = this.resolveCombatFlightMode(target); - double distanceSqr = this.distanceToSqr(target); - double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); - double verticalDistance = Math.abs(target.getY() - this.getY()); - this.airborneWithTargetTicks = this.onGround() ? 0 : this.airborneWithTargetTicks + 1; - - if (this.attackCooldown <= 0 - && this.canStartAttackOn(target)) { - this.startAttack(target); - return; - } - - this.faceTowardTarget(target, shouldFly ? 12.0F : 18.0F); - - if (shouldFly && this.isTooCloseToCeiling()) { - shouldFly = false; - this.groundCombatMode = true; - this.flightModeCommitTicks = FLIGHT_MODE_COMMIT_TICKS; - this.ceilingAvoidanceTicks = 20; - this.setDeltaMovement(this.getDeltaMovement().add(0.0D, -0.15D, 0.0D)); - } - - if (!shouldFly) { - this.groundCombatMode = true; - this.flightTargetRetargetTicks = 0; - this.cachedFlightTarget = null; - this.cachedFlightTargetAnchor = null; - if (this.isHoveringAboveTarget(target) && this.tryBreakBlocksToTarget(target)) { - return; - } - Vec3 combatTarget = this.createGroundApproachTarget(target); - this.getMoveControl().setWantedPosition( - combatTarget.x, - combatTarget.y, - combatTarget.z, - GROUND_APPROACH_SPEED - ); - return; - } - - this.groundCombatMode = false; - this.flightModeCommitTicks = FLIGHT_MODE_COMMIT_TICKS; - - if (distanceSqr <= CLOSE_APPROACH_RANGE_SQR - || horizontalDistanceSqr > ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE - || verticalDistance > ATTACK_COMMIT_VERTICAL_RANGE) { - Vec3 combatTarget = this.createStrikeFlightTarget(target); - this.getMoveControl().setWantedPosition( - combatTarget.x, - combatTarget.y, - combatTarget.z, - COMBAT_FLIGHT_SPEED - ); - return; - } - - if (this.strafeRetargetTicks-- <= 0) { - this.strafeRetargetTicks = 40 + this.random.nextInt(40); - } - - Vec3 combatTarget = this.createCombatFlightTarget(target); - this.getMoveControl().setWantedPosition( - combatTarget.x, - combatTarget.y, - combatTarget.z, - COMBAT_FLIGHT_SPEED - ); - } - private boolean shouldStartRoar(LivingEntity target) { - if (!this.onGround() || this.roarCooldown > 0 || !this.hasLineOfSight(target)) { - return false; - } - + if (!this.onGround() || this.roarCooldown > 0 || !this.hasLineOfSight(target)) return false; double distanceSqr = this.distanceToSqr(target); - if (distanceSqr > ROAR_RETRY_DISTANCE_SQR || !this.isInFront(target.position(), -0.1D)) { - return false; - } - - boolean pressureWindow = distanceSqr > ATTACK_START_RANGE_SQR && distanceSqr <= GROUND_APPROACH_RANGE_SQR; + if (distanceSqr > ROAR_RETRY_DISTANCE_SQR || !this.isInFront(target.position(), -0.1D)) return false; + boolean pressureWindow = distanceSqr > ATTACK_START_RANGE_SQR; boolean wounded = this.getHealth() <= this.getMaxHealth() * 0.5F; return pressureWindow || wounded; } @@ -599,12 +425,10 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.getNavigation().stop(); this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); - if (target != null) { this.getLookControl().setLookAt(target, 35.0F, 20.0F); this.faceTowardTarget(target, 14.0F); } - if (--this.roarTicks <= 0) { this.roarTicks = 0; this.setRoaring(false); @@ -617,7 +441,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.attackHitApplied = false; this.attackCooldown = ATTACK_TOTAL_TICKS + 12; this.getNavigation().stop(); - Vec3 lunge = target.getEyePosition().subtract(this.getEyePosition()); if (lunge.lengthSqr() > 1.0E-4D) { Vec3 normalized = lunge.normalize(); @@ -629,19 +452,16 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); private void tickAttack(@Nullable LivingEntity target) { this.getNavigation().stop(); this.setDeltaMovement(this.getDeltaMovement().scale(0.93D)); - if (target != null) { this.getLookControl().setLookAt(target, 35.0F, 20.0F); this.faceTowardTarget(target, 20.0F); } - int elapsed = ATTACK_TOTAL_TICKS - this.attackAnimationTicks; if (!this.attackHitApplied && elapsed >= ATTACK_DAMAGE_TICK) { this.attackHitApplied = true; this.playNightmareBiteSound(); this.performAttackHit(); } - if (--this.attackAnimationTicks <= 0) { this.attackAnimationTicks = 0; } @@ -651,25 +471,15 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); AABB hitBox = this.getBoundingBox() .inflate(ATTACK_REACH_RADIUS, 1.5D, ATTACK_REACH_RADIUS) .expandTowards(this.getViewVector(1.0F).scale(1.9D)); - - List victims = this.level().getEntitiesOfClass( - LivingEntity.class, - hitBox, - this::canTargetEntity - ); - + List victims = this.level().getEntitiesOfClass(LivingEntity.class, hitBox, this::canTargetEntity); float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); for (LivingEntity victim : victims) { - if (!this.isInFront(victim.position(), -0.25D)) { - continue; - } - + if (!this.isInFront(victim.position(), -0.25D)) continue; if (victim.hurt(this.nightmareDamageSource(), damage)) { this.applyNightmareStrikeEffects(victim); this.knockAway(victim, 1.15D, 0.3D); } } - if (this.level() instanceof ServerLevel serverLevel) { serverLevel.sendParticles(ParticleTypes.SOUL_FIRE_FLAME, this.getX(), this.getY() + 1.6D, this.getZ(), 12, 0.9D, 0.35D, 0.9D, 0.02D); serverLevel.sendParticles(ParticleTypes.SMOKE, this.getX(), this.getY() + 1.6D, this.getZ(), 8, 0.7D, 0.25D, 0.7D, 0.03D); @@ -693,13 +503,8 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { Vec3 direction = target.position().subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); - if (direction.lengthSqr() < 1.0E-4D) { - direction = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); - } - if (direction.lengthSqr() < 1.0E-4D) { - direction = new Vec3(1.0D, 0.0D, 0.0D); - } - + if (direction.lengthSqr() < 1.0E-4D) direction = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() < 1.0E-4D) direction = new Vec3(1.0D, 0.0D, 0.0D); Vec3 push = direction.normalize().scale(horizontalStrength); target.push(push.x, verticalStrength, push.z); target.hurtMarked = true; @@ -716,7 +521,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); int endY = Math.max(Mth.floor(target.getY()), startY - 16); int x = Mth.floor(this.getX()); int z = Mth.floor(this.getZ()); - BlockPos.MutableBlockPos cursor = new BlockPos.MutableBlockPos(); for (int y = startY; y >= endY; y--) { cursor.set(x, y, z); @@ -729,138 +533,31 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); return true; } } - return false; } - @Nullable - private LivingEntity findBestAttackTarget(@Nullable LivingEntity currentTarget) { - double followRange = this.getAttributeValue(Attributes.FOLLOW_RANGE); - return this.level().getEntitiesOfClass( - LivingEntity.class, - this.getBoundingBox().inflate(followRange, followRange * 0.5D, followRange), - this::canTargetEntity - ).stream() - .min(Comparator.comparingDouble(entity -> this.scoreAttackTarget(entity, currentTarget))) - .orElse(null); - } - private boolean canTargetEntity(@Nullable LivingEntity entity) { - if (entity == null || !entity.isAlive() || entity == this || entity.getType() == this.getType()) { - return false; - } - - if (entity.getType().is(AntarchyTags.Entities.NIGHTMARE_NO_ATTACK)) { - return false; - } - + if (entity == null || !entity.isAlive() || entity == this || entity.getType() == this.getType()) return false; + if (entity.getType().is(AntarchyTags.Entities.NIGHTMARE_NO_ATTACK)) return false; if (entity instanceof Player player) { return !player.isCreative() && !player.isSpectator() && this.level().getDifficulty() != Difficulty.PEACEFUL; } - return entity instanceof Mob && entity.isAttackable(); } - private double scoreAttackTarget(LivingEntity candidate, @Nullable LivingEntity currentTarget) { - double score = this.distanceToSqr(candidate); - if (candidate instanceof Player) { - score -= 10000.0D; - } - if (candidate == currentTarget) { - score -= 18.0D; - } - if (this.hasLineOfSight(candidate)) { - score -= 12.0D; - } else { - score += 16.0D; - } - if (this.isInFront(candidate.position(), -0.15D)) { - score -= 4.0D; - } - return score; - } - private boolean shouldUseFlight() { LivingEntity target = this.getTarget(); - return (target != null && this.canTargetEntity(target) && this.shouldUseFlightForTarget(target)) - || (this.patrolTarget != null && this.patrolTarget.y > this.getY() + 1.5D); - } - - private boolean shouldUseFlightForTarget(LivingEntity target) { - if (this.ceilingAvoidanceTicks > 0) { - return false; + if (target != null) { + return this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR; } - - if (!target.onGround() || target.getY() > this.getY() + 2.5D) { - this.groundCombatMode = false; - return true; - } - - double distanceSqr = this.distanceToSqr(target); - - if (this.isHoveringAboveTarget(target)) { - this.groundCombatMode = true; - return false; - } - - if (this.groundCombatMode) { - if (distanceSqr <= FLIGHT_RETURN_RANGE_SQR) { - return false; - } - - this.groundCombatMode = false; - return true; - } - - if (this.onGround() && distanceSqr <= GROUND_APPROACH_RANGE_SQR) { - this.groundCombatMode = true; - return false; - } - - if (distanceSqr > FLIGHT_REENGAGE_RANGE_SQR) { - return true; - } - - return !this.onGround() && distanceSqr > CLOSE_APPROACH_RANGE_SQR; - } - - private boolean resolveCombatFlightMode(LivingEntity target) { - boolean desiredFly = this.shouldUseFlightForTarget(target); - boolean currentFly = !this.groundCombatMode; - - if (desiredFly == currentFly) { - this.flightModeCommitTicks = FLIGHT_MODE_COMMIT_TICKS; - return desiredFly; - } - - if (this.flightModeCommitTicks > 0) { - this.flightModeCommitTicks--; - return currentFly; - } - - this.groundCombatMode = !desiredFly; - this.flightModeCommitTicks = FLIGHT_MODE_COMMIT_TICKS; - return desiredFly; - } - - private boolean isInFront(Vec3 position, double minimumDot) { - Vec3 forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); - Vec3 toTarget = position.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); - if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) { - return true; - } - return forward.normalize().dot(toTarget.normalize()) >= minimumDot; + return this.patrolTarget != null && this.patrolTarget.y > this.getY() + 1.5D; } private boolean canStartAttackOn(LivingEntity target) { - if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > ATTACK_START_RANGE_SQR) { - return false; - } - - double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); + if (!this.hasLineOfSight(target) || this.distanceToSqr(target) > ATTACK_START_RANGE_SQR) return false; + double hdSqr = this.horizontalDistanceToSqr(target); double verticalDistance = Math.abs(target.getEyeY() - this.getEyeY()); - return horizontalDistanceSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE - && verticalDistance <= 4.0D; + return hdSqr <= ATTACK_COMMIT_HORIZONTAL_RANGE * ATTACK_COMMIT_HORIZONTAL_RANGE && verticalDistance <= 4.0D; } private double horizontalDistanceToSqr(LivingEntity target) { @@ -869,6 +566,13 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); return dx * dx + dz * dz; } + private boolean isInFront(Vec3 position, double minimumDot) { + Vec3 forward = this.getViewVector(1.0F).multiply(1.0D, 0.0D, 1.0D); + Vec3 toTarget = position.subtract(this.position()).multiply(1.0D, 0.0D, 1.0D); + if (forward.lengthSqr() < 1.0E-4D || toTarget.lengthSqr() < 1.0E-4D) return true; + return forward.normalize().dot(toTarget.normalize()) >= minimumDot; + } + private void faceTowardTarget(LivingEntity target, float maxTurnDegrees) { Vec3 toTarget = target.getEyePosition().subtract(this.getEyePosition()); double horizontal = Math.sqrt(toTarget.x * toTarget.x + toTarget.z * toTarget.z); @@ -885,45 +589,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); } } - private Vec3 createCombatFlightTarget(LivingEntity target) { - double distanceToTarget = this.distanceTo(target); - if (distanceToTarget > 10.0D) { - Vec3 direct = target.getEyePosition().add(0.0D, 0.5D, 0.0D); - return this.getStableFlightTarget(direct, 8); - } - - this.currentOrbitAngle += 0.022D * this.orbitDirection; - double radius = 4.1D; - double angle = this.currentOrbitAngle + this.getId() * 0.09D; - double x = target.getX() + Math.cos(angle) * radius; - double z = target.getZ() + Math.sin(angle) * radius; - double y = Mth.clamp( - target.getY() + COMBAT_FLIGHT_BASE_HEIGHT + Math.sin((this.tickCount + this.getId()) * 0.16D) * COMBAT_FLIGHT_HEIGHT_SPAN, - target.getY() + 0.55D, - target.getY() + 1.45D - ); - return this.getStableFlightTarget(new Vec3(x, y, z), 8); - } - - private Vec3 createStrikeFlightTarget(LivingEntity target) { - Vec3 offset = this.position().subtract(target.position()).multiply(1.0D, 0.0D, 1.0D); - if (offset.lengthSqr() < 1.0E-4D) { - offset = this.getViewVector(1.0F).multiply(-1.0D, 0.0D, -1.0D); - } - if (offset.lengthSqr() < 1.0E-4D) { - offset = new Vec3(1.0D, 0.0D, 0.0D); - } - - Vec3 desired = target.getEyePosition() - .add(offset.normalize().scale(2.1D)) - .add(0.0D, 0.05D, 0.0D); - return this.getStableFlightTarget(desired, 4); - } - - private Vec3 createGroundApproachTarget(LivingEntity target) { - return new Vec3(target.getX(), target.getY() + 0.85D, target.getZ()); - } - private Vec3 findPatrolTarget() { BlockPos origin = this.blockPosition(); for (int attempt = 0; attempt < 18; attempt++) { @@ -936,16 +601,13 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); : terrainPos.getY() + 1.0D; Vec3 desired = new Vec3(x + 0.5D, y, z + 0.5D); Vec3 openTarget = this.findNearestFlightTarget(desired); - if (openTarget.distanceToSqr(desired) <= 16.0D) { - return openTarget; - } + if (openTarget.distanceToSqr(desired) <= 16.0D) return openTarget; } - - BlockPos fallbackTerrain = this.level().getHeightmapPos( + BlockPos fallback = this.level().getHeightmapPos( Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, origin.offset(this.random.nextInt(25) - 12, 0, this.random.nextInt(25) - 12) ); - return new Vec3(fallbackTerrain.getX() + 0.5D, fallbackTerrain.getY() + 1.0D, fallbackTerrain.getZ() + 0.5D); + return new Vec3(fallback.getX() + 0.5D, fallback.getY() + 1.0D, fallback.getZ() + 0.5D); } private Vec3 findNearestFlightTarget(Vec3 desired) { @@ -958,45 +620,22 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.random.nextInt(5) - 2, this.random.nextInt(7) - 3 ); - if (!this.isOpenFlightSpace(candidate) || !this.isCeilingBuffered(candidate)) { - continue; - } - Vec3 candidateCenter = Vec3.atCenterOf(candidate); - double score = candidateCenter.distanceToSqr(desired) + Math.max(0.0D, candidateCenter.y - desired.y) * 6.0D; + if (!this.isOpenFlightSpace(candidate) || !this.isCeilingBuffered(candidate)) continue; + Vec3 center = Vec3.atCenterOf(candidate); + double score = center.distanceToSqr(desired) + Math.max(0.0D, center.y - desired.y) * 6.0D; if (score < bestScore) { - best = candidateCenter; + best = center; bestScore = score; } } - if (best != null) { - return best; - } - + if (best != null) return best; for (int down = 0; down <= 12; down++) { BlockPos lowered = desiredPos.below(down); - if (this.isOpenFlightSpace(lowered) && this.isCeilingBuffered(lowered)) { - return Vec3.atCenterOf(lowered); - } + if (this.isOpenFlightSpace(lowered) && this.isCeilingBuffered(lowered)) return Vec3.atCenterOf(lowered); } - return desired; } - private Vec3 getStableFlightTarget(Vec3 desired, int retargetTicks) { - if (this.flightTargetRetargetTicks > 0 - && this.cachedFlightTarget != null - && this.cachedFlightTargetAnchor != null - && this.cachedFlightTargetAnchor.distanceToSqr(desired) <= 6.25D) { - this.flightTargetRetargetTicks--; - return this.cachedFlightTarget; - } - - this.cachedFlightTarget = this.findNearestFlightTarget(desired); - this.cachedFlightTargetAnchor = desired; - this.flightTargetRetargetTicks = retargetTicks; - return this.cachedFlightTarget; - } - private boolean isOpenFlightSpace(BlockPos pos) { return this.level().isEmptyBlock(pos) && this.level().isEmptyBlock(pos.above()) @@ -1005,9 +644,7 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); private boolean isCeilingBuffered(BlockPos pos) { for (int i = 3; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { - if (!this.level().isEmptyBlock(pos.above(i))) { - return false; - } + if (!this.level().isEmptyBlock(pos.above(i))) return false; } return true; } @@ -1015,23 +652,11 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); private boolean isTooCloseToCeiling() { BlockPos current = BlockPos.containing(this.getX(), this.getY(), this.getZ()); for (int i = 1; i <= FLIGHT_CEILING_CLEARANCE_BLOCKS; i++) { - if (!this.level().isEmptyBlock(current.above(i))) { - return true; - } + if (!this.level().isEmptyBlock(current.above(i))) return true; } return false; } - private boolean isHoveringAboveTarget(LivingEntity target) { - if (!target.onGround()) { - return false; - } - - double horizontalDistanceSqr = this.horizontalDistanceToSqr(target); - double verticalDelta = this.getY() - target.getY(); - return horizontalDistanceSqr <= 25.0D && verticalDelta > 1.6D; - } - private void tickClientParticles() { if ((this.isRoaring() || this.attackAnimationTicks > 0) && this.tickCount % 3 == 0) { this.level().addParticle( @@ -1039,9 +664,7 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.getX() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), this.getY() + 1.2D + this.random.nextDouble() * 1.1D, this.getZ() + (this.random.nextDouble() - 0.5D) * this.getBbWidth(), - 0.0D, - 0.03D, - 0.0D + 0.0D, 0.03D, 0.0D ); } } @@ -1055,7 +678,6 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.yBodyRot = Mth.approachDegrees(this.yBodyRot, nextYaw, 2.5F); this.yHeadRot = Mth.approachDegrees(this.yHeadRot, nextYaw, 3.5F); } - if (!this.onGround() && velocity.lengthSqr() > 1.0E-4D) { float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 3.0F)); @@ -1064,27 +686,132 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); } } - private final class NightmareCombatMovementGoal extends Goal { - private NightmareCombatMovementGoal() { - this.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + this.wingFlapCooldown = 0; + return; + } + if (this.isRoaring()) { + this.setAnimationState(ANIM_ROAR); + this.wingFlapCooldown = 0; + return; + } + if (this.attackAnimationTicks > 0) { + this.setAnimationState(this.onGround() ? ANIM_ATTACK : ANIM_FLY_ATTACK); + this.tickWingFlapSound(); + return; + } + if (!this.onGround() && this.airborneTicks > 0 && this.airborneTicks <= 10 && this.shouldUseFlight()) { + this.setAnimationState(ANIM_TAKEOFF); + this.wingFlapCooldown = 0; + return; + } + if (!this.onGround() && this.hurtTime > 0) { + this.setAnimationState(ANIM_FLY_DAMAGED); + this.tickWingFlapSound(); + return; + } + if (!this.onGround()) { + this.setAnimationState(ANIM_FLY); + this.tickWingFlapSound(); + return; + } + Vec3 velocity = this.getDeltaMovement(); + if (velocity.horizontalDistanceSqr() > 0.008D) { + this.setAnimationState(ANIM_WALK); + this.wingFlapCooldown = 0; + return; + } + this.setAnimationState(ANIM_IDLE); + this.wingFlapCooldown = 0; + } + + private void tickWingFlapSound() { + if (!(this.level() instanceof ServerLevel)) return; + if (this.onGround() || this.isRoaring() || this.isDeadOrDying()) { + this.wingFlapCooldown = 0; + return; + } + Vec3 movement = this.getDeltaMovement(); + if (movement.lengthSqr() < 0.01D) return; + if (this.wingFlapCooldown > 0) { + this.wingFlapCooldown--; + return; + } + this.playSound(AntarchySoundEvents.NIGHTMARE_FLAP.get(), 1.25F, 0.85F + this.random.nextFloat() * 0.08F); + this.wingFlapCooldown = 5 + this.random.nextInt(4); + } + + private final class NightmareRoarGoal extends Goal { + NightmareRoarGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); } @Override public boolean canUse() { - return NightmareEntity.this.getTarget() != null - && !NightmareEntity.this.isDeadOrDying() - && !NightmareEntity.this.isRoaring() - && NightmareEntity.this.attackAnimationTicks <= 0; + LivingEntity target = NightmareEntity.this.getTarget(); + return target instanceof Player && NightmareEntity.this.shouldStartRoar(target); } @Override public boolean canContinueToUse() { - return this.canUse(); + return NightmareEntity.this.isRoaring(); } @Override public void start() { - NightmareEntity.this.groundCombatMode = false; + NightmareEntity.this.startRoar(); + } + + @Override + public void tick() { + NightmareEntity.this.tickRoar(NightmareEntity.this.getTarget()); + } + + @Override + public void stop() { + NightmareEntity.this.roarTicks = 0; + NightmareEntity.this.setRoaring(false); + } + } + + private final class NightmareAttackAnimationGoal extends Goal { + NightmareAttackAnimationGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + return NightmareEntity.this.attackAnimationTicks > 0; + } + + @Override + public boolean canContinueToUse() { + return NightmareEntity.this.attackAnimationTicks > 0; + } + + @Override + public void tick() { + NightmareEntity.this.tickAttack(NightmareEntity.this.getTarget()); + } + } + + private final class NightmareFlyToTargetGoal extends Goal { + NightmareFlyToTargetGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); + } + + @Override + public boolean canUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_ENGAGE_RANGE_SQR; + } + + @Override + public boolean canContinueToUse() { + LivingEntity target = NightmareEntity.this.getTarget(); + return target != null && NightmareEntity.this.distanceToSqr(target) > FLIGHT_DISENGAGE_RANGE_SQR; } @Override @@ -1095,30 +822,51 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); @Override public void tick() { LivingEntity target = NightmareEntity.this.getTarget(); - if (target == null) { - return; - } - + if (target == null) return; if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { NightmareEntity.this.startAttack(target); return; } - - NightmareEntity.this.tickCombatMovement(target); + NightmareEntity.this.getMoveControl().setWantedPosition( + target.getX(), target.getEyeY() + 0.5D, target.getZ(), COMBAT_FLIGHT_SPEED + ); } } - private final class NightmareAirPatrolGoal extends Goal { - private NightmareAirPatrolGoal() { - this.setFlags(EnumSet.of(Goal.Flag.MOVE)); + private final class NightmareMeleeGoal extends MeleeAttackGoal { + NightmareMeleeGoal() { + super(NightmareEntity.this, GROUND_APPROACH_SPEED, true); + } + + @Override + public void tick() { + LivingEntity target = NightmareEntity.this.getTarget(); + if (target != null) { + double hdSqr = NightmareEntity.this.horizontalDistanceToSqr(target); + double vertDelta = NightmareEntity.this.getY() - target.getY(); + if (target.onGround() && hdSqr <= 25.0D && vertDelta > 1.6D) { + NightmareEntity.this.tryBreakBlocksToTarget(target); + } + } + super.tick(); + } + + @Override + protected void checkAndPerformAttack(LivingEntity target) { + if (NightmareEntity.this.attackCooldown <= 0 && NightmareEntity.this.canStartAttackOn(target)) { + NightmareEntity.this.startAttack(target); + } + } + } + + private final class NightmareWanderGoal extends Goal { + NightmareWanderGoal() { + this.setFlags(EnumSet.of(Flag.MOVE)); } @Override public boolean canUse() { - return NightmareEntity.this.getTarget() == null - && !NightmareEntity.this.isDeadOrDying() - && !NightmareEntity.this.isRoaring() - && NightmareEntity.this.attackAnimationTicks <= 0; + return NightmareEntity.this.getTarget() == null && !NightmareEntity.this.isDeadOrDying(); } @Override @@ -1130,96 +878,30 @@ this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 16.0F)); public void start() { NightmareEntity.this.patrolTarget = null; NightmareEntity.this.patrolRetargetTicks = 0; - NightmareEntity.this.tickPatrolMovement(); } @Override public void stop() { NightmareEntity.this.getNavigation().stop(); + NightmareEntity.this.patrolTarget = null; } @Override public void tick() { - if (NightmareEntity.this.getTarget() != null - || NightmareEntity.this.isRoaring() - || NightmareEntity.this.attackAnimationTicks > 0) { - return; + if (NightmareEntity.this.patrolRetargetTicks-- <= 0 + || NightmareEntity.this.patrolTarget == null + || NightmareEntity.this.position().distanceToSqr(NightmareEntity.this.patrolTarget) < 4.0D) { + NightmareEntity.this.patrolRetargetTicks = 30 + NightmareEntity.this.random.nextInt(30); + NightmareEntity.this.patrolTarget = NightmareEntity.this.findPatrolTarget(); + } + if (NightmareEntity.this.patrolTarget != null) { + NightmareEntity.this.getMoveControl().setWantedPosition( + NightmareEntity.this.patrolTarget.x, + NightmareEntity.this.patrolTarget.y, + NightmareEntity.this.patrolTarget.z, + PATROL_SPEED + ); } - - NightmareEntity.this.tickPatrolMovement(); } } - - private void updateAnimationState() { - if (this.isDeadOrDying()) { - this.setAnimationState(ANIM_DEATH); - this.wingFlapCooldown = 0; - return; - } - - if (this.isRoaring()) { - this.setAnimationState(ANIM_ROAR); - this.wingFlapCooldown = 0; - return; - } - - if (this.attackAnimationTicks > 0) { - this.setAnimationState(this.onGround() ? ANIM_ATTACK : ANIM_FLY_ATTACK); - this.tickWingFlapSound(); - return; - } - - if (!this.onGround() && this.airborneTicks > 0 && this.airborneTicks <= 10 && this.shouldUseFlight()) { - this.setAnimationState(ANIM_TAKEOFF); - this.wingFlapCooldown = 0; - return; - } - - if (!this.onGround() && this.hurtTime > 0) { - this.setAnimationState(ANIM_FLY_DAMAGED); - this.tickWingFlapSound(); - return; - } - - if (!this.onGround()) { - this.setAnimationState(ANIM_FLY); - this.tickWingFlapSound(); - return; - } - - Vec3 velocity = this.getDeltaMovement(); - if (this.onGround() && velocity.horizontalDistanceSqr() > 0.008D) { - this.setAnimationState(ANIM_WALK); - this.wingFlapCooldown = 0; - return; - } - - this.setAnimationState(ANIM_IDLE); - this.wingFlapCooldown = 0; - } - - private void tickWingFlapSound() { - if (!(this.level() instanceof ServerLevel)) { - return; - } - - if (this.onGround() || this.isRoaring() || this.isDeadOrDying()) { - this.wingFlapCooldown = 0; - return; - } - - Vec3 movement = this.getDeltaMovement(); - if (movement.lengthSqr() < 0.01D) { - return; - } - - if (this.wingFlapCooldown > 0) { - this.wingFlapCooldown--; - return; - } - - this.playSound(AntarchySoundEvents.NIGHTMARE_FLAP.get(), 1.25F, 0.85F + this.random.nextFloat() * 0.08F); - this.wingFlapCooldown = 5 + this.random.nextInt(4); - } - } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java index a7e70b2f..83f930db 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/SplashManagerMixin.java @@ -34,5 +34,6 @@ public abstract class SplashManagerMixin { this.splashes.add("Ants Ants Revolution!"); this.splashes.add("Rainbow sugar yummy"); this.splashes.add("Now with inverted gravity!"); + this.splashes.add("Everything we need is already here"); } } diff --git a/common/src/main/resources/assets/antarchy/animations/basilisk.animation.json b/common/src/main/resources/assets/antarchy/animations/basilisk.animation.json index 3471fa60..1750cc4a 100644 --- a/common/src/main/resources/assets/antarchy/animations/basilisk.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/basilisk.animation.json @@ -1,212 +1,65 @@ { "format_version": "1.8.0", "animations": { - "walk": { + "idle": { "loop": true, - "animation_length": 1, - "sound_effects": { - "0.0": { - "effect": "antarchy:basilisk_slither_loop|0.32|1.0" - } - }, + "animation_length": 4, "bones": { - "jaw": { + "upper_body": { "rotation": { "0.0": { "post": { - "vector": [47.5, 0, 0] + "vector": [0, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [47.5, 0, 0] + "vector": [0, 5, 0] }, "lerp_mode": "catmullrom" } } }, - "group2": { - "position": { + "neck_1": { + "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, 0, 1] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 1] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "tail": { + "neck_2": { "rotation": { "0.0": { "post": { - "vector": [0, 7.5, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, -7.5, 0] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [0, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 7.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 12.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 12.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 20, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -20, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_5": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -22.5, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -216,19 +69,53 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "2.0": { "post": { - "vector": [2.5, 0, 0] + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25.77, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [25.77, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [27.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -238,19 +125,13 @@ "rotation": { "0.0": { "post": { - "vector": [-2.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-2.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -260,19 +141,73 @@ "rotation": { "0.0": { "post": { - "vector": [-10, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "2.2917": { "post": { - "vector": [10, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.625": { "post": { - "vector": [-10, 0, 0] + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -282,182 +217,73 @@ "rotation": { "0.0": { "post": { - "vector": [-25, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "upper_body": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 3] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [32.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck_1": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "attack": { - "animation_length": 1, - "bones": { - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { + "2.2917": { "post": { "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "2.625": { "post": { - "vector": [5, 0, 0] + "vector": [-17.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "2.7083": { "post": { - "vector": [0, 0, 0] + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" } @@ -467,25 +293,13 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -32.5, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "4.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, -32.5, 0] }, "lerp_mode": "catmullrom" } @@ -495,25 +309,13 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 70, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "4.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 70, 0] }, "lerp_mode": "catmullrom" } @@ -523,25 +325,19 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 72.5, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, 0, 0] + "vector": [5, 72.5, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "4.0": { "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 72.5, 0] }, "lerp_mode": "catmullrom" } @@ -551,25 +347,25 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 47.5, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.125": { "post": { - "vector": [0, 0, 0] + "vector": [0, 47.5, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "2.125": { "post": { - "vector": [15, 0, 0] + "vector": [25, 47.5, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 47.5, 0] }, "lerp_mode": "catmullrom" } @@ -579,155 +375,84 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.1667": { "post": { - "vector": [0, 0, 0] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "3.25": { "post": { - "vector": [7.5, 0, 0] + "vector": [30, 50, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "4.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" } } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-105, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "Basilisk": { "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.2083": { + "vector": [0, 0, 7] }, - "0.375": { - "post": { - "vector": [0, 6, 3] - }, - "lerp_mode": "catmullrom" + "0.3333": { + "vector": [0, 0, 3] }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.4583": { + "vector": [0, 0, -4] + }, + "0.5833": { + "vector": [0, 0, -4] + }, + "0.625": { + "vector": [0, -16, -4] + }, + "0.6667": { + "vector": [0, 0, -4] } } }, - "tongue": { + "upper_body": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.2083": { "post": { - "vector": [-20, 0, 0] + "vector": [-27.5, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { + "0.3333": { "post": { - "vector": [0, 0, 0] + "vector": [-27.5, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongue_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 5, 0] }, "lerp_mode": "catmullrom" } @@ -736,60 +461,19 @@ "neck": { "rotation": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "0.125": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.2083": { + "vector": [-15, 0, 0] }, - "0.25": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.3333": { + "vector": [-15, 0, 0] }, "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [37.5, 0, 0] }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 1, 4] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "1.0": { + "vector": [0, 0, 0] } } }, @@ -797,63 +481,83 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.1667": { + "0.2083": { "post": { - "vector": [-10, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.3333": { "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [50, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [62.45783, 0.00641, 0.64844] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.625": { "post": { - "vector": [0, 0, 0] + "vector": [57.45783, 0.00641, 0.64844] }, "lerp_mode": "catmullrom" }, - "0.375": { + "1.0": { "post": { - "vector": [0, -3, 8] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, "neck_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_3": { "rotation": { "0.0": { "post": { @@ -863,364 +567,112 @@ }, "0.2083": { "post": { - "vector": [-20, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.3333": { "post": { - "vector": [-20, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.375": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { + "1.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, -1, 0.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "idle": { - "loop": true, - "animation_length": 2.5, - "sound_effects": { - "0.0": { - "effect": "antarchy:basilisk_idle_loop|0.24|1.0" - } - }, - "bones": { - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "group2": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 23] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 80, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 90, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 80, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-8, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-8, 0, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 45, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 52.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 45, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-3, 0, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 65, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 80, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 65, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-4, 0, -6] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-4, 0, -6] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 42.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 65, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 42.5, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 0, -4] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 0, -4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_5": { - "rotation": { - "0.0": { - "post": { - "vector": [-20, 45, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [53.287, 59.6064, 22.8142] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-20, 45, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 0, -3] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2, 0, -3] - }, - "lerp_mode": "catmullrom" - } } }, "head": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "0.2083": { "post": { - "vector": [22.5, 0, 0] + "vector": [32.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.3333": { "post": { - "vector": [0, 0, 0] + "vector": [32.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "0.5": { "post": { - "vector": [0, 0, 0] + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [67.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [27.5, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "1.3333": { - "post": { - "vector": [0, -4, 2] - }, - "lerp_mode": "catmullrom" + "0.625": { + "vector": [0, 0, 0] }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.6667": { + "vector": [0, 1.9981, -0.08724] }, - "2.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "0.7083": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] } } }, @@ -1228,45 +680,13 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.0": { "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, -3, 4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1276,25 +696,13 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "1.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [-22.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1304,219 +712,177 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "1.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [45, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "upper_body": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -2] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { + "tail": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -32.5, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "0.2083": { "post": { - "vector": [-5, 0, 0] + "vector": [0, 37.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.3333": { "post": { - "vector": [5, 0, 0] + "vector": [0, 37.5, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, -32.5, 0] }, "lerp_mode": "catmullrom" } } }, - "neck_1": { + "tail_2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 70, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "0.2083": { "post": { - "vector": [-17.5, 0, 0] + "vector": [0, -77.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.3333": { "post": { - "vector": [5, 0, 0] + "vector": [0, -77.5, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "0.7083": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [15, 17.94647, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.0": { "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 70, 0] }, "lerp_mode": "catmullrom" } } }, - "neck_2": { + "tail_3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 72.5, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "0.2083": { "post": { - "vector": [-7.5, 0, 0] + "vector": [0, -67.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.3333": { "post": { - "vector": [-5, 0, 0] + "vector": [0, -67.5, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "0.7083": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [20, 23.09326, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "1.0": { "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 72.5, 0] }, "lerp_mode": "catmullrom" } } }, - "neck_3": { + "tail_4": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 47.5, 0] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "0.2083": { "post": { - "vector": [12.5, 0, 0] + "vector": [0, -67.5, 0] }, "lerp_mode": "catmullrom" }, - "2.0": { + "0.3333": { "post": { - "vector": [-5, 0, 0] + "vector": [0, -67.5, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "0.7083": { "post": { - "vector": [0, 0, 0] + "vector": [47.5, 6.91589, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [27.5, 15.59174, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 50, 0] }, "lerp_mode": "catmullrom" } @@ -1525,456 +891,62 @@ } }, "death": { - "loop": "hold_on_last_frame", - "animation_length": 3.0952, + "loop": true, + "animation_length": 1.25, "bones": { - "jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [62.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4286": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8452": { - "post": { - "vector": [52.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [0, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.9762": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [0, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, -25, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [10, 7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.9762": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [0, 22.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, -65, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [27.5, 25, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.9762": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [0, 35, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, -70, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [11.7502, -2.8842, 3.7366] - }, - "lerp_mode": "catmullrom" - }, - "2.9762": { - "post": { - "vector": [15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail_5": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [0, 52.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, -62.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [25, -10, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.9762": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3571": { - "post": { - "vector": [-70, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [-70.4378, -4.2453, 11.7679] - }, - "lerp_mode": "catmullrom" - }, - "1.0714": { - "post": { - "vector": [-46.7866, -6.3948, -0.6001] - }, - "lerp_mode": "catmullrom" - }, - "1.4286": { - "post": { - "vector": [-89.6887, -11.484, 24.9746] - }, - "lerp_mode": "catmullrom" - }, - "1.5476": { - "post": { - "vector": [-45.2729, 15.4367, -27.9312] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-52.5, -27.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [-87.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, + "Basilisk": { "position": { "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [0, 0, 16] + }, "post": { - "vector": [0, 0, 0] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "0.3571": { + "0.2083": { "post": { - "vector": [-0.34, 2.28808, 4.31877] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "1.4286": { + "0.3333": { "post": { - "vector": [-1.52147, 4.07903, 2.459] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "1.5476": { + "0.4167": { "post": { - "vector": [-2.88663, 0.2555, 2.58686] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "1.6667": { + "0.5": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "2.8571": { + "0.5417": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" }, - "3.0357": { + "0.5833": { "post": { - "vector": [0, 3.08438, 1.86724] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongue": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [0, -5, 16] }, "lerp_mode": "catmullrom" }, - "0.7143": { + "0.625": { "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4881": { - "post": { - "vector": [-15, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8452": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongue_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4881": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8452": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tongue_3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7143": { - "post": { - "vector": [-20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4881": { - "post": { - "vector": [25, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8452": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.381": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 2] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 4] + "vector": [0, 0, 16] }, "lerp_mode": "catmullrom" } @@ -1984,81 +956,31 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.119": { + "0.125": { "post": { - "vector": [-42.5, 0, 0] + "vector": [-35, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.3571": { + "0.2083": { "post": { - "vector": [-42.5, 0, 0] + "vector": [-35, 5, 0] }, "lerp_mode": "catmullrom" }, - "0.7143": { + "0.3333": { "post": { - "vector": [-29.9131, 1.7814, 29.5004] + "vector": [-35, 5, 0] }, "lerp_mode": "catmullrom" }, - "1.0714": { + "0.4167": { "post": { - "vector": [14.79, -1.0809, 14.9173] - }, - "lerp_mode": "catmullrom" - }, - "1.4286": { - "post": { - "vector": [12.8439, 8.3261, -15.0771] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [-27.3482, 4.3792, -0.7278] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [-27.3482, 4.3792, -0.7278] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [10.1518, 4.3792, -0.7278] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [2.6518, 4.3792, -0.7278] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [0, 0, 2] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { - "post": { - "vector": [0, 0, 2] + "vector": [-0.16461, 5, 0] }, "lerp_mode": "catmullrom" } @@ -2067,142 +989,222 @@ "neck": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-20, 0, 0] + }, "post": { - "vector": [0, 0, 0] + "vector": [-20, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.4286": { + "0.2083": { "post": { - "vector": [-42.2219, 46.4728, -16.4664] + "vector": [-20, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0952": { + "0.5": { "post": { "vector": [32.5, 0, 0] }, "lerp_mode": "catmullrom" } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [0, 1, 0] - }, - "lerp_mode": "catmullrom" - } } }, "neck_1": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0714": { + "0.5417": { "post": { - "vector": [47.5, 0, 0] + "vector": [57.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.4286": { + "0.625": { "post": { - "vector": [84.5628, 7.3555, -6.7934] + "vector": [52.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.6667": { + "0.75": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [55, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.4286": { - "post": { - "vector": [-0.31713, 2.96984, 0.28192] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [0, 5.29431, -3.27661] + "vector": [57.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, "neck_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [6.6, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [31.6, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.6, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_3": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "pre": { + "vector": [-35, 0, 0] + }, + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-47.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-82.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { "rotation": { "0.0": { "post": { @@ -2210,37 +1212,314 @@ }, "lerp_mode": "catmullrom" }, - "1.0714": { + "0.1667": { + "post": { + "vector": [90, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { "post": { "vector": [47.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.4286": { + "0.4167": { "post": { - "vector": [50.8949, 4.4, 13.2722] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "2.8571": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0357": { - "post": { - "vector": [32.5, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } - }, + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [17.5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, -47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.24582, 37.31527, -6.26746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 72.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [22.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [22.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.97463, 54.79564, 8.16735] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 47.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [17.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-8.30168, 54.47285, -12.53111] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [32.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [32.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-10, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [12.5, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, -57.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.49263, 59.18043, -17.49593] + }, + "lerp_mode": "catmullrom" + } + } + }, + "eye_brow_r": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4583": { + "vector": [0, -2, 0] + } + } + }, + "eye_brow_l": { + "position": { + "vector": [0, -2, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 2, + "bones": { + "Basilisk": { "position": { "0.0": { "post": { @@ -2248,15 +1527,101 @@ }, "lerp_mode": "catmullrom" }, - "1.4286": { + "0.5": { "post": { - "vector": [-0.00001, 2.21183, 2.02677] + "vector": [0, 0, -7] }, "lerp_mode": "catmullrom" }, - "3.0952": { + "1.5": { "post": { - "vector": [0, 2.21, 0.03] + "vector": [0, 0, 7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upper_body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-4.38, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck_1": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2266,37 +1631,235 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3571": { + "0.5": { "post": { - "vector": [-15, 0, 0] + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.4286": { - "post": { - "vector": [-32.2977, 16.4834, 27.8104] - }, - "lerp_mode": "catmullrom" - }, - "1.6667": { + "1.5": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.8571": { + "2.0": { "post": { - "vector": [0, 0, 0] + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [25, 0, 0] }, "lerp_mode": "catmullrom" }, - "3.0357": { + "1.0": { "post": { - "vector": [-37.5, 0, 0] + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_2": { + "rotation": { + "0.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tongue_3": { + "rotation": { + "0.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [45, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 22.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 28.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -28.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -3.75, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -16.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, -32.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -16.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20.83, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -20.83, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail_5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -22.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -22.5, 0] }, "lerp_mode": "catmullrom" } diff --git a/common/src/main/resources/assets/antarchy/geo/basilisk.geo.json b/common/src/main/resources/assets/antarchy/geo/basilisk.geo.json index 4ee5b382..9d6e7c01 100644 --- a/common/src/main/resources/assets/antarchy/geo/basilisk.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/basilisk.geo.json @@ -3,7 +3,7 @@ "minecraft:geometry": [ { "description": { - "identifier": "geometry.unknown", + "identifier": "geometry.basilisk", "texture_width": 256, "texture_height": 256, "visible_bounds_width": 16, @@ -12,15 +12,15 @@ }, "bones": [ { - "name": "group2", + "name": "Basilisk", "pivot": [0, 41.02853, -41.86327] }, { "name": "upper_body", - "parent": "group2", + "parent": "Basilisk", "pivot": [0, 5.22232, -10.59536], "cubes": [ - {"origin": [0, 13.92239, -30.29457], "size": [0, 6, 20], "uv": [170, 187]}, + {"origin": [0, 13.92239, -30.29457], "size": [0, 6, 20], "uv": [170, 155]}, {"origin": [-7.5, -0.07761, -30.29457], "size": [15, 14, 20], "inflate": 0.01, "uv": [98, 0]} ] }, @@ -29,13 +29,13 @@ "parent": "upper_body", "pivot": [0, 6.18002, -29.0602], "cubes": [ - {"origin": [-7.5, 5.42239, -44.99457], "size": [15, 12, 19], "pivot": [0, 10.02239, -37.49457], "rotation": [-32.5, 0, 0], "uv": [64, 129]} + {"origin": [-7.5, 5.42239, -44.99457], "size": [15, 12, 19], "pivot": [0, 10.02239, -37.49457], "rotation": [-32.5, 0, 0], "uv": [64, 97]} ] }, { "name": "neck_1", "parent": "neck", - "pivot": [0, 11.44289, -38.81135], + "pivot": [0, 10.19289, -46.31135], "cubes": [ {"origin": [-7.5, 10.22239, -46.39457], "size": [15, 15, 12], "inflate": 0.01, "uv": [166, 34]} ] @@ -43,9 +43,9 @@ { "name": "neck_2", "parent": "neck_1", - "pivot": [0, 24.0164, -40.28362], + "pivot": [0, 25.2664, -46.28362], "cubes": [ - {"origin": [-7.5, 24.52239, -41.99457], "size": [15, 11, 15], "pivot": [0, 26.42239, -34.79457], "rotation": [57.5, 0, 0], "uv": [60, 160]} + {"origin": [-7.5, 24.52239, -41.99457], "size": [15, 11, 15], "pivot": [0, 26.42239, -34.79457], "rotation": [57.5, 0, 0], "uv": [60, 128]} ] }, { @@ -53,31 +53,51 @@ "parent": "neck_2", "pivot": [0, 31.71975, -33.59063], "cubes": [ - {"origin": [-7.5, 32.83206, -46.75054], "size": [15, 13, 13], "inflate": 0.02, "pivot": [0, 41.23246, -37.34339], "rotation": [92.5, 0, 0], "uv": [0, 162]} + {"origin": [-7.5, 32.83206, -46.75054], "size": [15, 13, 13], "inflate": 0.02, "pivot": [0, 41.23246, -37.34339], "rotation": [92.5, 0, 0], "uv": [0, 130]} ] }, { "name": "head", "parent": "neck_3", - "pivot": [0, 41.02853, -41.86327], + "pivot": [0, 45.02853, -30.86327], "cubes": [ - {"origin": [-7.5, 36.52383, -48.06757], "size": [15, 12, 15], "pivot": [0, 41.23246, -37.34339], "rotation": [-32.5, 0, 0], "uv": [0, 135]}, - {"origin": [-6.5, 41.52853, -63.61327], "size": [13, 10, 11], "inflate": 0.01, "uv": [170, 166]}, - {"origin": [-6.5, 39.52853, -60.61327], "size": [13, 2, 8], "inflate": 0.01, "uv": [194, 121]}, + {"origin": [-7.5, 36.52383, -48.06757], "size": [15, 12, 15], "pivot": [0, 41.23246, -37.34339], "rotation": [-32.5, 0, 0], "uv": [0, 103]}, + {"origin": [-7.5, 41.52853, -63.61327], "size": [15, 10, 11], "inflate": 0.01, "uv": [169, 134]}, + {"origin": [-6.5, 39.52853, -60.61327], "size": [13, 2, 8], "inflate": 0.01, "uv": [214, 111]}, + {"origin": [-10.25, 51.52853, -49.61327], "size": [5, 4, 21], "inflate": 0.01, "pivot": [-7.75, 55.52853, -37.86327], "rotation": [0, -22.5, 0], "uv": [204, 72]}, + {"origin": [-10.25, 55.52853, -32.61327], "size": [5, 4, 4], "inflate": 0.01, "pivot": [-7.75, 55.52853, -37.86327], "rotation": [0, -22.5, 0], "uv": [204, 97]}, + {"origin": [5.25, 51.52853, -49.61327], "size": [5, 4, 21], "inflate": 0.01, "pivot": [7.75, 55.52853, -37.86327], "rotation": [0, 22.5, 0], "uv": [204, 72], "mirror": true}, + {"origin": [5.25, 55.52853, -32.61327], "size": [5, 4, 4], "inflate": 0.01, "pivot": [7.75, 55.52853, -37.86327], "rotation": [0, 22.5, 0], "uv": [204, 97], "mirror": true}, + {"origin": [-7.6, 47.07853, -49.36327], "size": [0, 2, 1], "inflate": 0.01, "uv": [217, 8]}, + {"origin": [7.6, 47.07853, -49.36327], "size": [0, 2, 1], "inflate": 0.01, "uv": [217, 8], "mirror": true}, {"origin": [-7.5, 43.52853, -52.61327], "size": [15, 8, 11], "inflate": 0.01, "uv": [168, 0]}, - {"origin": [4.5, 50.52853, -52.71327], "size": [4, 2, 9], "inflate": 0.01, "uv": [140, 34]}, - {"origin": [-8.5, 50.52853, -52.71327], "size": [4, 2, 9], "inflate": 0.01, "uv": [140, 34], "mirror": true}, - {"origin": [4.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [80, 110]}, - {"origin": [-6.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [80, 110], "mirror": true}, - {"origin": [0, 51.52853, -63.61327], "size": [0, 10, 32], "uv": [0, 93]}, - {"origin": [-7.5, 43.52853, -44.11327], "size": [0, 10, 16], "pivot": [-7.5, 46.52853, -42.11327], "rotation": [0, -25, 0], "uv": [0, 188], "mirror": true}, - {"origin": [-7.2, 43.52853, -42.11327], "size": [0, 10, 16], "pivot": [-7.5, 46.52853, -42.11327], "rotation": [57.5, -25, 0], "uv": [0, 188], "mirror": true}, - {"origin": [-7.5, 38.52853, -42.11327], "size": [0, 6, 11], "pivot": [-7.5, 41.52853, -42.11327], "rotation": [0, -32.5, 0], "uv": [64, 93], "mirror": true}, - {"origin": [-7.4, 38.52853, -42.11327], "size": [0, 6, 11], "pivot": [-7.5, 41.52853, -42.11327], "rotation": [-47, -32.5, 0], "uv": [64, 93], "mirror": true}, - {"origin": [7.2, 43.52853, -42.11327], "size": [0, 10, 16], "pivot": [7.5, 46.52853, -42.11327], "rotation": [57.5, 25, 0], "uv": [0, 188]}, - {"origin": [7.5, 43.52853, -44.11327], "size": [0, 10, 16], "pivot": [7.5, 46.52853, -42.11327], "rotation": [0, 25, 0], "uv": [0, 188]}, - {"origin": [7.5, 38.52853, -42.11327], "size": [0, 6, 11], "pivot": [7.5, 41.52853, -42.11327], "rotation": [0, 32.5, 0], "uv": [64, 93]}, - {"origin": [7.4, 38.52853, -42.11327], "size": [0, 6, 11], "pivot": [7.5, 41.52853, -42.11327], "rotation": [-47, 32.5, 0], "uv": [64, 93]} + {"origin": [4.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [76, 56]}, + {"origin": [-6.5, 34.92853, -62.61327], "size": [2, 7, 2], "inflate": -0.1, "uv": [76, 56], "mirror": true}, + {"origin": [0, 51.52853, -63.61327], "size": [0, 10, 32], "uv": [0, 61]}, + {"origin": [-7.25, 49.52853, -64.61327], "size": [0, 10, 32], "pivot": [-7.25, 54.52853, -48.61327], "rotation": [0, -22.5, 0], "uv": [0, 61]}, + {"origin": [7.25, 49.52853, -64.61327], "size": [0, 10, 32], "pivot": [7.25, 54.52853, -48.61327], "rotation": [0, 22.5, 0], "uv": [0, 61], "mirror": true}, + {"origin": [-6.7, 38.52853, -46.11327], "size": [0, 14, 11], "pivot": [-6.7, 46.52853, -44.11327], "rotation": [0, -25, 0], "uv": [113, 90], "mirror": true}, + {"origin": [-11.54484, 34.52853, -47.13192], "size": [0, 19, 28], "pivot": [-11.54484, 45.02853, -33.13192], "rotation": [0, -25, 0], "uv": [55, 142], "mirror": true}, + {"origin": [11.54484, 34.52853, -47.13192], "size": [0, 19, 28], "pivot": [11.54484, 45.02853, -33.13192], "rotation": [0, 25, 0], "uv": [55, 142]}, + {"origin": [-8.67916, 37.77853, -46.94119], "size": [0, 9, 11], "pivot": [-7.67916, 43.27853, -41.44119], "rotation": [-12.5, -25, 0], "uv": [113, 90], "mirror": true}, + {"origin": [8.67916, 37.77853, -46.94119], "size": [0, 9, 11], "pivot": [7.67916, 43.27853, -41.44119], "rotation": [-12.5, 25, 0], "uv": [113, 90]}, + {"origin": [7.5, 38.52853, -44.11327], "size": [0, 14, 11], "pivot": [7.5, 46.52853, -42.11327], "rotation": [0, 25, 0], "uv": [113, 90]} + ] + }, + { + "name": "eye_brow_r", + "parent": "head", + "pivot": [-6.5, 50.52853, -47.61327], + "cubes": [ + {"origin": [-8.5, 48.52853, -52.61327], "size": [4, 4, 10], "uv": [211, 10]} + ] + }, + { + "name": "eye_brow_l", + "parent": "head", + "pivot": [6.5, 50.52853, -47.61327], + "cubes": [ + {"origin": [4.5, 48.52853, -52.61327], "size": [4, 4, 10], "uv": [211, 10], "mirror": true} ] }, { @@ -85,7 +105,7 @@ "parent": "head", "pivot": [0, 41.02853, -41.86327], "cubes": [ - {"origin": [-7.5, 38.52853, -52.61327], "size": [15, 5, 11], "inflate": 0.01, "uv": [56, 186]}, + {"origin": [-7.5, 38.52853, -52.61327], "size": [15, 5, 11], "inflate": 0.01, "uv": [56, 154]}, {"origin": [-5.5, 38.52853, -62.61327], "size": [11, 5, 10], "inflate": 0.01, "uv": [98, 34]}, {"origin": [-5.5, 43.52853, -62.61327], "size": [11, 2, 10], "inflate": 0.01, "uv": [168, 19]} ] @@ -95,7 +115,7 @@ "parent": "jaw", "pivot": [0, 45.52853, -44.73827], "cubes": [ - {"origin": [-3.5, 44.52853, -52.61327], "size": [7, 2, 11], "uv": [194, 131]} + {"origin": [-3.5, 44.52853, -52.61327], "size": [7, 2, 11], "uv": [214, 121]} ] }, { @@ -103,7 +123,7 @@ "parent": "tongue", "pivot": [0, 45.52853, -52.11327], "cubes": [ - {"origin": [-3, 45.02853, -60.61327], "size": [6, 1, 8], "uv": [140, 192]} + {"origin": [-3, 45.02853, -60.61327], "size": [6, 1, 8], "uv": [140, 160]} ] }, { @@ -111,17 +131,17 @@ "parent": "tongue_2", "pivot": [0, 45.52853, -60.61327], "cubes": [ - {"origin": [1, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [64, 110]}, - {"origin": [-3, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [64, 110], "mirror": true} + {"origin": [1, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [60, 56]}, + {"origin": [-3, 45.02853, -66.61327], "size": [2, 1, 6], "uv": [60, 56], "mirror": true} ] }, { "name": "tail", - "parent": "group2", + "parent": "Basilisk", "pivot": [0.05556, 10.92239, -11.85013], "cubes": [ {"origin": [-7, -0.07761, -10.29457], "size": [14, 14, 35], "uv": [0, 0]}, - {"origin": [0, 13.92239, -10.29457], "size": [0, 6, 35], "uv": [88, 88]} + {"origin": [0, 13.92239, -10.29457], "size": [0, 6, 35], "uv": [88, 56]} ] }, { @@ -130,7 +150,7 @@ "pivot": [0.07143, 10.63668, 23.70543], "cubes": [ {"origin": [-6.5, 0.42239, 24.70543], "size": [13, 13, 31], "uv": [0, 49]}, - {"origin": [0, 12.92239, 24.70543], "size": [0, 6, 31], "uv": [132, 129]} + {"origin": [0, 12.92239, 24.70543], "size": [0, 6, 31], "uv": [132, 97]} ] }, { @@ -139,7 +159,7 @@ "pivot": [0.1, 10.32239, 55.70543], "cubes": [ {"origin": [-6, 0.92239, 55.70543], "size": [12, 12, 27], "uv": [88, 49]}, - {"origin": [0, 12.92239, 55.70543], "size": [0, 6, 27], "uv": [158, 88]} + {"origin": [0, 12.92239, 55.70543], "size": [0, 6, 27], "uv": [178, 78]} ] }, { @@ -147,8 +167,7 @@ "parent": "tail_3", "pivot": [0.16667, 9.58906, 82.70543], "cubes": [ - {"origin": [-5.5, 1.92239, 82.70543], "size": [11, 10, 16], "uv": [166, 61]}, - {"origin": [0, 11.92239, 82.70543], "size": [0, 6, 16], "uv": [108, 192]} + {"origin": [-5.5, 1.92239, 82.70543], "size": [11, 10, 16], "uv": [166, 61]} ] }, { @@ -156,7 +175,7 @@ "parent": "tail_4", "pivot": [0.5, 6.92239, 98.70543], "cubes": [ - {"origin": [-2, 3.92239, 98.70543], "size": [5, 6, 20], "uv": [120, 166]} + {"origin": [-2.5, 3.92239, 98.70543], "size": [5, 6, 20], "uv": [120, 134]} ] } ] diff --git a/common/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json b/common/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json new file mode 100644 index 00000000..41c8d1c3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json @@ -0,0 +1,103 @@ +{ + "format_version": "1.21.11", + "render_type": "cutout", + "credit": "Made with Blockbench", + "texture_size": [32, 32], + "textures": { + "0": "antarchy:block/fallen_king_crown", + "particle": "antarchy:block/fallen_king_crown" + }, + "elements": [ + { + "from": [3.5, 0, 12.5], + "to": [12.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [9, 0, 4.5, 4.5], "texture": "#0"}, + "east": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "west": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "up": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"}, + "down": {"uv": [4.5, 0, 9, 4.5], "texture": "#0"} + } + }, + { + "from": [3.5, 0, 3.5], + "to": [3.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "east": {"uv": [9, 4.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "west": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "up": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"}, + "down": {"uv": [4.5, 4.5, 9, 9], "texture": "#0"} + } + }, + { + "from": [12.5, 0, 3.5], + "to": [12.5, 9, 12.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "east": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "south": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "west": {"uv": [4.5, 4.5, 0, 9], "texture": "#0"}, + "up": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"}, + "down": {"uv": [0, 4.5, 4.5, 9], "texture": "#0"} + } + }, + { + "from": [3.5, 0, 3.5], + "to": [12.5, 9, 3.5], + "rotation": {"angle": 0, "axis": "y", "origin": [3.5, 0, 3.5]}, + "faces": { + "north": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "east": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "south": {"uv": [4.5, 0, 0, 4.5], "texture": "#0"}, + "west": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "up": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"}, + "down": {"uv": [0, 0, 4.5, 4.5], "texture": "#0"} + } + }, + { + "from": [7, 5.5, 3.4], + "to": [9, 8.5, 3.4], + "rotation": {"angle": 0, "axis": "y", "origin": [7, 1.5, 3.4]}, + "faces": { + "north": {"uv": [15, 14.5, 16, 16], "texture": "#0"}, + "east": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "south": {"uv": [1, 7, 0, 8.5], "texture": "#0"}, + "west": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "up": {"uv": [0, 7, 1, 8.5], "texture": "#0"}, + "down": {"uv": [0, 7, 1, 8.5], "texture": "#0"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "translation": [0, 2, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, -135, 0], + "translation": [0, 2, 0], + "scale": [0.4, 0.4, 0.4] + }, + "head": { + "translation": [0, 9.5, 0], + "scale": [1.7, 1.7, 1.7] + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/entity/basilisk.png b/common/src/main/resources/assets/antarchy/textures/entity/basilisk.png index 286da995..877f6c16 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/basilisk.png and b/common/src/main/resources/assets/antarchy/textures/entity/basilisk.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png b/common/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png deleted file mode 100644 index e6159677..00000000 Binary files a/common/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png and /dev/null differ diff --git a/common/src/main/resources/pack.mcmeta b/common/src/main/resources/pack.mcmeta index a056c9a3..75ba51bc 100644 --- a/common/src/main/resources/pack.mcmeta +++ b/common/src/main/resources/pack.mcmeta @@ -1,7 +1,7 @@ { "pack": { - "description": "Integrated Antarchy mod resources", + "description": "Antarchy mod resources", "pack_format": 15, - "_comment": "BOOGALOO" + "_comment": "ANTS" } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 7c174c51..a50eed9f 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -39,7 +39,6 @@ import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.AppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.EnchantedGoldenAppleCow; import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.GoldenAppleCow; -import com.craisinlord.antarchy.content.entity.AppleCowEntityVariants.HoneyedAppleCow; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; import com.craisinlord.antarchy.content.entity.BedBugEntity; import com.craisinlord.antarchy.content.entity.ButterflyEntity; @@ -217,11 +216,6 @@ import net.minecraft.world.level.block.Mirror; import net.minecraft.world.level.block.Rotation; public final class AntarchyFabricContent { - public static final boolean CREATE_LOADED = isModLoaded("create"); - private static final ResourceLocation THORAXIS_DIMENSION_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "thoraxis"); - private static final long THORAXIS_SPAWN_DEBUG_INTERVAL = 200L; - private static long lastThoraxisSpawnSummaryLogTick = Long.MIN_VALUE; - private static long lastThoraxisSpawnPlacementLogTick = Long.MIN_VALUE; private static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); private static final DeferredRegister.Items ITEMS = DeferredRegister.createItems(Antarchy.MODID); private static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, Antarchy.MODID); @@ -782,6 +776,13 @@ public final class AntarchyFabricContent { () -> new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + public static final DeferredBlock FALLEN_KING_CROWN_BLOCK = BLOCKS.register("fallen_king_crown", + () -> new Block(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.METAL) + .noOcclusion() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false))); public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud", @@ -1364,9 +1365,6 @@ public final class AntarchyFabricContent { () -> buildCowType(GoldenAppleCow::new, "golden_apple_cow")); public static final DeferredHolder, EntityType> ENCHANTED_GOLDEN_APPLE_COW = ENTITY_TYPES.register("enchanted_golden_apple_cow", () -> buildCowType(EnchantedGoldenAppleCow::new, "enchanted_golden_apple_cow")); - public static final DeferredHolder, EntityType> HONEYED_APPLE_COW = CREATE_LOADED - ? ENTITY_TYPES.register("honeyed_apple_cow", () -> buildCowType(HoneyedAppleCow::new, "honeyed_apple_cow")) - : null; public static final DeferredHolder, EntityType> DR_TRAYAURUS = ENTITY_TYPES.register("dr_trayaurus", () -> EntityType.Builder.of(DrTrayaurusEntity::new, MobCategory.MISC) .sized(0.6F, 1.95F) @@ -1476,9 +1474,6 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(GOLDEN_APPLE_COW, 0xFFE14A, 0x32FF32, new Item.Properties())); public static final DeferredItem ENCHANTED_GOLDEN_APPLE_COW_SPAWN_EGG = ITEMS.register("enchanted_golden_apple_cow_spawn_egg", () -> new DeferredSpawnEggItem(ENCHANTED_GOLDEN_APPLE_COW, 0x7040B6, 0xFFE14A, new Item.Properties())); - public static final DeferredItem HONEYED_APPLE_COW_SPAWN_EGG = CREATE_LOADED - ? ITEMS.register("honeyed_apple_cow_spawn_egg", () -> new DeferredSpawnEggItem(HONEYED_APPLE_COW, 0xC07A23, 0xF0C75A, new Item.Properties())) - : null; public static final DeferredItem DR_TRAYAURUS_SPAWN_EGG = ITEMS.register("dr_trayaurus_spawn_egg", () -> new DeferredSpawnEggItem(DR_TRAYAURUS, 0xB7A27B, 0x4A3D29, new Item.Properties())); public static final DeferredItem WASP_SPAWN_EGG = ITEMS.register("wasp_spawn_egg", @@ -1575,10 +1570,6 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(APPLE_COW.get(), cowAttributes); FabricDefaultAttributeRegistry.register(GOLDEN_APPLE_COW.get(), cowAttributes); FabricDefaultAttributeRegistry.register(ENCHANTED_GOLDEN_APPLE_COW.get(), cowAttributes); - if (CREATE_LOADED && HONEYED_APPLE_COW != null) { - FabricDefaultAttributeRegistry.register(HONEYED_APPLE_COW.get(), cowAttributes); - } - FabricDefaultAttributeRegistry.register(DR_TRAYAURUS.get(), Villager.createAttributes().build()); FabricDefaultAttributeRegistry.register(CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(KRAKEN.get(), KrakenEntity.createAttributes().build()); @@ -1622,9 +1613,6 @@ public final class AntarchyFabricContent { SpawnPlacements.register(APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); SpawnPlacements.register(GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); SpawnPlacements.register(ENCHANTED_GOLDEN_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - if (CREATE_LOADED && HONEYED_APPLE_COW != null) { - SpawnPlacements.register(HONEYED_APPLE_COW.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Cow::checkAnimalSpawnRules); - } SpawnPlacements.register(CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn); SpawnPlacements.register(WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn); SpawnPlacements.register(BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java index bafe0507..24a38dc8 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/AntarchyFabricClientBootstrap.java @@ -183,6 +183,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TORCHFLOWER_BUSH.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.HUSHWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CORNEA_STALK.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.FALLEN_KING_CROWN_BLOCK.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownLayer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownLayer.java index 2a274138..3805ec5c 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownLayer.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/FallenKingCrownLayer.java @@ -2,28 +2,24 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.model.PlayerModel; import net.minecraft.client.player.AbstractClientPlayer; import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.client.renderer.entity.layers.RenderLayer; -import net.minecraft.client.resources.model.ModelResourceLocation; import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.item.ItemDisplayContext; import net.minecraft.world.item.ItemStack; public final class FallenKingCrownLayer extends RenderLayer> { - private static final ModelResourceLocation WORN_MODEL = ModelResourceLocation.inventory( - net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("antarchy", "fallen_king_crown_worn") - ); - private final ItemRenderer itemRenderer; + private final BlockRenderDispatcher blockRenderer; public FallenKingCrownLayer(RenderLayerParent> renderer) { super(renderer); - this.itemRenderer = Minecraft.getInstance().getItemRenderer(); + this.blockRenderer = Minecraft.getInstance().getBlockRenderer(); } @Override @@ -46,15 +42,15 @@ public final class FallenKingCrownLayer extends RenderLayer> { - private static final ModelResourceLocation WORN_MODEL = ModelResourceLocation.inventory( - net.minecraft.resources.ResourceLocation.fromNamespaceAndPath("antarchy", "fallen_king_crown_worn") - ); - private final ItemRenderer itemRenderer; + private final BlockRenderDispatcher blockRenderer; public FallenKingCrownLayer(RenderLayerParent> renderer) { super(renderer); - this.itemRenderer = Minecraft.getInstance().getItemRenderer(); + this.blockRenderer = Minecraft.getInstance().getBlockRenderer(); } @Override @@ -46,15 +43,15 @@ public final class FallenKingCrownLayer extends RenderLayer new com.craisinlord.antarchy.content.block.AntimetalScaffoldingBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SCAFFOLDING))); public static final DeferredBlock CORNEA_STALK = BLOCKS.register("cornea_stalk", () -> new CorneaStalkBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SWEET_BERRY_BUSH).randomTicks())); + public static final DeferredBlock FALLEN_KING_CROWN = BLOCKS.register("fallen_king_crown", + () -> new Block(BlockBehaviour.Properties.of() + .strength(0.2F) + .sound(SoundType.METAL) + .noOcclusion() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false))); public static final DeferredBlock SMALL_BLOOD_CRYSTAL_BUD = BLOCKS.register("small_blood_crystal_bud", () -> new AmethystClusterBlock(3.0F, 4.0F, BlockBehaviour.Properties.ofFullCopy(Blocks.SMALL_AMETHYST_BUD))); public static final DeferredBlock MEDIUM_BLOOD_CRYSTAL_BUD = BLOCKS.register("medium_blood_crystal_bud",