From bd09c6ec7f62d1b2c914ac75eb425f64eee738df Mon Sep 17 00:00:00 2001 From: craisinlord Date: Mon, 22 Jun 2026 16:47:21 -0500 Subject: [PATCH] Made triffid take reduced projectile damage Fixed fallen king crown New basilisk texture Overhaul nightmare AI --- .../client/renderer/BasiliskRenderer.java | 20 + .../content/entity/TriffidEntity.java | 4 + .../entity/basilisk/BasiliskEntity.java | 85 +- .../entity/nightmare/NightmareEntity.java | 792 ++--- .../mixins/client/SplashManagerMixin.java | 1 + .../animations/basilisk.animation.json | 2945 +++++++---------- .../assets/antarchy/geo/basilisk.geo.json | 95 +- .../models/block/fallen_king_crown.json | 103 + .../antarchy/textures/entity/basilisk.png | Bin 21444 -> 20837 bytes .../armor/fallen_king_crown_layer_1.png | Bin 412 -> 0 bytes common/src/main/resources/pack.mcmeta | 4 +- .../fabric/AntarchyFabricContent.java | 26 +- .../client/AntarchyFabricClientBootstrap.java | 1 + .../fabric/client/FallenKingCrownLayer.java | 24 +- .../neoforge/client/FallenKingCrownLayer.java | 25 +- .../registry/AntarchyNeoforgeBlocks.java | 7 + 16 files changed, 1798 insertions(+), 2334 deletions(-) create mode 100644 common/src/main/resources/assets/antarchy/models/block/fallen_king_crown.json delete mode 100644 common/src/main/resources/assets/antarchy/textures/models/armor/fallen_king_crown_layer_1.png 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 286da995c4422ec0e26f155391471f753213cd01..877f6c16d5ba755a64cbc610cdd7c1f9c8f27bfc 100644 GIT binary patch literal 20837 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 CoaD6t 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 e615967701099c758ba0bbfe17b7ae220a0fad35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmV;N0b~A&P)?VUZ@(bX`a`M-@Mq($M(p@)M<195p}#LB15 z7&tMQecYJ`8**AL3TMvyz=;L&D;>k}^|%N2&j-C6%zNZIw)E1C<)5xVMi*mEp!*7_ zv2g$5Jg?kFV-5{?TO7Rl$LFq{xyMGfm(rDfm(rDfzB%M9B<;q=rneg zfc~gEPe2>x 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",