From 70e4479f1981b3c18a793703d19eade8ce5548bd Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 24 Jun 2026 20:50:00 -0500 Subject: [PATCH 01/25] Added first implemenation of Toreterror, shellstone, water cannon, toreterror arena, primordial armor --- .../antarchy/config/AntarchySettings.java | 4 + .../antarchy/content/AntarchyObjects.java | 12 + .../client/renderer/ToreterrorRenderer.java | 2 +- .../client/renderer/WaterBombRenderer.java | 3 +- .../content/damage/AntarchyDamageSources.java | 29 +++ .../content/damage/AntarchyDamageTypes.java | 18 ++ .../antarchy/content/entity/BomberEntity.java | 11 +- .../content/entity/ToreterrorEntity.java | 180 ++++++++++++--- .../content/entity/WaterBombEntity.java | 36 ++- .../content/item/PrimordialArmorItem.java | 132 +++++++++++ .../mixins/gravity/LivingEntityMixin.java | 1 + .../mixins/gravity/PlayerAttackMixin.java | 35 +++ .../mossy_shellstone_brick_slab.json | 13 ++ .../mossy_shellstone_brick_stairs.json | 209 ++++++++++++++++++ .../mossy_shellstone_brick_wall.json | 40 ++++ .../resources/assets/antarchy/lang/en_us.json | 21 ++ .../block/mossy_shellstone_brick_slab.json | 8 + .../mossy_shellstone_brick_slab_top.json | 8 + .../block/mossy_shellstone_brick_stairs.json | 8 + .../mossy_shellstone_brick_stairs_inner.json | 8 + .../mossy_shellstone_brick_stairs_outer.json | 8 + ...mossy_shellstone_brick_wall_inventory.json | 6 + .../mossy_shellstone_brick_wall_post.json | 6 + .../mossy_shellstone_brick_wall_side.json | 6 + ...mossy_shellstone_brick_wall_side_tall.json | 6 + .../item/mossy_shellstone_brick_slab.json | 3 + .../item/mossy_shellstone_brick_stairs.json | 3 + .../item/mossy_shellstone_brick_wall.json | 3 + .../models/item/water_cannon_held_geo.json | 12 +- .../antarchy/textures/entity/toreterror.png | Bin 13527 -> 10190 bytes .../antarchy/textures/item/jumpy_boots.png | Bin 0 -> 382 bytes .../models/armor/jumpy_boots_layer_1.png | Bin 0 -> 481 bytes .../antarchy/damage_type/toreterror_jump.json | 7 + .../antarchy/damage_type/toreterror_spin.json | 7 + .../antarchy/damage_type/water_soaked.json | 7 + .../blocks/mossy_shellstone_brick_slab.json | 35 +++ .../blocks/mossy_shellstone_brick_stairs.json | 16 ++ .../blocks/mossy_shellstone_brick_wall.json | 16 ++ .../loot_table/entities/toreterror.json | 1 + .../recipe/mossy_shellstone_brick_slab.json | 16 ++ ..._mossy_shellstone_bricks_stonecutting.json | 9 + .../recipe/mossy_shellstone_brick_stairs.json | 18 ++ ..._mossy_shellstone_bricks_stonecutting.json | 9 + .../recipe/mossy_shellstone_brick_wall.json | 17 ++ ..._mossy_shellstone_bricks_stonecutting.json | 9 + .../fallen_kingdom_castle1.nbt | Bin 884048 -> 0 bytes .../fallen_kingdom_castle2.nbt | Bin 184792 -> 0 bytes .../fallen_kingdom_castle3.nbt | Bin 1121 -> 0 bytes .../fallen_kingdom_castle_banner.nbt | Bin 2411 -> 0 bytes .../fallen_kingdom_castle_bridge.nbt | Bin 14483 -> 0 bytes .../fallen_kingdom_castle_flag.nbt | Bin 2395 -> 0 bytes .../toreterror_arena/toreterror_arena.nbt | Bin 0 -> 593442 bytes .../toreterror_arena_bottom.nbt | Bin 0 -> 45637 bytes .../tags/blocks/moggle_vision_blacklist.json | 15 -- .../tags/worldgen/biome/has_shellstone.json | 32 +++ .../toreterror_arena_biomes.json | 23 ++ .../configured_feature/shellstone_blob.json | 18 ++ .../placed_feature/shellstone_lower.json | 27 +++ .../placed_feature/shellstone_upper.json | 27 +++ .../worldgen/structure/toreterror_arena.json | 15 ++ .../structure_set/toreterror_arena.json | 14 ++ .../toreterror_arena/toreterror_arena.json | 15 ++ .../toreterror_arena_bottom.json | 15 ++ .../structure/larger_locate_search.json | 8 + .../tags/block/mineable/pickaxe.json | 3 + .../tags/block/needs_stone_tool.json | 3 + .../data/minecraft/tags/block/slabs.json | 1 + .../data/minecraft/tags/block/stairs.json | 1 + .../data/minecraft/tags/block/walls.json | 3 +- .../data/minecraft/tags/item/slabs.json | 1 + .../data/minecraft/tags/item/stairs.json | 1 + .../data/minecraft/tags/item/walls.json | 1 + .../fabric/AntarchyConfigModuleFabric.java | 1 + .../antarchy/fabric/AntarchyFabric.java | 35 +++ .../fabric/AntarchyFabricContent.java | 36 ++- .../client/ToreterrorCameraShakeMixin.java | 47 ++++ .../resources/antarchy-fabric.mixins.json | 1 + .../AntarchyConfigModuleNeoforge.java | 1 + .../antarchy/neoforge/AntarchyNeoforge.java | 3 + .../neoforge/AntarchyToolsConfig.java | 3 + .../client/ToreterrorCameraShakeHandler.java | 45 ++++ .../registry/AntarchyNeoforgeBlocks.java | 6 + .../AntarchyNeoforgeCreativeModeTabs.java | 101 +++++---- .../registry/AntarchyNeoforgeEntites.java | 2 +- .../registry/AntarchyNeoforgeItems.java | 3 + .../shellstone_in_oceans_and_beaches.json | 9 + 86 files changed, 1399 insertions(+), 115 deletions(-) create mode 100644 common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json create mode 100644 common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png create mode 100644 common/src/main/resources/assets/antarchy/textures/models/armor/jumpy_boots_layer_1.png create mode 100644 common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json create mode 100644 common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json create mode 100644 common/src/main/resources/data/antarchy/damage_type/water_soaked.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json create mode 100644 common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle2.nbt delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle3.nbt delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_banner.nbt delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt delete mode 100644 common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_flag.nbt create mode 100644 common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt create mode 100644 common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena_bottom.nbt delete mode 100644 common/src/main/resources/data/antarchy/tags/blocks/moggle_vision_blacklist.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/has_shellstone.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/shellstone_blob.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_lower.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/shellstone_upper.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/structure_set/toreterror_arena.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/template_pool/toreterror_arena/toreterror_arena_bottom.json create mode 100644 common/src/main/resources/data/integrated_api/tags/worldgen/structure/larger_locate_search.json create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 2efe7e24..d2c9a0ae 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -426,6 +426,7 @@ public final class AntarchySettings { private static double ductTapeRepairPercentPerUse = 0.25D; private static double ultimateArmorKnockbackResistance = 0.1D; private static double nightmareArmorKnockbackResistance = 0.1D; + private static double primordialArmorKnockbackPerPiece = 0.5D; private static int fallenKingCrownArmorValue = 2; private static double fallenKingCrownArmorToughness = 0.0D; private static boolean elythiaFireflyParticlesEnabled = true; @@ -2275,6 +2276,9 @@ public final class AntarchySettings { public static double nightmareArmorKnockbackResistance() { return nightmareArmorKnockbackResistance; } public static void setNightmareArmorKnockbackResistance(double value) { nightmareArmorKnockbackResistance = value; } + public static double primordialArmorKnockbackPerPiece() { return primordialArmorKnockbackPerPiece; } + public static void setPrimordialArmorKnockbackPerPiece(double value) { primordialArmorKnockbackPerPiece = value; } + public static int fallenKingCrownArmorValue() { return fallenKingCrownArmorValue; } public static void setFallenKingCrownArmorValue(int value) { fallenKingCrownArmorValue = value; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index d70e3ecc..696e804c 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -103,6 +103,12 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier CRACKED_SHELLSTONE_BRICKS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_STAIRS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_SLAB = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier MOSSY_SHELLSTONE_BRICK_WALL = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier SHELLSTONE_STAIRS = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier SHELLSTONE_SLAB = (Supplier) UNBOUND; @@ -228,6 +234,9 @@ public final class AntarchyObjects { Supplier chiseledShellstone, Supplier mossyShellstoneBricks, Supplier crackedShellstoneBricks, + Supplier mossyShellstoneBrickStairs, + Supplier mossyShellstoneBrickSlab, + Supplier mossyShellstoneBrickWall, Supplier shellstoneStairs, Supplier shellstoneSlab, Supplier shellstoneWall, @@ -305,6 +314,9 @@ public final class AntarchyObjects { CHISELED_SHELLSTONE = chiseledShellstone; MOSSY_SHELLSTONE_BRICKS = mossyShellstoneBricks; CRACKED_SHELLSTONE_BRICKS = crackedShellstoneBricks; + MOSSY_SHELLSTONE_BRICK_STAIRS = mossyShellstoneBrickStairs; + MOSSY_SHELLSTONE_BRICK_SLAB = mossyShellstoneBrickSlab; + MOSSY_SHELLSTONE_BRICK_WALL = mossyShellstoneBrickWall; SHELLSTONE_STAIRS = shellstoneStairs; SHELLSTONE_SLAB = shellstoneSlab; SHELLSTONE_WALL = shellstoneWall; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java index a4d3546d..cba019e3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/ToreterrorRenderer.java @@ -9,7 +9,7 @@ public class ToreterrorRenderer extends GeoEntityRenderer { public ToreterrorRenderer(EntityRendererProvider.Context context) { super(context, new ToreterrorModel()); - this.shadowRadius = 2.0F; + this.shadowRadius = 1.6F; } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java index e19b441a..010f1a51 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/WaterBombRenderer.java @@ -29,7 +29,8 @@ public class WaterBombRenderer extends EntityRenderer { public void render(WaterBombEntity entity, float entityYaw, float partialTick, PoseStack poseStack, MultiBufferSource buffer, int packedLight) { poseStack.pushPose(); poseStack.mulPose(this.entityRenderDispatcher.cameraOrientation()); - poseStack.scale(0.5F, 0.5F, 0.5F); + float scale = entity.isHuge() ? 1.5F : 0.5F; + poseStack.scale(scale, scale, scale); VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityTranslucent(WATER_TEXTURE)); PoseStack.Pose pose = poseStack.last(); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java index 676c3522..15568313 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageSources.java @@ -5,6 +5,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.Level; +import org.jetbrains.annotations.Nullable; public final class AntarchyDamageSources { public static DamageSource krakenMauling(ServerLevel level, Entity attacker) { @@ -87,6 +88,34 @@ public final class AntarchyDamageSources { ); } + public static DamageSource toreterrorSpin(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_SPIN), + attacker + ); + } + + public static DamageSource toreterrorJump(ServerLevel level, Entity attacker) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.TORETERROR_JUMP), + attacker + ); + } + + public static DamageSource waterSoaked(Level level, @Nullable Entity directEntity, @Nullable Entity causingEntity) { + return new DamageSource( + level.registryAccess() + .registryOrThrow(Registries.DAMAGE_TYPE) + .getHolderOrThrow(AntarchyDamageTypes.WATER_SOAKED), + directEntity, + causingEntity + ); + } + private AntarchyDamageSources() { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java index 199db290..424ec2c8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/damage/AntarchyDamageTypes.java @@ -61,6 +61,24 @@ public final class AntarchyDamageTypes { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cornea_stalk_prick") ); + public static final ResourceKey TORETERROR_SPIN = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toreterror_spin") + ); + + public static final ResourceKey TORETERROR_JUMP = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "toreterror_jump") + ); + + public static final ResourceKey WATER_SOAKED = + ResourceKey.create( + Registries.DAMAGE_TYPE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "water_soaked") + ); + private AntarchyDamageTypes() { } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java index d2608495..64bbae50 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/BomberEntity.java @@ -133,10 +133,19 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { - if (source.is(DamageTypeTags.IS_FIRE)) { + if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) { this.primeFuse(); return false; } + if (this.detonating) { + Entity attacker = source.getDirectEntity(); + if (attacker != null) { + Vec3 knockDir = this.position().subtract(attacker.position()).normalize(); + this.push(knockDir.x * 0.5, 0.2, knockDir.z * 0.5); + this.hurtMarked = true; + } + return false; + } Entity directEntity = source.getDirectEntity(); if (directEntity instanceof AbstractArrow arrow && arrow.isOnFire()) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 8d1f2a8c..4b6fd083 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.nbt.CompoundTag; @@ -25,6 +26,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.MoveTowardsTargetGoal; import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; @@ -53,6 +55,8 @@ import java.util.UUID; public class ToreterrorEntity extends Monster implements GeoEntity { private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor PHASE_2 = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor JUMP_SHAKING = SynchedEntityData.defineId(ToreterrorEntity.class, EntityDataSerializers.BOOLEAN); private static final int ANIM_IDLE = 0; private static final int ANIM_WALK = 1; @@ -60,29 +64,37 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private static final int ANIM_JUMP_ATTACK = 3; private static final int ANIM_SPIN = 4; private static final int ANIM_DEATH = 5; + private static final int ANIM_RAPID_SHOOT = 6; + + private static final int ATTACK_RAPID_FIRE = 0; + private static final int ATTACK_HUGE_BOMB = 1; + private static final int ATTACK_BOMBERS = 2; private static final int DEATH_TICKS = 60; - private static final int SHOOT_TOTAL_TICKS = 80; + private static final int SHOOT_TOTAL_TICKS = 75; private static final int SHOOT_FIRE_START_TICK = 12; - private static final int SHOOT_FIRE_END_TICK = 68; - private static final int SHOOT_FIRE_INTERVAL = 8; + private static final int RAPID_FIRE_INTERVAL = 4; + private static final int RAPID_FIRE_END_TICK = 60; private static final int SHOOT_BOMBER_TICK = 12; + private static final int SHOOT_BOMBER_SECOND_TICK = 32; private static final int JUMP_TOTAL_TICKS = 40; private static final int JUMP_LAUNCH_TICK = 10; + private static final int JUMP_SHAKE_TICKS = 25; private static final int SPIN_TOTAL_TICKS = 40; private static final int SPIN_START_TICK = 3; private static final int SPIN_END_TICK = 22; private static final int SPIN_HIT_INTERVAL = 5; - private static final double RANGED_MIN_RANGE_SQR = 9.0D; + private static final double CLOSE_RANGE_SQR = 64.0D; + private static final double JUMP_RANGE_SQR = 400.0D; private static final double RANGED_MAX_RANGE_SQR = 625.0D; - private static final double MELEE_RANGE_SQR = 9.0D; private static final double SPIN_RADIUS = 4.5D; private static final double JUMP_SHOCKWAVE_RADIUS = 6.0D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("Idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation SHOOT_ANIM = RawAnimation.begin().thenPlay("shoot").thenLoop("Idle"); + private static final RawAnimation RAPID_SHOOT_ANIM = RawAnimation.begin().thenLoop("shoot"); private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_attack").thenLoop("Idle"); private static final RawAnimation SPIN_ANIM = RawAnimation.begin().thenPlay("spin_attack").thenLoop("Idle"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); @@ -98,9 +110,11 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private int spinCooldown; private boolean jumpLaunched; private boolean shockwaveApplied; - private boolean shootUseWaterBombs; + private int jumpShakeTicks; + private int shootAttackType; private boolean shootBomberFired; - private int shootNextFireElapsed; + private boolean shootBomberFiredSecond; + private int rapidFireNextTick; private final Map spinHitCooldowns = new HashMap<>(); public ToreterrorEntity(EntityType entityType, Level level) { @@ -112,7 +126,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.toreterrorHealth()) .add(Attributes.ATTACK_DAMAGE, 8.0D) - .add(Attributes.MOVEMENT_SPEED, 0.25D) + .add(Attributes.MOVEMENT_SPEED, 0.325D) .add(Attributes.FOLLOW_RANGE, 48.0D) .add(Attributes.KNOCKBACK_RESISTANCE, 0.85D) .add(Attributes.ARMOR, 10.0D); @@ -127,6 +141,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(PHASE_2, false); + builder.define(JUMP_SHAKING, false); } @Override @@ -134,9 +150,10 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.goalSelector.addGoal(1, new ToreterrorRangedGoal()); this.goalSelector.addGoal(2, new ToreterrorJumpGoal()); this.goalSelector.addGoal(3, new ToreterrorSpinGoal()); + this.goalSelector.addGoal(4, new MoveTowardsTargetGoal(this, 1.0D, 64.0F)); this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 16.0F)); this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.6D)); + this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 0.5D)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::canTargetEntity)); } @@ -151,6 +168,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { return switch (animState) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); case ANIM_SHOOT -> state.setAndContinue(SHOOT_ANIM); + case ANIM_RAPID_SHOOT -> state.setAndContinue(RAPID_SHOOT_ANIM); case ANIM_JUMP_ATTACK -> state.setAndContinue(JUMP_ANIM); case ANIM_SPIN -> state.setAndContinue(SPIN_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); @@ -171,6 +189,12 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (this.shootCooldown > 0) this.shootCooldown--; if (this.jumpCooldown > 0) this.jumpCooldown--; if (this.spinCooldown > 0) this.spinCooldown--; + if (this.jumpShakeTicks > 0) { + this.jumpShakeTicks--; + if (this.jumpShakeTicks <= 0) { + this.entityData.set(JUMP_SHAKING, false); + } + } this.spinHitCooldowns.replaceAll((uuid, cd) -> cd - 1); this.spinHitCooldowns.entrySet().removeIf(e -> e.getValue() <= 0); @@ -193,6 +217,37 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); } + @Override + public boolean hurt(DamageSource source, float amount) { + if (!this.isPhase2()) { + float halfHealth = this.getMaxHealth() * 0.5F; + if (this.getHealth() - amount <= halfHealth) { + float capDamage = this.getHealth() - halfHealth; + if (capDamage <= 0.0F) { + this.enterPhase2(); + return false; + } + boolean result = super.hurt(source, capDamage); + if (result) this.enterPhase2(); + return result; + } + } + return super.hurt(source, amount); + } + + private void enterPhase2() { + this.entityData.set(PHASE_2, true); + this.bossEvent.setColor(BossEvent.BossBarColor.RED); + } + + public boolean isPhase2() { + return this.entityData.get(PHASE_2); + } + + public boolean isJumpShaking() { + return this.entityData.get(JUMP_SHAKING); + } + @Override public void startSeenByPlayer(ServerPlayer player) { super.startSeenByPlayer(player); @@ -283,17 +338,31 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } private void tickShootAnimation() { - this.setAnimationState(ANIM_SHOOT); int elapsed = SHOOT_TOTAL_TICKS - this.shootAnimTicks; - if (this.shootUseWaterBombs) { - if (elapsed >= this.shootNextFireElapsed && this.shootNextFireElapsed <= SHOOT_FIRE_END_TICK) { - this.shootNextFireElapsed += SHOOT_FIRE_INTERVAL; - this.fireWaterBomb(); + switch (this.shootAttackType) { + case ATTACK_RAPID_FIRE -> { + this.setAnimationState(ANIM_RAPID_SHOOT); + if (elapsed >= this.rapidFireNextTick && elapsed < RAPID_FIRE_END_TICK) { + this.rapidFireNextTick += RAPID_FIRE_INTERVAL; + this.fireRapidBomb(); + } } - } else { - if (!this.shootBomberFired && elapsed >= SHOOT_BOMBER_TICK) { - this.shootBomberFired = true; - this.fireBomberBurst(); + case ATTACK_HUGE_BOMB -> { + this.setAnimationState(ANIM_SHOOT); + if (elapsed == SHOOT_FIRE_START_TICK) { + this.fireHugeBomb(); + } + } + default -> { + this.setAnimationState(ANIM_SHOOT); + if (!this.shootBomberFired && elapsed >= SHOOT_BOMBER_TICK) { + this.shootBomberFired = true; + this.fireBomberBurst(); + } + if (this.isPhase2() && !this.shootBomberFiredSecond && elapsed >= SHOOT_BOMBER_SECOND_TICK) { + this.shootBomberFiredSecond = true; + this.fireBomberBurst(); + } } } this.getNavigation().stop(); @@ -322,6 +391,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (this.jumpLaunched && this.onGround() && elapsed > JUMP_LAUNCH_TICK + 3 && !this.shockwaveApplied) { this.shockwaveApplied = true; this.applyJumpShockwave(); + this.jumpShakeTicks = JUMP_SHAKE_TICKS; + this.entityData.set(JUMP_SHAKING, true); } this.jumpAnimTicks--; if (this.jumpAnimTicks <= 0) { @@ -344,16 +415,55 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } } - private void fireWaterBomb() { + private Vec3 calcLaunchVelocity(Vec3 from, Vec3 to, double minSpeed) { + Vec3 diff = to.subtract(from); + double dh = Math.sqrt(diff.x * diff.x + diff.z * diff.z); + double dy = diff.y; + double gravity = AntarchySettings.waterBombGravity(); + // Choose travel time based on horizontal distance at minSpeed, minimum 8 ticks + double t = Math.max(8.0, dh / minSpeed); + double vx = diff.x / t; + double vz = diff.z / t; + // Compensate for gravity accumulating over t ticks + double vy = dy / t + 0.5 * gravity * t; + return new Vec3(vx, vy, vz); + } + + private void fireRapidBomb() { if (!(this.level() instanceof ServerLevel serverLevel)) return; LivingEntity target = this.getTarget(); if (target == null) return; - WaterBombEntity bomb = new WaterBombEntity(this.level(), this); - bomb.moveTo(this.getX(), this.getEyeY(), this.getZ(), this.getYRot(), 0); - bomb.shootFromRotation(this, this.getXRot(), this.getYRot(), 0.0F, 1.4F, 1.5F); + Vec3 from = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + Vec3 to = new Vec3(target.getX(), target.getEyeY(), target.getZ()); + Vec3 baseVel = calcLaunchVelocity(from, to, 1.5); + int count = this.isPhase2() ? 2 : 1; + for (int i = 0; i < count; i++) { + double spread = count > 1 ? (i - 0.5) * 0.15 : 0.0; + Vec3 vel = new Vec3(baseVel.x + spread, baseVel.y, baseVel.z - spread); + WaterBombEntity bomb = new WaterBombEntity(this.level(), this); + bomb.setPos(from.x, from.y, from.z); + bomb.setDeltaMovement(vel); + bomb.hasImpulse = true; + serverLevel.addFreshEntity(bomb); + } + } + + private void fireHugeBomb() { + if (!(this.level() instanceof ServerLevel serverLevel)) return; + LivingEntity target = this.getTarget(); + if (target == null) return; + this.getLookControl().setLookAt(target, 30.0F, 30.0F); + Vec3 from = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + Vec3 to = new Vec3(target.getX(), target.getY(), target.getZ()); + Vec3 vel = calcLaunchVelocity(from, to, 0.9); + WaterBombEntity bomb = new WaterBombEntity(this.level(), this, true); + bomb.setPos(from.x, from.y, from.z); + bomb.setDeltaMovement(vel); + bomb.hasImpulse = true; serverLevel.addFreshEntity(bomb); } + private void fireBomberBurst() { if (!(this.level() instanceof ServerLevel serverLevel)) return; LivingEntity target = this.getTarget(); @@ -380,7 +490,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { List victims = this.level().getEntitiesOfClass(LivingEntity.class, shockArea, this::canTargetEntity); float damage = (float) AntarchySettings.toreterrorJumpAttackDamage(); for (LivingEntity victim : victims) { - victim.hurt(this.damageSources().mobAttack(this), damage); + victim.hurt(AntarchyDamageSources.toreterrorJump(serverLevel, this), damage); Vec3 knockDir = victim.position().subtract(this.position()).normalize().add(0, 0.4D, 0); double knockback = AntarchySettings.toreterrorJumpAttackKnockback(); victim.push(knockDir.x * knockback, 0.5D, knockDir.z * knockback); @@ -393,14 +503,14 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private void applySpinDamage() { if (!(this.level() instanceof ServerLevel)) return; - AABB spinArea = this.getBoundingBox().inflate(SPIN_RADIUS, 2.0D, SPIN_RADIUS); + AABB spinArea = this.getBoundingBox().inflate(SPIN_RADIUS, SPIN_RADIUS, SPIN_RADIUS); List victims = this.level().getEntitiesOfClass(LivingEntity.class, spinArea, this::canTargetEntity); float damage = (float) AntarchySettings.toreterrorSpinDamage(); double knockback = AntarchySettings.toreterrorSpinKnockback(); for (LivingEntity victim : victims) { UUID id = victim.getUUID(); if (this.spinHitCooldowns.getOrDefault(id, 0) > 0) continue; - if (victim.hurt(this.damageSources().mobAttack(this), damage)) { + if (victim.hurt(AntarchyDamageSources.toreterrorSpin((ServerLevel) this.level(), this), damage)) { this.spinHitCooldowns.put(id, 20); Vec3 knockDir = victim.position().subtract(this.position()).normalize(); victim.push(knockDir.x * knockback, 0.35D, knockDir.z * knockback); @@ -428,16 +538,26 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.shootCooldown > 0) return false; double distSqr = ToreterrorEntity.this.distanceToSqr(target); - return distSqr >= RANGED_MIN_RANGE_SQR && distSqr <= RANGED_MAX_RANGE_SQR + return distSqr > CLOSE_RANGE_SQR && distSqr <= RANGED_MAX_RANGE_SQR && ToreterrorEntity.this.hasLineOfSight(target); } @Override public void start() { ToreterrorEntity.this.shootAnimTicks = SHOOT_TOTAL_TICKS; - ToreterrorEntity.this.shootUseWaterBombs = ToreterrorEntity.this.random.nextFloat() < (float) AntarchySettings.toreterrorRangedWaterBombChance(); - ToreterrorEntity.this.shootNextFireElapsed = SHOOT_FIRE_START_TICK; ToreterrorEntity.this.shootBomberFired = false; + ToreterrorEntity.this.shootBomberFiredSecond = false; + ToreterrorEntity.this.rapidFireNextTick = 0; + float roll = ToreterrorEntity.this.random.nextFloat(); + if (ToreterrorEntity.this.isPhase2()) { + if (roll < 0.5F) ToreterrorEntity.this.shootAttackType = ATTACK_RAPID_FIRE; + else if (roll < 0.65F) ToreterrorEntity.this.shootAttackType = ATTACK_HUGE_BOMB; + else ToreterrorEntity.this.shootAttackType = ATTACK_BOMBERS; + } else { + if (roll < 0.5F) ToreterrorEntity.this.shootAttackType = ATTACK_RAPID_FIRE; + else if (roll < 0.7F) ToreterrorEntity.this.shootAttackType = ATTACK_HUGE_BOMB; + else ToreterrorEntity.this.shootAttackType = ATTACK_BOMBERS; + } } @Override @@ -462,7 +582,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.jumpCooldown > 0) return false; double distSqr = ToreterrorEntity.this.distanceToSqr(target); - return distSqr <= RANGED_MAX_RANGE_SQR && ToreterrorEntity.this.onGround(); + return distSqr <= JUMP_RANGE_SQR && ToreterrorEntity.this.onGround(); } @Override @@ -493,7 +613,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { LivingEntity target = ToreterrorEntity.this.getTarget(); if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.spinCooldown > 0) return false; - return ToreterrorEntity.this.distanceToSqr(target) <= MELEE_RANGE_SQR && ToreterrorEntity.this.onGround(); + return ToreterrorEntity.this.distanceToSqr(target) <= CLOSE_RANGE_SQR && ToreterrorEntity.this.onGround(); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java index bd03bf47..f0345c08 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -18,6 +19,8 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import java.util.HashMap; @@ -26,6 +29,8 @@ import java.util.UUID; public class WaterBombEntity extends ThrowableProjectile { + private static final EntityDataAccessor HUGE = SynchedEntityData.defineId(WaterBombEntity.class, EntityDataSerializers.BOOLEAN); + private int lifetimeTicks; private final Map hitCooldowns = new HashMap<>(); @@ -39,8 +44,18 @@ public class WaterBombEntity extends ThrowableProjectile { this.lifetimeTicks = AntarchySettings.waterBombLifetimeTicks(); } + public WaterBombEntity(Level level, LivingEntity owner, boolean huge) { + this(level, owner); + this.entityData.set(HUGE, huge); + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { + builder.define(HUGE, false); + } + + public boolean isHuge() { + return this.entityData.get(HUGE); } @Override @@ -75,8 +90,8 @@ public class WaterBombEntity extends ThrowableProjectile { UUID id = entity.getUUID(); if (this.hitCooldowns.getOrDefault(id, 0) > 0) return; - float damage = (float) AntarchySettings.waterBombDamage(); - if (living.hurt(this.damageSources().thrown(this, this.getOwner()), damage)) { + float damage = (float) AntarchySettings.waterBombDamage() * (this.isHuge() ? 3.0F : 1.0F); + if (living.hurt(AntarchyDamageSources.waterSoaked(this.level(), this, this.getOwner()), damage)) { this.hitCooldowns.put(id, 15); Vec3 knockDir = living.position().subtract(this.position()).normalize(); double knockback = AntarchySettings.waterBombKnockback(); @@ -89,9 +104,18 @@ public class WaterBombEntity extends ThrowableProjectile { protected void onHitBlock(BlockHitResult result) { BlockPos hitPos = result.getBlockPos().relative(result.getDirection()); Level level = this.level(); - if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { - level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 2), 3); - level.scheduleTick(hitPos, Fluids.WATER, 2); + if (this.isHuge()) { + for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) { + if (level.isEmptyBlock(pos)) { + level.setBlock(pos, Blocks.WATER.defaultBlockState(), 3); + level.scheduleTick(pos, Fluids.WATER, 2); + } + } + } else { + if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { + level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3); + level.scheduleTick(hitPos, Fluids.WATER, 2); + } } this.discard(); } @@ -100,11 +124,13 @@ public class WaterBombEntity extends ThrowableProjectile { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt("LifetimeTicks", this.lifetimeTicks); + tag.putBoolean("Huge", this.isHuge()); } @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.lifetimeTicks = tag.contains("LifetimeTicks") ? tag.getInt("LifetimeTicks") : AntarchySettings.waterBombLifetimeTicks(); + if (tag.contains("Huge")) this.entityData.set(HUGE, tag.getBoolean("Huge")); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java index cb47e3be..7f6c85f9 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/PrimordialArmorItem.java @@ -1,12 +1,144 @@ package com.craisinlord.antarchy.content.item; +import java.util.List; +import java.util.Locale; +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.ChatFormatting; import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.ItemAttributeModifiers; +import net.minecraft.world.level.Level; public class PrimordialArmorItem extends ArmorItem { + private final Type armorType; public PrimordialArmorItem(Holder material, Type type, Properties properties) { super(material, type, properties); + this.armorType = type; + } + + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers() { + String prefix = "primordial_" + this.armorType.getName(); + ItemAttributeModifiers.Builder builder = ItemAttributeModifiers.builder() + .add( + Attributes.ARMOR, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_armor"), + getDefense(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ) + .add( + Attributes.ARMOR_TOUGHNESS, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_armor_toughness"), + getToughness(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + + double knockbackResistance = getKnockbackResistance(this.armorType); + if (knockbackResistance > 0.0D) { + builder.add( + Attributes.KNOCKBACK_RESISTANCE, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_knockback_resistance"), + knockbackResistance, + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + } + + builder.add( + Attributes.ATTACK_KNOCKBACK, + new AttributeModifier( + ResourceLocation.withDefaultNamespace(prefix + "_attack_knockback"), + AntarchySettings.primordialArmorKnockbackPerPiece(), + AttributeModifier.Operation.ADD_VALUE + ), + EquipmentSlotGroup.bySlot(this.armorType.getSlot()) + ); + + return builder.build(); + } + + @Override + public int getDefense() { + return super.getDefense(); + } + + @Override + public float getToughness() { + return super.getToughness(); + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void inventoryTick(ItemStack stack, Level level, Entity entity, int slotId, boolean isSelected) { + if (!level.isClientSide && this.armorType == Type.HELMET && entity instanceof LivingEntity living) { + if (living.getItemBySlot(EquipmentSlot.HEAD) == stack) { + living.addEffect(new MobEffectInstance(MobEffects.WATER_BREATHING, 40, 0, false, false, true)); + } + } + super.inventoryTick(stack, level, entity, slotId, isSelected); + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + if (this.armorType == Type.HELMET) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_helmet_water_breathing").withStyle(ChatFormatting.AQUA)); + } + String knockbackDealt = String.format(Locale.ROOT, "%.1f", AntarchySettings.primordialArmorKnockbackPerPiece()); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_knockback_dealt", knockbackDealt).withStyle(ChatFormatting.YELLOW)); + tooltipComponents.add(Component.translatable("tooltip.antarchy.primordial_armor_set_bonus").withStyle(ChatFormatting.DARK_GREEN)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } + + public static double getKnockbackDealtBonus(LivingEntity entity) { + int pieces = 0; + for (ItemStack armorStack : entity.getArmorSlots()) { + if (armorStack.getItem() instanceof PrimordialArmorItem) { + pieces++; + } + } + return pieces * AntarchySettings.primordialArmorKnockbackPerPiece(); + } + + public static boolean hasFullSet(LivingEntity entity) { + return entity.getItemBySlot(EquipmentSlot.HEAD).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.CHEST).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.LEGS).getItem() instanceof PrimordialArmorItem + && entity.getItemBySlot(EquipmentSlot.FEET).getItem() instanceof PrimordialArmorItem; + } + + private static double getKnockbackResistance(Type armorType) { + return switch (armorType) { + case HELMET -> 0.20D; + case CHESTPLATE, BODY -> 0.30D; + case LEGGINGS -> 0.30D; + case BOOTS -> 0.20D; + }; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java index 220d86e9..5e92df94 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/LivingEntityMixin.java @@ -293,4 +293,5 @@ public abstract class LivingEntityMixin { ); original.call(level, particle, pos.x, pos.y, pos.z, dx, dy, dz); } + } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java index ff6d76d9..2ea84d5c 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/gravity/PlayerAttackMixin.java @@ -2,9 +2,14 @@ package com.craisinlord.antarchy.mixins.gravity; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.item.GravityGunItem; +import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -27,4 +32,34 @@ public abstract class PlayerAttackMixin { ci.cancel(); } } + + /* + * Primordial's full set bonus makes player melee knockback ignore the target's knockback resistance. + */ + @WrapOperation(method = "attack", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;knockback(DDD)V")) + private void antarchy$ignorePrimordialKnockbackResistance(LivingEntity target, double strength, double x, double z, Operation original) { + Player player = (Player) (Object) this; + if (!PrimordialArmorItem.hasFullSet(player)) { + original.call(target, strength, x, z); + return; + } + + if (strength <= 0.0D) { + return; + } + + target.hasImpulse = true; + while (x * x + z * z < 1.0E-5D) { + x = (Math.random() - Math.random()) * 0.01D; + z = (Math.random() - Math.random()) * 0.01D; + } + + Vec3 previousMovement = target.getDeltaMovement(); + Vec3 knockback = new Vec3(x, 0.0D, z).normalize().scale(strength); + target.setDeltaMovement( + previousMovement.x / 2.0D - knockback.x, + target.onGround() ? Math.min(0.4D, previousMovement.y / 2.0D + strength) : previousMovement.y, + previousMovement.z / 2.0D - knockback.z + ); + } } diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..32386ef7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_slab.json @@ -0,0 +1,13 @@ +{ + "variants": { + "type=double": { + "model": "antarchy:block/mossy_shellstone_bricks" + }, + "type=bottom": { + "model": "antarchy:block/mossy_shellstone_brick_slab" + }, + "type=top": { + "model": "antarchy:block/mossy_shellstone_brick_slab_top" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..79c0c8b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_stairs.json @@ -0,0 +1,209 @@ +{ + "variants": { + "facing=east,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=east,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=east,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=east,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs" + }, + "facing=east,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=east,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=east,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180 + }, + "facing=north,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=north,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 270 + }, + "facing=north,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 270 + }, + "facing=north,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=north,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180 + }, + "facing=north,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=south,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner" + }, + "facing=south,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer" + }, + "facing=south,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=south,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 90 + }, + "facing=south,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=south,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=south,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 90 + }, + "facing=west,half=bottom,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "y": 180 + }, + "facing=west,half=bottom,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "y": 180 + }, + "facing=west,half=top,shape=inner_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=inner_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_inner", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=outer_left": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 180 + }, + "facing=west,half=top,shape=outer_right": { + "model": "antarchy:block/mossy_shellstone_brick_stairs_outer", + "uvlock": true, + "x": 180, + "y": 270 + }, + "facing=west,half=top,shape=straight": { + "model": "antarchy:block/mossy_shellstone_brick_stairs", + "uvlock": true, + "x": 180, + "y": 180 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..00e5aa02 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/mossy_shellstone_brick_wall.json @@ -0,0 +1,40 @@ +{ + "multipart": [ + { + "when": { "up": "true" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_post" } + }, + { + "when": { "north": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "uvlock": true } + }, + { + "when": { "east": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 90, "uvlock": true } + }, + { + "when": { "south": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 180, "uvlock": true } + }, + { + "when": { "west": "low" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side", "y": 270, "uvlock": true } + }, + { + "when": { "north": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "uvlock": true } + }, + { + "when": { "east": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 90, "uvlock": true } + }, + { + "when": { "south": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 180, "uvlock": true } + }, + { + "when": { "west": "tall" }, + "apply": { "model": "antarchy:block/mossy_shellstone_brick_wall_side_tall", "y": 270, "uvlock": true } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index d0ac4bc3..fa5c36a8 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -37,6 +37,9 @@ "block.antarchy.shellstone_bricks": "Shellstone Bricks", "block.antarchy.chiseled_shellstone": "Chiseled Shellstone", "block.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "block.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "block.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "block.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "block.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", "block.antarchy.shellstone_stairs": "Shellstone Stairs", "block.antarchy.shellstone_slab": "Shellstone Slab", @@ -195,6 +198,9 @@ "tooltip.antarchy.nightmare_armor_double_damage": "%s%% chance to deal double damage", "tooltip.antarchy.nightmare_armor_set_bonus": "Full Set: Wither & Dread immunity", "tooltip.antarchy.nightmare_sword": "Deals more damage as your health drops.", + "tooltip.antarchy.primordial_helmet_water_breathing": "Grants the wearer Water Breathing", + "tooltip.antarchy.primordial_armor_knockback_dealt": "Adds %s attack knockback per piece", + "tooltip.antarchy.primordial_armor_set_bonus": "Full Set: Attacks ignore enemy knockback resistance", "attribute.antarchy.double_damage_chance": "Double Damage Chance", "attribute.antarchy.bloodglass_max_hearts": "Max Bloodglass Hearts", "item.antarchy.molevore_nose": "Molevore Nose", @@ -211,6 +217,9 @@ "item.antarchy.shellstone_bricks": "Shellstone Bricks", "item.antarchy.chiseled_shellstone": "Chiseled Shellstone", "item.antarchy.mossy_shellstone_bricks": "Mossy Shellstone Bricks", + "item.antarchy.mossy_shellstone_brick_stairs": "Mossy Shellstone Brick Stairs", + "item.antarchy.mossy_shellstone_brick_slab": "Mossy Shellstone Brick Slab", + "item.antarchy.mossy_shellstone_brick_wall": "Mossy Shellstone Brick Wall", "item.antarchy.cracked_shellstone_bricks": "Cracked Shellstone Bricks", "item.antarchy.shellstone_stairs": "Shellstone Stairs", "item.antarchy.shellstone_slab": "Shellstone Slab", @@ -464,6 +473,12 @@ "death.attack.emperor_scorpion_sting": "%1$s was stung by the Emperor Scorpion", "death.attack.emperor_scorpion_sting.player": "%1$s was stung by the Emperor Scorpion while fighting %2$s", "death.attack.cornea_stalk_prick": "%1$s was pricked to death by a Cornea Stalk", + "death.attack.toreterror_spin": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_spin.player": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_jump": "%1$s was pounded to death by Toreterror", + "death.attack.toreterror_jump.player": "%1$s was pounded to death by Toreterror", + "death.attack.water_soaked": "%1$s was super soaked to death by %2$s", + "death.attack.water_soaked.player": "%1$s was super soaked to death by %2$s", "entity.antarchy.lucid": "Lucid", "item.antarchy.lucid_spawn_egg": "Lucid Spawn Egg", "item.antarchy.lucid_eye": "Lucid Eye", @@ -670,6 +685,12 @@ "death.attack.emperor_scorpion_sting": "%1$s was stung by the Emperor Scorpion", "death.attack.emperor_scorpion_sting.player": "%1$s was stung by the Emperor Scorpion while fighting %2$s", "death.attack.cornea_stalk_prick": "%1$s was pricked to death by a Cornea Stalk", + "death.attack.toreterror_spin": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_spin.player": "%1$s was beybladed to death by Toreterror", + "death.attack.toreterror_jump": "%1$s was pounded to death by Toreterror", + "death.attack.toreterror_jump.player": "%1$s was pounded to death by Toreterror", + "death.attack.water_soaked": "%1$s was super soaked to death by %2$s", + "death.attack.water_soaked.player": "%1$s was super soaked to death by %2$s", "entity.antarchy.reverie": "Reverie", "biome.antarchy.thoraxis": "Thoraxis", "biome.antarchy.nightmare_wastes": "Nightmare Wastes", diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..7b951f97 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json new file mode 100644 index 00000000..e3d82f83 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_slab_top.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/slab_top", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..d550f3fa --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json new file mode 100644 index 00000000..c5bb60d0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_inner.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/inner_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json new file mode 100644 index 00000000..f45602bd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_stairs_outer.json @@ -0,0 +1,8 @@ +{ + "parent": "minecraft:block/outer_stairs", + "textures": { + "bottom": "antarchy:block/shellstone/mossy_shellstone_bricks", + "side": "antarchy:block/shellstone/mossy_shellstone_bricks", + "top": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json new file mode 100644 index 00000000..72bebf9f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_inventory.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/wall_inventory", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json new file mode 100644 index 00000000..007eebb3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_post.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_post", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json new file mode 100644 index 00000000..188a08c3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json new file mode 100644 index 00000000..bd46666c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/mossy_shellstone_brick_wall_side_tall.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_wall_side_tall", + "textures": { + "wall": "antarchy:block/shellstone/mossy_shellstone_bricks" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..02deeac5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_slab.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_slab" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..2a147e6a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_stairs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_stairs" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..a872a73b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/mossy_shellstone_brick_wall.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/mossy_shellstone_brick_wall_inventory" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json b/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json index 244473f9..e4c3cca8 100644 --- a/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json +++ b/common/src/main/resources/assets/antarchy/models/item/water_cannon_held_geo.json @@ -2,21 +2,21 @@ "parent": "builtin/entity", "display": { "thirdperson_righthand": { - "translation": [0, -2, 5], + "translation": [0, -6, 5], "scale": [0.7, 0.7, 0.7] }, "thirdperson_lefthand": { - "translation": [0, -2, 5], + "translation": [0, -6, 5], "scale": [0.7, 0.7, 0.7] }, "firstperson_righthand": { - "rotation": [10, 0, -5], - "translation": [2, 0, 1], + "rotation": [10, 0, -2], + "translation": [0, 0, 2], "scale": [0.5, 0.5, 0.5] }, "firstperson_lefthand": { - "rotation": [10, 0, -5], - "translation": [2, 0, 1], + "rotation": [10, 0, -2], + "translation": [0, 0, 2], "scale": [0.5, 0.5, 0.5] }, "gui": { diff --git a/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png b/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png index d6ec135d4207e8c7ffe2712184ac2b177878aa05..b0eeb33f006cf8be12845bc5e96930253580e9c2 100644 GIT binary patch literal 10190 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 diff --git a/common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png b/common/src/main/resources/assets/antarchy/textures/item/jumpy_boots.png new file mode 100644 index 0000000000000000000000000000000000000000..8a3fd730251368320b80adec4dd0f5b5c6edbc98 GIT binary patch literal 382 zcmV-^0fGLBP)Px$I7vi7R5*>zkUdYrP!xur))Jv@>R_=!h>@vr1b+(~KhNJlq9Y?oWh87ahCqXX zNIfqzx)W=*!6HTfG|Jv4P123@yafOOru>@*DGSmgQz z0Dx_la*(cDm$q3tI#mHM$aEZCD;OPJW02{Ee$E-kf+P`4)eLVLZ~NXd#x_eNAL3^K zz$#Agj*RMs5=c%1zV~!=jcJrIS}Baav>Q#~&QLa*VR3&^kq_fnWqX7DaDR1%7fOb~ z?zdr((0>#3{1ivma!1wxo+b<2Ya7CpP=r*|bz#(My2b~3{^mWNEb=Rul`=0ApLryB z4nk!=JPShQF$lS`40)-ab6cx!H5H&`m2p+UJQBk1U~}>razJTsyr2$1Rjp~|iATO>iBb#;QjorZ)qTu9IN3Ju( zdcO-l=t%G#KyX}Wx6pk5l#Ta>0ivK8Y?>PW&oflD{Qv*}|Nl#x15yA000v1!K~w_( Xh-9MyBYa8v00000NkvXXu0mjf!PeLu literal 0 HcmV?d00001 diff --git a/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json b/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json new file mode 100644 index 00000000..e860a89c --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/toreterror_jump.json @@ -0,0 +1,7 @@ +{ + "message_id": "toreterror_jump", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json b/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json new file mode 100644 index 00000000..4a6afd29 --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/toreterror_spin.json @@ -0,0 +1,7 @@ +{ + "message_id": "toreterror_spin", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/damage_type/water_soaked.json b/common/src/main/resources/data/antarchy/damage_type/water_soaked.json new file mode 100644 index 00000000..56c1f742 --- /dev/null +++ b/common/src/main/resources/data/antarchy/damage_type/water_soaked.json @@ -0,0 +1,7 @@ +{ + "message_id": "water_soaked", + "scaling": "when_caused_by_living_non_player", + "exhaustion": 0.1, + "effects": "hurt", + "death_message_type": "default" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..1ee537f0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_slab.json @@ -0,0 +1,35 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "functions": [ + { + "add": false, + "conditions": [ + { + "block": "antarchy:mossy_shellstone_brick_slab", + "condition": "minecraft:block_state_property", + "properties": { + "type": "double" + } + } + ], + "count": 2.0, + "function": "minecraft:set_count" + }, + { + "function": "minecraft:explosion_decay" + } + ], + "name": "antarchy:mossy_shellstone_brick_slab" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_slab" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..3c45a676 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_stairs.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_shellstone_brick_stairs" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_stairs" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..0c5bee10 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/mossy_shellstone_brick_wall.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:mossy_shellstone_brick_wall" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/mossy_shellstone_brick_wall" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json index 54918816..5f06e588 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json @@ -18,6 +18,7 @@ { "function": "minecraft:looting_enchant", "count": { + "type": "minecraft:uniform", "min": 0.0, "max": 1.0 } diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json new file mode 100644 index 00000000..322153c4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab.json @@ -0,0 +1,16 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###" + ], + "result": { + "count": 6, + "id": "antarchy:mossy_shellstone_brick_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..79fac6b2 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_slab_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_slab" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json new file mode 100644 index 00000000..506f6756 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "# ", + "## ", + "###" + ], + "result": { + "count": 4, + "id": "antarchy:mossy_shellstone_brick_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..01cbc7ab --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_stairs_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_stairs" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json new file mode 100644 index 00000000..e5a83e72 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall.json @@ -0,0 +1,17 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "building", + "key": { + "#": { + "item": "antarchy:mossy_shellstone_bricks" + } + }, + "pattern": [ + "###", + "###" + ], + "result": { + "count": 6, + "id": "antarchy:mossy_shellstone_brick_wall" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json new file mode 100644 index 00000000..f93c7359 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/mossy_shellstone_brick_wall_from_mossy_shellstone_bricks_stonecutting.json @@ -0,0 +1,9 @@ +{ + "type": "minecraft:stonecutting", + "ingredient": { + "item": "antarchy:mossy_shellstone_bricks" + }, + "result": { + "id": "antarchy:mossy_shellstone_brick_wall" + } +} diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle1.nbt deleted file mode 100644 index 6714afbde4b00251dde55384143ad03c3f6e8b15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884048 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�$g5O6j@p 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�TsI7ZaKA^-PsMO3PZ%A0 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

R0jr`(fR$Pj*PloPBqEZ( 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 Sh2BTUaWe;gat}#$aQFwBSbp6A diff --git a/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt b/common/src/main/resources/data/antarchy/structure.fallen_kingom_castle/fallen_kingdom_castle_bridge.nbt deleted file mode 100644 index 12e7dbedb2d20c054f98908a1ee454799ca180bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14483 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�j< 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 diff --git a/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt b/common/src/main/resources/data/antarchy/structure/toreterror_arena/toreterror_arena.nbt new file mode 100644 index 0000000000000000000000000000000000000000..ec30c88877c90b91c9e86981b7363b1b5ce9d1e4 GIT binary patch literal 593442 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 SHELLSTONE_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "has_shellstone") + ); + private static final ResourceKey SHELLSTONE_UPPER = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "shellstone_upper") + ); + private static final ResourceKey SHELLSTONE_LOWER = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "shellstone_lower") + ); + @Override public void onInitialize() { AntarchyFabricNetworking.register(); AntarchyConfigModuleFabric.init(); AntarchyFabricContent.register(); + registerWorldgenFeatures(); AntarchyFabricEvents.register(); BloodglassManager.register(); Antarchy.init(); BloodCrystalShardItem.SYNC_BLOODGLASS = BloodglassManager::syncBloodglass; } + + private static void registerWorldgenFeatures() { + BiomeModifications.addFeature( + BiomeSelectors.tag(SHELLSTONE_BIOMES), + GenerationStep.Decoration.UNDERGROUND_ORES, + SHELLSTONE_UPPER + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(SHELLSTONE_BIOMES), + GenerationStep.Decoration.UNDERGROUND_ORES, + SHELLSTONE_LOWER + ); + } } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 682ad470..e02456ad 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -538,6 +538,12 @@ public final class AntarchyFabricContent { () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", () -> new Block(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new net.minecraft.world.level.block.StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new net.minecraft.world.level.block.SlabBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new net.minecraft.world.level.block.WallBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", () -> new net.minecraft.world.level.block.StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", @@ -1083,6 +1089,9 @@ public final class AntarchyFabricContent { public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_SHELLSTONE); public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICKS); public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(CRACKED_SHELLSTONE_BRICKS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_STAIRS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_SLAB); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(MOSSY_SHELLSTONE_BRICK_WALL); public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_STAIRS); public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_SLAB); public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(SHELLSTONE_WALL); @@ -1580,7 +1589,7 @@ public final class AntarchyFabricContent { new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.5F, 3.0F) + .sized(2.0F, 3.0F) .clientTrackingRange(14) .build("toreterror")); public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", @@ -1771,27 +1780,33 @@ public final class AntarchyFabricContent { "polished_nyxite_stairs", "polished_nyxite_slab", "polished_nyxite_wall", "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - case "antimetal", "polished_antimetal" -> 2; + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; + case "antimetal", "polished_antimetal" -> 3; case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", "cut_dream_sandstone", "smooth_dream_sandstone", "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 3; - case "umbral_moss_block", "umbral_moss_carpet" -> 4; - case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed" -> 5; + "cut_dream_sandstone_slab" -> 4; + case "umbral_moss_block", "umbral_moss_carpet" -> 5; + case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed" -> 6; case "blood_crystal_block", "budding_blood_crystal", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "blood_crystal_cluster" -> 6; + "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", "chiseled_titanium", "uranium_bulb", "titanium_bulb", "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars" -> 7; + "uranium_bars", "titanium_bars" -> 8; case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", - "cloud_block" -> 8; - case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 9; + "cloud_block" -> 9; + case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", @@ -2215,6 +2230,9 @@ public final class AntarchyFabricContent { () -> CHISELED_SHELLSTONE.get(), () -> MOSSY_SHELLSTONE_BRICKS.get(), () -> CRACKED_SHELLSTONE_BRICKS.get(), + () -> MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> MOSSY_SHELLSTONE_BRICK_WALL.get(), () -> SHELLSTONE_STAIRS.get(), () -> SHELLSTONE_SLAB.get(), () -> SHELLSTONE_WALL.get(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java new file mode 100644 index 00000000..5a041348 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java @@ -0,0 +1,47 @@ +package com.craisinlord.antarchy.fabric.mixin.client; + +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Axis; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(GameRenderer.class) +public abstract class ToreterrorCameraShakeMixin { + private static final double MAX_SHAKE_RANGE = 48.0D; + + @Shadow @Final private Minecraft minecraft; + + @Inject(method = "bobView", at = @At("TAIL")) + private void applyToreterrorShake(PoseStack poseStack, float partialTick, CallbackInfo ci) { + if (minecraft.level == null || minecraft.player == null) return; + + Vec3 cameraPos = minecraft.gameRenderer.getMainCamera().getPosition(); + float shakeStrength = 0.0F; + + for (ToreterrorEntity toreterror : minecraft.level.getEntitiesOfClass( + ToreterrorEntity.class, + minecraft.player.getBoundingBox().inflate(MAX_SHAKE_RANGE), + t -> t.isAlive() && t.isJumpShaking() + )) { + double distance = Math.sqrt(cameraPos.distanceToSqr(toreterror.position().add(0, toreterror.getBbHeight() * 0.5, 0))); + if (distance > MAX_SHAKE_RANGE) continue; + shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 2.0F); + } + + if (shakeStrength <= 0.0F) return; + + float time = (float) (minecraft.player.tickCount + partialTick); + poseStack.mulPose(Axis.YP.rotationDegrees(Mth.sin(time * 1.5F) * shakeStrength * 2.5F)); + poseStack.mulPose(Axis.XP.rotationDegrees(Mth.cos(time * 1.8F) * shakeStrength * 2.0F)); + poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.sin(time * 2.2F) * shakeStrength * 1.5F)); + } +} diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index e29b9be5..03cd5084 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -19,6 +19,7 @@ ], "client": [ "client.NightmareCameraShakeMixin", + "client.ToreterrorCameraShakeMixin", "client.DuctTapeInputMixin", "client.AntiwaterFogMixin", "client.GravityGunMouseScrollMixin", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index 3ed697be..bbe92560 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -237,6 +237,7 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setNightmareBootsArmorToughness(AntarchyToolsConfig.nightmareBootsArmorToughness()); AntarchySettings.setNightmareArmorKnockbackResistance(AntarchyToolsConfig.nightmareArmorKnockbackResistance()); AntarchySettings.setNightmareArmorDreadAuraRangePerPiece(AntarchyToolsConfig.nightmareArmorDreadAuraRangePerPiece()); + AntarchySettings.setPrimordialArmorKnockbackPerPiece(AntarchyToolsConfig.primordialArmorKnockbackPerPiece()); AntarchySettings.setNightmareSwordBaseDamage(AntarchyToolsConfig.nightmareSwordBaseDamage()); AntarchySettings.setNightmareSwordAttackSpeed(AntarchyToolsConfig.nightmareSwordAttackSpeed()); AntarchySettings.setNightmareSwordScalingFactor(AntarchyToolsConfig.nightmareSwordScalingFactor()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 8e04b344..fb1f78bb 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -195,6 +195,9 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.CHISELED_SHELLSTONE.get(), () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICKS.get(), () -> AntarchyNeoforgeBlocks.CRACKED_SHELLSTONE_BRICKS.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_SLAB.get(), + () -> AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_WALL.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_STAIRS.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_SLAB.get(), () -> AntarchyNeoforgeBlocks.SHELLSTONE_WALL.get(), diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java index f1d75ea4..8306063a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyToolsConfig.java @@ -111,6 +111,7 @@ public final class AntarchyToolsConfig { private static final ModConfigSpec.DoubleValue NIGHTMARE_BOOTS_ARMOR_TOUGHNESS; private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE; private static final ModConfigSpec.DoubleValue NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE; + private static final ModConfigSpec.DoubleValue PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_BASE_DAMAGE; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_ATTACK_SPEED; private static final ModConfigSpec.DoubleValue NIGHTMARE_SWORD_SCALING_FACTOR; @@ -326,6 +327,7 @@ public final class AntarchyToolsConfig { "Full set (4 pieces) gives 5.0 blocks by default." ) .defineInRange("dreadAuraRangePerPiece", 1.25D, 0.0D, 64.0D); + PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE = b.comment("Attack knockback added by each Primordial Armor piece.") .defineInRange("primordialArmorKnockbackPerPiece", 0.5D, 0.0D, 16.0D); b.pop(); b.push("nightmareSword"); @@ -532,6 +534,7 @@ public final class AntarchyToolsConfig { static double nightmareBootsArmorToughness() { return NIGHTMARE_BOOTS_ARMOR_TOUGHNESS.get(); } static double nightmareArmorKnockbackResistance() { return NIGHTMARE_ARMOR_KNOCKBACK_RESISTANCE.get(); } static double nightmareArmorDreadAuraRangePerPiece() { return NIGHTMARE_ARMOR_DREAD_AURA_RANGE_PER_PIECE.get(); } + static double primordialArmorKnockbackPerPiece() { return PRIMORDIAL_ARMOR_KNOCKBACK_PER_PIECE.get(); } static double nightmareSwordBaseDamage() { return NIGHTMARE_SWORD_BASE_DAMAGE.get(); } static double nightmareSwordAttackSpeed() { return NIGHTMARE_SWORD_ATTACK_SPEED.get(); } static double nightmareSwordScalingFactor() { return NIGHTMARE_SWORD_SCALING_FACTOR.get(); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java new file mode 100644 index 00000000..31759cc0 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java @@ -0,0 +1,45 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import net.minecraft.client.Minecraft; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ViewportEvent; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class ToreterrorCameraShakeHandler { + private static final double MAX_SHAKE_RANGE = 48.0D; + + private ToreterrorCameraShakeHandler() { + } + + @SubscribeEvent + public static void onComputeCameraAngles(ViewportEvent.ComputeCameraAngles event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.level == null || mc.player == null) return; + + Vec3 cameraPos = event.getCamera().getPosition(); + float shakeStrength = 0.0F; + + for (ToreterrorEntity toreterror : mc.level.getEntitiesOfClass( + ToreterrorEntity.class, + mc.player.getBoundingBox().inflate(MAX_SHAKE_RANGE), + t -> t.isAlive() && t.isJumpShaking() + )) { + double distance = Math.sqrt(cameraPos.distanceToSqr(toreterror.position().add(0, toreterror.getBbHeight() * 0.5, 0))); + if (distance > MAX_SHAKE_RANGE) continue; + shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 2.0D); + } + + if (shakeStrength <= 0.0F) return; + + float time = (float) (mc.player.tickCount + event.getPartialTick()); + event.setYaw(event.getYaw() + Mth.sin(time * 1.5F) * shakeStrength * 2.5F); + event.setPitch(event.getPitch() + Mth.cos(time * 1.8F) * shakeStrength * 2.0F); + event.setRoll(event.getRoll() + Mth.sin(time * 2.2F) * shakeStrength * 1.5F); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index e3f2f2de..fafbe95f 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -136,6 +136,12 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock CRACKED_SHELLSTONE_BRICKS = BLOCKS.register("cracked_shellstone_bricks", () -> new Block(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_STAIRS = BLOCKS.register("mossy_shellstone_brick_stairs", + () -> new StairBlock(MOSSY_SHELLSTONE_BRICKS.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_SLAB = BLOCKS.register("mossy_shellstone_brick_slab", + () -> new SlabBlock(AntarchyObjects.shellstoneProperties())); + public static final DeferredBlock MOSSY_SHELLSTONE_BRICK_WALL = BLOCKS.register("mossy_shellstone_brick_wall", + () -> new WallBlock(AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_STAIRS = BLOCKS.register("shellstone_stairs", () -> new StairBlock(SHELLSTONE.get().defaultBlockState(), AntarchyObjects.shellstoneProperties())); public static final DeferredBlock SHELLSTONE_SLAB = BLOCKS.register("shellstone_slab", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 989331ea..5295d416 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -183,6 +183,9 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.SHELLSTONE_BRICK_WALL_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHISELED_SHELLSTONE_ITEM.get()); event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICKS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_SLAB_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MOSSY_SHELLSTONE_BRICK_WALL_ITEM.get()); event.accept(AntarchyNeoforgeItems.CRACKED_SHELLSTONE_BRICKS_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_STAIRS_ITEM.get()); @@ -315,73 +318,81 @@ public class AntarchyNeoforgeCreativeModeTabs { "nyxite_brick_stairs", "nyxite_brick_slab", "nyxite_brick_wall", "pale_nyxite", "nyxite_spike", "potent_nyxite" -> 1; - // 2 - Antimetal blocks - case "antimetal", "polished_antimetal" -> 2; + // 2 - Shellstone blocks + case "shellstone", "polished_shellstone", "shellstone_bricks", "chiseled_shellstone", + "mossy_shellstone_bricks", "cracked_shellstone_bricks", + "shellstone_stairs", "shellstone_slab", "shellstone_wall", + "polished_shellstone_stairs", "polished_shellstone_slab", "polished_shellstone_wall", + "shellstone_brick_stairs", "shellstone_brick_slab", "shellstone_brick_wall", + "mossy_shellstone_brick_stairs", "mossy_shellstone_brick_slab", "mossy_shellstone_brick_wall" -> 2; - // 3 - Dream sand and blocks + // 3 - Antimetal blocks + case "antimetal", "polished_antimetal" -> 3; + + // 4 - Dream sand and blocks case "dream_sand", "dream_sandstone", "chiseled_dream_sandstone", "cut_dream_sandstone", "smooth_dream_sandstone", "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", - "cut_dream_sandstone_slab" -> 3; + "cut_dream_sandstone_slab" -> 4; - // 4 - Umbral moss - case "umbral_moss_block", "umbral_moss_carpet" -> 4; + // 5 - Umbral moss + case "umbral_moss_block", "umbral_moss_carpet" -> 5; - // 5 - All ores + metal storage/decorative blocks + // 6 - All ores + metal storage/decorative blocks case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", "cut_uranium_stairs", "cut_titanium_stairs", "chiseled_uranium", "chiseled_titanium", "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", - "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 5; + "uranium_bars", "titanium_bars", "uranium_bulb", "titanium_bulb" -> 6; - // 6 - Raw ores + // 7 - Raw ores case "raw_uranium", "raw_titanium", "raw_uranium_scrap", "raw_titanium_scrap", - "raw_uranium_block", "raw_titanium_block" -> 6; + "raw_uranium_block", "raw_titanium_block" -> 7; - // 7 - Blood crystal blocks (not the shard ingredient) + // 8 - Blood crystal blocks (not the shard ingredient) case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster" -> 7; + "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster" -> 8; - // 8 - Ouranwood leaves - case "ouranwood_leaves" -> 8; + // 9 - Ouranwood leaves + case "ouranwood_leaves" -> 9; - // 9 - Saplings / seeds - case "duplicator_sapling", "ouranwood_acorn" -> 9; + // 10 - Saplings / seeds + case "duplicator_sapling", "ouranwood_acorn" -> 10; - // 10 - Plants and flowers + // 11 - Plants and flowers case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "triffid_goo_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 10; + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 11; - // 11 - Dream lighting - case "dream_torch", "dream_lantern", "dream_campfire" -> 11; + // 12 - Dream lighting + case "dream_torch", "dream_lantern", "dream_campfire" -> 12; - // 12 - Antimetal scaffolding - case "antimetal_scaffolding" -> 12; + // 13 - Antimetal scaffolding + case "antimetal_scaffolding" -> 13; - // 13 - Infested blocks - case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg" -> 13; + // 14 - Infested blocks + case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg" -> 14; - // 14 - Tools + // 15 - Tools case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", - "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 14; + "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 15; - // 15 - Liquid buckets - case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 15; + // 16 - Liquid buckets + case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; - // 16 - Misc wearables / gadgets - case "moggles", "brutalfly_elytra", "fallen_king_crown" -> 16; + // 17 - Misc wearables / gadgets + case "moggles", "brutalfly_elytra", "fallen_king_crown" -> 17; - // 17 - Weapons + // 18 - Weapons case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", "gravity_gun", "water_cannon", "nightmare_sword", "lucid_pearl", "scorpion_whip", "blood_crystal_katana", "big_bertha", "big_bertha_blade", "big_bertha_handle", "big_bertha_hilt", - "ultimate_sword", "ultimate_mace" -> 17; + "ultimate_sword", "ultimate_mace" -> 18; - // 18 - Armor sets + // 19 - Armor sets case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots", "blood_crystal_helmet", "blood_crystal_chestplate", @@ -389,34 +400,34 @@ public class AntarchyNeoforgeCreativeModeTabs { "nightmare_helmet", "nightmare_chestplate", "nightmare_leggings", "nightmare_boots", "ultimate_helmet", "ultimate_chestplate", - "ultimate_leggings", "ultimate_boots" -> 18; + "ultimate_leggings", "ultimate_boots" -> 19; - // 19 - Ranged weapons - case "ultimate_bow", "ultimate_crossbow" -> 19; + // 20 - Ranged weapons + case "ultimate_bow", "ultimate_crossbow" -> 20; - // 20 - Foods + // 21 - Foods case "cloud_shark_fin_soup", "mud_pie", "rainbow_sugar", - "blood_crystal_apple" -> 20; + "blood_crystal_apple" -> 21; - // 21 - Crafting ingredients + // 22 - Crafting ingredients case "blood_crystal_shard", "cloud_shark_fin", "basilisk_fang", "kraken_tooth", "emperor_scorpion_stinger", "nightmare_scale", "molevore_nose", "moleworm", "uranium_nugget", "titanium_nugget", "uranium_ingot", "titanium_ingot", "lucid_eye", "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", - "primordial_scute", "triffid_goo", "vortex_eye" -> 21; + "primordial_scute", "triffid_goo", "vortex_eye" -> 22; - // 22 - Arrows (reserved for future arrow types) + // 23 - Arrows (reserved for future arrow types) - // 23 - Potions - case "reverie_bottle" -> 23; + // 24 - Potions + case "reverie_bottle" -> 24; - // 24 - Spawn eggs + // 25 - Spawn eggs default -> { if (!path.endsWith("_spawn_egg")) { org.slf4j.LoggerFactory.getLogger("Antarchy/CreativeTab").warn("Unmatched creative tab item: '{}'", path); } - yield path.endsWith("_spawn_egg") ? 24 : 99; + yield path.endsWith("_spawn_egg") ? 25 : 99; } }; } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 29f9b395..03d1016a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -244,7 +244,7 @@ public final class AntarchyNeoforgeEntites { .build("brutalfly_orb")); public static final DeferredHolder, EntityType> TORETERROR = ENTITY_TYPES.register("toreterror", () -> EntityType.Builder.of(ToreterrorEntity::new, MobCategory.MONSTER) - .sized(2.5F, 3.0F) + .sized(2.0F, 3.0F) .clientTrackingRange(14) .build("toreterror")); public static final DeferredHolder, EntityType> WATER_BOMB = ENTITY_TYPES.register("water_bomb", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 83df6320..78d3e873 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -235,6 +235,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem CHISELED_SHELLSTONE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_SHELLSTONE); public static final DeferredItem MOSSY_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICKS); public static final DeferredItem CRACKED_SHELLSTONE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CRACKED_SHELLSTONE_BRICKS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_STAIRS); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_SLAB); + public static final DeferredItem MOSSY_SHELLSTONE_BRICK_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MOSSY_SHELLSTONE_BRICK_WALL); public static final DeferredItem SHELLSTONE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_STAIRS); public static final DeferredItem SHELLSTONE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_SLAB); public static final DeferredItem SHELLSTONE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.SHELLSTONE_WALL); diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json new file mode 100644 index 00000000..4f737bfc --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/shellstone_in_oceans_and_beaches.json @@ -0,0 +1,9 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:has_shellstone", + "features": [ + "antarchy:shellstone_upper", + "antarchy:shellstone_lower" + ], + "step": "underground_ores" +} From fb8fd3c927ae81c71f819eb5a07b09647b3f8fb4 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 24 Jun 2026 23:03:09 -0500 Subject: [PATCH 02/25] Added first VERY rough draft of jumpy bug, creeping horror, lurking terror --- .../neoforged/neoforge/entity/PartEntity.java | 29 + .../software/bernie/geckolib/util/Color.java | 230 + .../antarchy/config/AntarchySettings.java | 32 + .../antarchy/content/AntarchyObjects.java | 18 + .../content/block/CreepingHorrorEggBlock.java | 190 + .../content/block/LurkingTerrorEggBlock.java | 190 + .../client/model/CreepingHorrorModel.java | 23 + .../content/client/model/JumpyBugModel.java | 23 + .../client/model/LurkingTerrorModel.java | 23 + .../renderer/CreepingHorrorRenderer.java | 28 + .../client/renderer/JumpyBugRenderer.java | 44 + .../renderer/LurkingTerrorRenderer.java | 13 + .../content/entity/CreepingHorrorEntity.java | 130 + .../content/entity/JumpyBugEntity.java | 738 ++ .../content/entity/LurkingTerrorEntity.java | 126 + .../content/entity/ToreterrorEntity.java | 5 + .../content/item/JumpyBootsHelper.java | 20 + .../antarchy/content/item/JumpyBootsItem.java | 33 + .../network/JumpyBootsLaunchPayload.java | 24 + .../animations/creeping_horror.animation.json | 2372 ++++++ .../animations/jumpy_bug.animation.json | 3181 ++++++++ .../animations/lurking_terror.animation.json | 6934 +++++++++++++++++ .../blockstates/creeping_horror_eggs.json | 76 + .../blockstates/lurking_terror_eggs.json | 76 + .../antarchy/geo/creeping_horror.geo.json | 197 + .../assets/antarchy/geo/jumpy_bug.geo.json | 285 + .../antarchy/geo/lurking_terror.geo.json | 281 + .../resources/assets/antarchy/lang/en_us.json | 20 + .../models/block/creeping_horror_eggs_1.json | 6 + .../models/block/creeping_horror_eggs_2.json | 6 + .../models/block/creeping_horror_eggs_3.json | 6 + .../models/block/creeping_horror_eggs_4.json | 6 + .../models/block/lurking_terror_eggs_1.json | 6 + .../models/block/lurking_terror_eggs_2.json | 6 + .../models/block/lurking_terror_eggs_3.json | 6 + .../models/block/lurking_terror_eggs_4.json | 6 + ...ightly_cracked_creeping_horror_eggs_1.json | 6 + ...ightly_cracked_creeping_horror_eggs_2.json | 6 + ...ightly_cracked_creeping_horror_eggs_3.json | 6 + ...ightly_cracked_creeping_horror_eggs_4.json | 6 + ...lightly_cracked_lurking_terror_eggs_1.json | 6 + ...lightly_cracked_lurking_terror_eggs_2.json | 6 + ...lightly_cracked_lurking_terror_eggs_3.json | 6 + ...lightly_cracked_lurking_terror_eggs_4.json | 6 + .../very_cracked_creeping_horror_eggs_1.json | 6 + .../very_cracked_creeping_horror_eggs_2.json | 6 + .../very_cracked_creeping_horror_eggs_3.json | 6 + .../very_cracked_creeping_horror_eggs_4.json | 6 + .../very_cracked_lurking_terror_eggs_1.json | 6 + .../very_cracked_lurking_terror_eggs_2.json | 6 + .../very_cracked_lurking_terror_eggs_3.json | 6 + .../very_cracked_lurking_terror_eggs_4.json | 6 + .../models/item/creeping_horror_eggs.json | 3 + .../item/creeping_horror_spawn_egg.json | 3 + .../antarchy/models/item/jumpy_boots.json | 6 + .../models/item/jumpy_bug_spawn_egg.json | 3 + .../antarchy/models/item/king_scale.json | 6 + .../models/item/lurking_terror_eggs.json | 3 + .../models/item/lurking_terror_spawn_egg.json | 3 + .../antarchy/models/item/queen_scale.json | 6 + .../block/amber_moss/amber_lichen.png | Bin 0 -> 299 bytes .../block/amber_moss/amber_moss_block.png | Bin 0 -> 573 bytes .../block/amber_moss/amber_moss_carpet.png | Bin 0 -> 573 bytes .../antarchy/textures/block/chiten_block.png | Bin 0 -> 490 bytes .../creeping_horror_eggs.png | Bin 0 -> 465 bytes .../creeping_horror_eggs_slightly_cracked.png | Bin 0 -> 525 bytes .../creeping_horror_eggs_very_cracked.png | Bin 0 -> 523 bytes .../antarchy/textures/block/creepvine.png | Bin 0 -> 392 bytes .../lurking_terror_egg.png | Bin 0 -> 428 bytes .../lurking_terror_egg_slightly_cracked.png | Bin 0 -> 459 bytes .../lurking_terror_egg_very_cracked.png | Bin 0 -> 436 bytes .../antarchy/textures/block/myrmite.png | Bin 0 -> 488 bytes .../textures/entity/creeping_horror.png | Bin 0 -> 12279 bytes .../antarchy/textures/entity/jumpy_bug.png | Bin 0 -> 30719 bytes .../textures/entity/lurking_terror.png | Bin 0 -> 5684 bytes .../assets/antarchy/textures/item/chiten.png | Bin 0 -> 323 bytes .../textures/item/creeping_horror_egg.png | Bin 0 -> 428 bytes .../antarchy/textures/item/king_scale.png | Bin 0 -> 467 bytes .../textures/item/lurking_terror_egg.png | Bin 0 -> 307 bytes .../antarchy/textures/item/queen_scale.png | Bin 0 -> 444 bytes .../textures/item/ultimate/ultimate_mace.png | Bin 0 -> 550 bytes .../item/ultimate/ultimate_mace_handle.png | Bin 294 -> 0 bytes .../antarchy/advancement/kill_toreterror.json | 34 + .../advancement/water_cannon_craft.json | 36 + .../blocks/creeping_horror_eggs.json | 1 + .../blocks/lurking_terror_eggs.json | 1 + .../loot_table/entities/jumpy_bug.json | 33 + .../data/antarchy/recipe/jumpy_boots.json | 20 + .../fabric/AntarchyFabricContent.java | 91 +- .../antarchy/fabric/AntarchyFabricEvents.java | 8 + .../client/AntarchyFabricClientBootstrap.java | 5 + .../client/JumpyBootsClientHandler.java | 84 + .../fabric/client/JumpyBootsHudRenderer.java | 49 + .../mixin/JumpyBootsFallDamageMixin.java | 22 + .../network/AntarchyFabricNetworking.java | 42 + .../resources/antarchy-fabric.mixins.json | 1 + .../AntarchyConfigModuleNeoforge.java | 11 + .../antarchy/neoforge/AntarchyMobsConfig.java | 53 + .../antarchy/neoforge/AntarchyNeoforge.java | 4 + .../neoforge/AntarchyNeoforgeEvents.java | 20 + .../client/AntarchyNeoForgeClient.java | 9 + .../client/JumpyBootsClientHandler.java | 91 + .../client/JumpyBootsHudRenderer.java | 49 + .../network/JumpyBootsNetworking.java | 81 + .../registry/AntarchyNeoForgeEvents.java | 1 + .../registry/AntarchyNeoforgeBlocks.java | 6 + .../AntarchyNeoforgeCreativeModeTabs.java | 13 +- .../registry/AntarchyNeoforgeEntites.java | 18 + .../AntarchyNeoforgeEntityAttributes.java | 5 + .../registry/AntarchyNeoforgeItems.java | 38 +- .../AntarchyNeoforgePayloadHandlers.java | 2 + .../AntarchyNeoforgeSpawnPlacements.java | 1 + 112 files changed, 16339 insertions(+), 8 deletions(-) create mode 100644 .tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java create mode 100644 .tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java create mode 100644 common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json create mode 100644 common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/king_scale.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/queen_scale.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_block.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_moss_carpet.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_block.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_very_cracked.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/creepvine.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_slightly_cracked.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_very_cracked.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/myrmite.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/creeping_horror.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/jumpy_bug.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/lurking_terror.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/chiten.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/king_scale.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/lurking_terror_egg.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/queen_scale.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/item/ultimate/ultimate_mace_handle.png create mode 100644 common/src/main/resources/data/antarchy/advancement/kill_toreterror.json create mode 100644 common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json create mode 100644 common/src/main/resources/data/antarchy/recipe/jumpy_boots.json create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java create mode 100644 neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java diff --git a/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java b/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java new file mode 100644 index 00000000..8ae33e19 --- /dev/null +++ b/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.neoforged.neoforge.entity; + +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerEntity; +import net.minecraft.world.entity.Entity; + +public abstract class PartEntity extends Entity { + private final T parent; + + public PartEntity(T parent) { + super(parent.getType(), parent.level()); + this.parent = parent; + } + + public T getParent() { + return parent; + } + + @Override + public Packet getAddEntityPacket(ServerEntity entity) { + throw new UnsupportedOperationException(); + } +} diff --git a/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java b/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java new file mode 100644 index 00000000..81f6171f --- /dev/null +++ b/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java @@ -0,0 +1,230 @@ +/* + Direct copy of https://github.com/shedaniel/cloth-basic-math/blob/master/src/main/java/me/shedaniel/math/Color.java under the unlicense. + */ +package software.bernie.geckolib.util; + +/** + * Color holder object for storing a packed int argb value. + */ +public record Color(int argbInt) { + public static final Color WHITE = new Color(0xFFFFFFFF); + public static final Color LIGHT_GRAY = new Color(0xFFC0C0C0); + public static final Color GRAY = new Color(0xFF808080); + public static final Color DARK_GRAY = new Color(0xFF404040); + public static final Color BLACK = new Color(0xFF000000); + public static final Color RED = new Color(0xFFFF0000); + public static final Color PINK = new Color(0xFFFFAFAF); + public static final Color ORANGE = new Color(0xFFFFC800); + public static final Color YELLOW = new Color(0xFFFFFF00); + public static final Color GREEN = new Color(0xFF00FF00); + public static final Color MAGENTA = new Color(0xFFFF00FF); + public static final Color CYAN = new Color(0xFF00FFFF); + public static final Color BLUE = new Color(0xFF0000FF); + + /** + * Creates a new {@code Color} instance from RGB values, ensuring 100% opacity + */ + public static Color ofOpaque(int color) { + return new Color(0xFF000000 | color); + } + + /** + * Creates a new {@code Color} instance from RGB values with 100% opacity + */ + public static Color ofRGB(float red, float green, float blue) { + return ofRGBA(red, green, blue, 1f); + } + + /** + * Creates a new {@code Color} instance from RGB values with 100% opacity + */ + public static Color ofRGB(int r, int g, int b) { + return ofRGBA(r, g, b, 255); + } + + /** + * Creates a new {@code Color} instance from RGBA values + */ + public static Color ofRGBA(float r, float g, float b, float a) { + return ofRGBA((int)(r * 255f + 0.5), (int)(g * 255f + 0.5f), (int)(b * 255f + 0.5f), (int)(a * 255f + 0.5f)); + } + + /** + * Creates a new {@code Color} instance from RGBA values + */ + public static Color ofRGBA(int r, int g, int b, int a) { + return new Color(((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF)); + } + + /** + * Creates a new {@code Color} instance from ARGB values + */ + public static Color ofARGB(float a, float r, float g, float b) { + return ofARGB((int)(a * 255f + 0.5f), (int)(r * 255f + 0.5), (int)(g * 255f + 0.5f), (int)(b * 255f + 0.5f)); + } + + /** + * Creates a new {@code Color} instance from ARGB values + */ + public static Color ofARGB(int a, int r, int g, int b) { + return new Color(((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF)); + } + + /** + * Creates a new {@code Color} instance from HSB values with 100% opacity + */ + public static Color ofHSB(float hue, float saturation, float brightness) { + return ofOpaque(HSBtoARGB(hue, saturation, brightness)); + } + + /** + * Converts a HSB value triplet to a packed ARGB int + */ + public static int HSBtoARGB(float hue, float saturation, float brightness) { + int r = 0; + int g = 0; + int b = 0; + + if (saturation == 0) { + r = g = b = (int) (brightness * 255f + 0.5f); + } + else { + float h = (hue - (float)Math.floor(hue)) * 6f; + float f = h - (float)Math.floor(h); + float p = brightness * (1 - saturation); + float q = brightness * (1 - saturation * f); + float t = brightness * (1 - (saturation * (1 - f))); + + switch ((int)h) { + case 0 -> { + r = (int) (brightness * 255f + 0.5f); + g = (int) (t * 255f + 0.5f); + b = (int) (p * 255f + 0.5f); + } + case 1 -> { + r = (int) (q * 255f + 0.5f); + g = (int) (brightness * 255f + 0.5f); + b = (int) (p * 255f + 0.5f); + } + case 2 -> { + r = (int) (p * 255f + 0.5f); + g = (int) (brightness * 255f + 0.5f); + b = (int) (t * 255f + 0.5f); + } + case 3 -> { + r = (int) (p * 255f + 0.5f); + g = (int) (q * 255f + 0.5f); + b = (int) (brightness * 255f + 0.5f); + } + case 4 -> { + r = (int) (t * 255f + 0.5f); + g = (int) (p * 255f + 0.5f); + b = (int) (brightness * 255f + 0.5f); + } + case 5 -> { + r = (int) (brightness * 255f + 0.5f); + g = (int) (p * 255f + 0.5f); + b = (int) (q * 255f + 0.5f); + } + } + } + + return 0xFF000000 | (r << 16) | (g << 8) | b; + } + + public int getColor() { + return this.argbInt; + } + + public int getAlpha() { + return this.argbInt >> 24 & 0xFF; + } + + public float getAlphaFloat() { + return getAlpha() / 255f; + } + + public int getRed() { + return this.argbInt >> 16 & 0xFF; + } + + public float getRedFloat() { + return getRed() / 255f; + } + + public int getGreen() { + return this.argbInt >> 8 & 0xFF; + } + + public float getGreenFloat() { + return getGreen() / 255f; + } + + public int getBlue() { + return this.argbInt & 0xFF; + } + + public float getBlueFloat() { + return getBlue() / 255f; + } + + /** + * Returns a brighter variant of the same color + * + * @param factor The factor for shading + */ + public Color brighter(double factor) { + int r = getRed(); + int g = getGreen(); + int b = getBlue(); + int i = (int)(1 / (1 - (1 / factor))); + + if (r == 0 && g == 0 && b == 0) + return ofRGBA(i, i, i, getAlpha()); + + if (r > 0 && r < i) + r = i; + + if (g > 0 && g < i) + g = i; + + if (b > 0 && b < i) + b = i; + + return ofRGBA(Math.min((int) (r / (1 / factor)), 255), Math.min((int) (g / (1 / factor)), 255), + Math.min((int) (b / (1 / factor)), 255), getAlpha()); + } + + /** + * Returns a darker variant of the same color + * + * @param factor The factor for shading. The value provided is an inversely relative multiplier.
+ * E.G. input=2 -> 2x as dark.
+ * E.G. input=0.5 -> 0.5x as dark (brighter) + */ + public Color darker(float factor) { + return ofRGBA(Math.max((int)(getRed() * (1 / factor)), 0), Math.max((int)(getGreen() * (1 / factor)), 0), + Math.max((int)(getBlue() * (1 / factor)), 0), getAlpha()); + } + + @Override + public boolean equals(Object other) { + if (this == other) + return true; + + if (getClass() != other.getClass()) + return false; + + return hashCode() == other.hashCode(); + } + + @Override + public int hashCode() { + return this.argbInt; + } + + @Override + public String toString() { + return String.valueOf(this.argbInt); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index d2c9a0ae..51c9d338 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -271,6 +271,10 @@ public final class AntarchySettings { private static double bedBugAttackLungeHorizontalSpeed = 0.42D; private static double bedBugAttackLungeVerticalSpeed = 0.1D; private static float bedBugHealAmount = 2.0F; + private static double jumpyBugHealth = 12.0D; + private static double jumpyBugPounceDamage = 2.0D; + private static double jumpyBugLatchDamage = 1.0D; + private static double jumpyBugCamouflageAlpha = 0.18D; private static double brutalflyArmor = 10.0D; private static double brutalflyArmorToughness = 4.0D; private static double brutalflyKnockbackResistance = 0.7D; @@ -451,11 +455,16 @@ public final class AntarchySettings { private static double toreterrorSpinDamage = 8.0D; private static double toreterrorSpinKnockback = 1.5D; private static double toreterrorRangedWaterBombChance = 0.5D; + private static double toreterrorProjectileDamageMultiplier = 0.5D; private static double waterBombDamage = 6.0D; private static int waterBombLifetimeTicks = 120; private static double waterBombGravity = 0.12D; private static double waterBombKnockback = 1.2D; private static double waterCannonCooldownSeconds = 1.5D; + private static double creepingHorrorHealth = 15.0D; + private static double creepingHorrorAttackDamage = 6.0D; + private static double lurkingTerrorHealth = 15.0D; + private static double lurkingTerrorAttackDamage = 6.0D; private AntarchySettings() { } @@ -1811,6 +1820,18 @@ public final class AntarchySettings { public static float bedBugHealAmount() { return bedBugHealAmount; } public static void setBedBugHealAmount(float value) { bedBugHealAmount = value; } + public static double jumpyBugHealth() { return jumpyBugHealth; } + public static void setJumpyBugHealth(double value) { jumpyBugHealth = value; } + + public static double jumpyBugPounceDamage() { return jumpyBugPounceDamage; } + public static void setJumpyBugPounceDamage(double value) { jumpyBugPounceDamage = value; } + + public static double jumpyBugLatchDamage() { return jumpyBugLatchDamage; } + public static void setJumpyBugLatchDamage(double value) { jumpyBugLatchDamage = value; } + + public static double jumpyBugCamouflageAlpha() { return jumpyBugCamouflageAlpha; } + public static void setJumpyBugCamouflageAlpha(double value) { jumpyBugCamouflageAlpha = value; } + public static double brutalflyArmor() { return brutalflyArmor; } public static void setBrutalflyArmor(double value) { brutalflyArmor = value; } @@ -2334,6 +2355,8 @@ public final class AntarchySettings { public static void setToreterrorSpinKnockback(double v) { toreterrorSpinKnockback = v; } public static double toreterrorRangedWaterBombChance() { return toreterrorRangedWaterBombChance; } public static void setToreterrorRangedWaterBombChance(double v) { toreterrorRangedWaterBombChance = v; } + public static double toreterrorProjectileDamageMultiplier() { return toreterrorProjectileDamageMultiplier; } + public static void setToreterrorProjectileDamageMultiplier(double v) { toreterrorProjectileDamageMultiplier = v; } public static double waterBombDamage() { return waterBombDamage; } public static void setWaterBombDamage(double v) { waterBombDamage = v; } public static int waterBombLifetimeTicks() { return waterBombLifetimeTicks; } @@ -2344,4 +2367,13 @@ public final class AntarchySettings { public static void setWaterBombKnockback(double v) { waterBombKnockback = v; } public static double waterCannonCooldownSeconds() { return waterCannonCooldownSeconds; } public static void setWaterCannonCooldownSeconds(double v) { waterCannonCooldownSeconds = v; } + + public static double creepingHorrorHealth() { return creepingHorrorHealth; } + public static void setCreepingHorrorHealth(double v) { creepingHorrorHealth = v; } + public static double creepingHorrorAttackDamage() { return creepingHorrorAttackDamage; } + public static void setCreepingHorrorAttackDamage(double v) { creepingHorrorAttackDamage = v; } + public static double lurkingTerrorHealth() { return lurkingTerrorHealth; } + public static void setLurkingTerrorHealth(double v) { lurkingTerrorHealth = v; } + public static double lurkingTerrorAttackDamage() { return lurkingTerrorAttackDamage; } + public static void setLurkingTerrorAttackDamage(double v) { lurkingTerrorAttackDamage = v; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 696e804c..61189a44 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -8,6 +8,8 @@ import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; @@ -79,6 +81,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> WATER_BOMB = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> CREEPING_HORROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier> LURKING_TERROR = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_LOG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_SAPLING = (Supplier) UNBOUND; @@ -185,6 +191,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier BED_BUG_EGG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier CREEPING_HORROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier LURKING_TERROR_EGGS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier WASP_NEST = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier HUSHWEED = (Supplier) UNBOUND; @@ -222,6 +232,8 @@ public final class AntarchyObjects { Supplier> hushProjectile, Supplier> toreterror, Supplier> waterBomb, + Supplier> creepingHorror, + Supplier> lurkingTerror, Supplier duplicatorLog, Supplier duplicatorSapling, Supplier ductTape, @@ -272,6 +284,8 @@ public final class AntarchyObjects { Supplier pinkMilkweed, Supplier torchflowerBush, Supplier bedBugEggs, + Supplier creepingHorrorEggs, + Supplier lurkingTerrorEggs, Supplier waspNest, Supplier hushweed, Supplier squirrelNestBlock, @@ -302,6 +316,8 @@ public final class AntarchyObjects { HUSH_PROJECTILE = hushProjectile; TORETERROR = toreterror; WATER_BOMB = waterBomb; + CREEPING_HORROR = creepingHorror; + LURKING_TERROR = lurkingTerror; DUPLICATOR_LOG = duplicatorLog; DUPLICATOR_SAPLING = duplicatorSapling; DUCT_TAPE = ductTape; @@ -352,6 +368,8 @@ public final class AntarchyObjects { PINK_MILKWEED = pinkMilkweed; TORCHFLOWER_BUSH = torchflowerBush; BED_BUG_EGG = bedBugEggs; + CREEPING_HORROR_EGGS = creepingHorrorEggs; + LURKING_TERROR_EGGS = lurkingTerrorEggs; WASP_NEST = waspNest; HUSHWEED = hushweed; SQUIRREL_NEST_BLOCK = squirrelNestBlock; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java new file mode 100644 index 00000000..9eb0af46 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -0,0 +1,190 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class CreepingHorrorEggBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(CreepingHorrorEggBlock::new); + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public CreepingHorrorEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (!entity.isSteppingCarefully()) { + this.destroyEgg(level, state, pos, entity, 100); + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private void destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + } + + private void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + level.removeBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < state.getValue(EGGS); i++) { + CreepingHorrorEntity entity = AntarchyObjects.CREEPING_HORROR.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level) { + return level.random.nextInt(500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof CreepingHorrorEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java new file mode 100644 index 00000000..67e7c2b6 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -0,0 +1,190 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.BlockTags; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.ambient.Bat; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; + +public class LurkingTerrorEggBlock extends Block { + public static final MapCodec CODEC = Block.simpleCodec(LurkingTerrorEggBlock::new); + public static final IntegerProperty HATCH = BlockStateProperties.HATCH; + public static final IntegerProperty EGGS = BlockStateProperties.EGGS; + private static final int MAX_HATCH = 2; + private static final int MAX_EGGS = 4; + private static final VoxelShape SINGLE_SHAPE = Block.box(3.0D, 0.0D, 3.0D, 13.0D, 7.0D, 13.0D); + private static final VoxelShape MULTI_SHAPE = Block.box(1.0D, 0.0D, 1.0D, 15.0D, 7.0D, 15.0D); + + public LurkingTerrorEggBlock(BlockBehaviour.Properties properties) { + super(properties); + this.registerDefaultState(this.stateDefinition.any().setValue(HATCH, 0).setValue(EGGS, 1)); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(EGGS) > 1 ? MULTI_SHAPE : SINGLE_SHAPE; + } + + @Override + protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return level.getBlockState(pos.below()).isFaceSturdy(level, pos.below(), Direction.UP); + } + + @Override + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor level, BlockPos pos, BlockPos neighborPos) { + return state.canSurvive(level, pos) ? super.updateShape(state, direction, neighborState, level, pos, neighborPos) : Blocks.AIR.defaultBlockState(); + } + + @Override + protected boolean canBeReplaced(BlockState state, BlockPlaceContext context) { + return !context.isSecondaryUseActive() + && context.getItemInHand().is(this.asItem()) + && state.getValue(EGGS) < MAX_EGGS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + BlockState existingState = context.getLevel().getBlockState(context.getClickedPos()); + if (existingState.is(this)) { + return existingState.setValue(EGGS, Math.min(MAX_EGGS, existingState.getValue(EGGS) + 1)); + } + return this.defaultBlockState(); + } + + @Override + protected boolean isRandomlyTicking(BlockState state) { + return true; + } + + @Override + protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + return; + } + + int hatch = state.getValue(HATCH); + if (hatch < MAX_HATCH) { + level.setBlock(pos, state.setValue(HATCH, hatch + 1), 2); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_CRACK, SoundSource.BLOCKS, 0.7F, 0.95F + random.nextFloat() * 0.1F); + return; + } + + this.hatchEggs(level, pos, state, random); + } + + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) { + if (!entity.isSteppingCarefully()) { + this.destroyEgg(level, state, pos, entity, 100); + } + super.stepOn(level, pos, state, entity); + } + + @Override + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + this.destroyEgg(level, state, pos, entity, 3); + super.fallOn(level, state, pos, entity, fallDistance); + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving) { + if (hasHatchSupport(level, pos) && !level.isClientSide) { + level.levelEvent(2012, pos, 15); + } + } + + @Override + public void playerDestroy(Level level, Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { + super.playerDestroy(level, player, pos, state, blockEntity, stack); + this.decreaseEggs(level, pos, state); + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(HATCH, EGGS); + } + + public static boolean hasHatchSupport(BlockGetter level, BlockPos pos) { + return isSupportedGround(level, pos.below()); + } + + public static boolean isSupportedGround(BlockGetter level, BlockPos pos) { + return level.getBlockState(pos).is(BlockTags.SAND) || level.getBlockState(pos).blocksMotion(); + } + + private void destroyEgg(Level level, BlockState state, BlockPos pos, Entity entity, int chance) { + if (level.isClientSide || !this.canDestroyEgg(level, entity) || level.random.nextInt(chance) != 0) { + return; + } + level.playSound(null, pos, SoundEvents.TURTLE_EGG_BREAK, SoundSource.BLOCKS, 0.7F, 0.9F + level.random.nextFloat() * 0.2F); + this.decreaseEggs(level, pos, state); + } + + private void hatchEggs(ServerLevel level, BlockPos pos, BlockState state, RandomSource random) { + level.removeBlock(pos, false); + level.playSound(null, pos, SoundEvents.TURTLE_EGG_HATCH, SoundSource.BLOCKS, 0.75F, 0.95F + random.nextFloat() * 0.1F); + + for (int i = 0; i < state.getValue(EGGS); i++) { + LurkingTerrorEntity entity = AntarchyObjects.LURKING_TERROR.get().create(level); + if (entity == null) { + continue; + } + double spawnX = pos.getX() + 0.25D + random.nextDouble() * 0.5D; + double spawnZ = pos.getZ() + 0.25D + random.nextDouble() * 0.5D; + entity.moveTo(spawnX, pos.getY() + 0.1D, spawnZ, random.nextFloat() * 360.0F, 0.0F); + level.addFreshEntity(entity); + } + } + + private void decreaseEggs(Level level, BlockPos pos, BlockState state) { + int eggs = state.getValue(EGGS); + if (eggs <= 1) { + level.destroyBlock(pos, false); + return; + } + level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); + } + + private boolean shouldUpdateHatchLevel(Level level) { + return level.random.nextInt(500) == 0; + } + + private boolean canDestroyEgg(Level level, Entity entity) { + if (entity instanceof LurkingTerrorEntity || entity instanceof Bat) { + return false; + } + if (entity instanceof net.minecraft.world.entity.LivingEntity) { + return entity instanceof Player || level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); + } + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java new file mode 100644 index 00000000..f96729cb --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/CreepingHorrorModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class CreepingHorrorModel extends GeoModel { + @Override + public ResourceLocation getModelResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/creeping_horror.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/creeping_horror.png"); + } + + @Override + public ResourceLocation getAnimationResource(CreepingHorrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/creeping_horror.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java new file mode 100644 index 00000000..ce3332d8 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/JumpyBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class JumpyBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/jumpy_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/jumpy_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(JumpyBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/jumpy_bug.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java new file mode 100644 index 00000000..c5c995be --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/LurkingTerrorModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class LurkingTerrorModel extends GeoModel { + @Override + public ResourceLocation getModelResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/lurking_terror.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/lurking_terror.png"); + } + + @Override + public ResourceLocation getAnimationResource(LurkingTerrorEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/lurking_terror.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java new file mode 100644 index 00000000..5155f3ad --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java @@ -0,0 +1,28 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.CreepingHorrorModel; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +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 CreepingHorrorRenderer extends GeoEntityRenderer { + public CreepingHorrorRenderer(EntityRendererProvider.Context context) { + super(context, new CreepingHorrorModel()); + this.shadowRadius = 0.5F; + } + + @Override + public void preRender(PoseStack poseStack, CreepingHorrorEntity 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.isClimbing()) { + poseStack.mulPose(Axis.XP.rotationDegrees(-90.0F)); + poseStack.translate(0, -0.5, 0.5); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java new file mode 100644 index 00000000..6ebee8a3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/JumpyBugRenderer.java @@ -0,0 +1,44 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.JumpyBugModel; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Axis; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import net.minecraft.resources.ResourceLocation; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.cache.object.BakedGeoModel; +import software.bernie.geckolib.renderer.GeoEntityRenderer; +import software.bernie.geckolib.util.Color; + +public class JumpyBugRenderer extends GeoEntityRenderer { + public JumpyBugRenderer(EntityRendererProvider.Context context) { + super(context, new JumpyBugModel()); + this.shadowRadius = 3.0F; + } + + @Override + public RenderType getRenderType(JumpyBugEntity animatable, ResourceLocation texture, @Nullable MultiBufferSource bufferSource, float partialTick) { + return animatable.isCamouflaged() ? RenderType.entityTranslucent(texture) : RenderType.entityCutoutNoCull(texture); + } + + @Override + public Color getRenderColor(JumpyBugEntity animatable, float partialTick, int packedLight) { + int alpha = Math.max(10, Math.min(255, Math.round(animatable.getVisualAlpha(partialTick) * 255.0F))); + return Color.ofRGBA(255, 255, 255, alpha); + } + + @Override + public void preRender(PoseStack poseStack, JumpyBugEntity 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); + this.shadowRadius = animatable.isCamouflaged() ? 1.0F : 3.0F; + + if (animatable.isClingingToCeiling()) { + poseStack.translate(0.0F, animatable.getBbHeight() + 0.05F, 0.0F); + poseStack.mulPose(Axis.ZP.rotationDegrees(180.0F)); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java new file mode 100644 index 00000000..e3ce19a9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/LurkingTerrorRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.LurkingTerrorModel; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class LurkingTerrorRenderer extends GeoEntityRenderer { + public LurkingTerrorRenderer(EntityRendererProvider.Context context) { + super(context, new LurkingTerrorModel()); + this.shadowRadius = 0.5F; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java new file mode 100644 index 00000000..414d76cf --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -0,0 +1,130 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +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.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class CreepingHorrorEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CLIMBING = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + + 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().thenLoop("attack"); + private static final byte ATTACK_ANIM_EVENT = 4; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public CreepingHorrorEntity(EntityType type, Level level) { + super(type, level); + } + + @Override + public float maxUpStep() { + return 1.0F; + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(CLIMBING, false); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.30D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public boolean onClimbable() { + return this.horizontalCollision; + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { + return state.setAndContinue(ATTACK_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + attackAnimTicks = 20; + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + attackAnimTicks = 20; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + super.tick(); + if (attackAnimTicks > 0) attackAnimTicks--; + } + + //TODO IT NEVER ACTUALLY SETS TO CLIMBING + public boolean isClimbing() { + return this.entityData.get(CLIMBING); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java new file mode 100644 index 00000000..68efc88e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java @@ -0,0 +1,738 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +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.ByIdMap; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.util.StringRepresentable; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.SpawnGroupData; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.Goal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.RandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.EnumSet; +import java.util.function.IntFunction; + +public class JumpyBugEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor CAMOUFLAGED = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor CLINGING_TO_CEILING = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor LATCHED_TARGET_ID = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ATTACK_STATE = + SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); + + private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown"; + private static final String LATCH_COOLDOWN_KEY = "LatchCooldown"; + private static final String LATCH_TICKS_KEY = "LatchTicksRemaining"; + private static final String BITE_COOLDOWN_KEY = "BiteCooldown"; + private static final String RECOVERY_TICKS_KEY = "RecoveryTicks"; + private static final String POUNCE_TICKS_KEY = "PounceTicks"; + + private static final double DEFAULT_MOVEMENT_SPEED = 0.25D; + private static final double DEFAULT_FOLLOW_RANGE = 16.0D; + private static final double DEFAULT_POUNCE_RANGE = 8.0D; + private static final int DEFAULT_LATCH_DURATION = 80; + private static final int DEFAULT_BITE_INTERVAL = 15; + private static final int DEFAULT_POUNCE_COOLDOWN = 60; + private static final int DEFAULT_LATCH_COOLDOWN = 80; + private static final int DEFAULT_RECOVERY_TICKS = 20; + private static final double POUNCE_HORIZONTAL_SPEED = 0.92D; + private static final double POUNCE_UPWARD_SPEED = 0.45D; + private static final double QUICK_MOVE_SQR = 0.14D * 0.14D; + private static final double CLING_SEARCH_RANGE = 1.5D; + private static final double LATCH_CHECK_RANGE = 0.85D; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenLoop("jump"); + private static final RawAnimation ATTACK_ANIM = RawAnimation.begin().thenPlay("attack"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + private int pounceCooldownTicks; + private int latchCooldownTicks; + private int latchTicksRemaining; + private int biteCooldownTicks; + private int recoveryTicks; + private int pounceTicks; + private float visualAlpha = 1.0F; + private float previousVisualAlpha = 1.0F; + + public JumpyBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 6; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.jumpyBugHealth()) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.jumpyBugPounceDamage()) + .add(Attributes.MOVEMENT_SPEED, DEFAULT_MOVEMENT_SPEED) + .add(Attributes.FOLLOW_RANGE, DEFAULT_FOLLOW_RANGE); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + return level.getDifficulty() != Difficulty.PEACEFUL + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(CAMOUFLAGED, false); + builder.define(CLINGING_TO_CEILING, false); + builder.define(LATCHED_TARGET_ID, -1); + builder.define(ATTACK_STATE, AttackState.GROUND.id()); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new LatchedGoal()); + this.goalSelector.addGoal(2, new PounceAttackGoal()); + this.goalSelector.addGoal(3, new CeilingClingGoal()); + this.goalSelector.addGoal(4, new ChaseTargetGoal()); + this.goalSelector.addGoal(5, new WanderGoal()); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks); + tag.putInt(LATCH_COOLDOWN_KEY, this.latchCooldownTicks); + tag.putInt(LATCH_TICKS_KEY, this.latchTicksRemaining); + tag.putInt(BITE_COOLDOWN_KEY, this.biteCooldownTicks); + tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks); + tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY); + this.latchCooldownTicks = tag.getInt(LATCH_COOLDOWN_KEY); + this.latchTicksRemaining = tag.getInt(LATCH_TICKS_KEY); + this.biteCooldownTicks = tag.getInt(BITE_COOLDOWN_KEY); + this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY); + this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY); + } + + @Override + @Nullable + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnGroupData) { + this.setHealth((float) AntarchySettings.jumpyBugHealth()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + } + + @Override + public void tick() { + this.previousVisualAlpha = this.visualAlpha; + this.visualAlpha += (this.getTargetVisualAlpha() - this.visualAlpha) * 0.25F; + + super.tick(); + + if (this.level().isClientSide) { + return; + } + + if (this.pounceCooldownTicks > 0) { + this.pounceCooldownTicks--; + } + if (this.latchCooldownTicks > 0) { + this.latchCooldownTicks--; + } + if (this.biteCooldownTicks > 0) { + this.biteCooldownTicks--; + } + if (this.recoveryTicks > 0) { + this.recoveryTicks--; + } + + if (this.isLatched()) { + this.tickLatched(); + } else if (this.isClingingToCeiling()) { + this.tickClinging(); + } else if (this.isPouncing()) { + this.tickPouncing(); + } else { + this.setNoGravity(false); + this.noPhysics = false; + if (this.getAttackState() != AttackState.RECOVERING || this.recoveryTicks <= 0) { + this.setAttackState(AttackState.GROUND); + } + } + + this.updateCamouflage(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isLatched() || this.isClingingToCeiling()) { + this.setDeltaMovement(Vec3.ZERO); + return; + } + super.travel(travelVector); + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (!hurt) { + return false; + } + + this.setCamouflaged(false); + this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS); + if (this.isLatched()) { + this.detachFromTarget(true); + } + if (this.isClingingToCeiling()) { + this.stopClinging(); + } + if (this.isPouncing()) { + this.finishPounce(false); + } + return true; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { + return false; + } + + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.SPIDER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.SPIDER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.SPIDER_DEATH; + } + + @Override + protected void playStepSound(BlockPos pos, BlockState blockState) { + this.playSound(SoundEvents.SPIDER_STEP, 0.12F, 1.1F); + } + + public boolean isCamouflaged() { + return this.entityData.get(CAMOUFLAGED); + } + + public boolean isClingingToCeiling() { + return this.entityData.get(CLINGING_TO_CEILING); + } + + public boolean isLatched() { + return this.entityData.get(LATCHED_TARGET_ID) != -1; + } + + public boolean isLatchedTo(LivingEntity entity) { + return this.entityData.get(LATCHED_TARGET_ID) == entity.getId(); + } + + public boolean isPouncing() { + return this.getAttackState() == AttackState.POUNCING; + } + + public float getVisualAlpha(float partialTick) { + return Mth.lerp(partialTick, this.previousVisualAlpha, this.visualAlpha); + } + + public AttackState getAttackState() { + return AttackState.BY_ID.apply(this.entityData.get(ATTACK_STATE)); + } + + private void setCamouflaged(boolean value) { + this.entityData.set(CAMOUFLAGED, value); + } + + private void setClingingToCeiling(boolean value) { + this.entityData.set(CLINGING_TO_CEILING, value); + } + + private void setAttackState(AttackState state) { + this.entityData.set(ATTACK_STATE, state.id()); + } + + private float getTargetVisualAlpha() { + return this.isCamouflaged() ? (float) AntarchySettings.jumpyBugCamouflageAlpha() : 1.0F; + } + + private PlayState mainAnimController(AnimationState state) { + AttackState attackState = this.getAttackState(); + if (attackState == AttackState.POUNCING || attackState == AttackState.LATCHED || attackState == AttackState.CLINGING) { + return state.setAndContinue(JUMP_ANIM); + } + if (attackState == AttackState.RECOVERING) { + return state.setAndContinue(ATTACK_ANIM); + } + return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + } + + private void tickClinging() { + BlockPos clingPos = this.findClingBlockPos(); + if (clingPos == null) { + this.stopClinging(); + return; + } + + this.setAttackState(AttackState.CLINGING); + this.setCamouflaged(true); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + this.move(MoverType.SELF, Vec3.ZERO); + this.setPos(this.getX(), clingPos.getY() - this.getBbHeight() - 0.01D, this.getZ()); + } + + private void tickPouncing() { + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.pounceTicks++; + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive() && this.distanceToSqr(target) <= (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE) * (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE)) { + if (this.tryLatch(target)) { + return; + } + } + + if (this.onGround() && this.pounceTicks > 4) { + this.finishPounce(false); + } + } + + private void tickLatched() { + LivingEntity target = this.getLatchedTarget(); + if (target == null || !target.isAlive() || target.level() != this.level() || target.isRemoved() || target.isInWater()) { + this.detachFromTarget(false); + return; + } + + this.setAttackState(AttackState.LATCHED); + this.setCamouflaged(false); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + + Vec3 latchPos = this.getLatchPosition(target); + this.setPos(latchPos.x, latchPos.y, latchPos.z); + this.yRotO = this.getYRot(); + this.setYRot(target.getYHeadRot()); + this.setYBodyRot(target.getYHeadRot()); + this.setYHeadRot(target.getYHeadRot()); + this.setXRot(-20.0F); + + if (--this.latchTicksRemaining <= 0) { + this.detachFromTarget(true); + return; + } + + if (this.biteCooldownTicks <= 0) { + target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugLatchDamage()); + this.biteCooldownTicks = DEFAULT_BITE_INTERVAL; + this.playSound(SoundEvents.SPIDER_HURT, 0.35F, 1.5F + this.random.nextFloat() * 0.2F); + } + } + + private void updateCamouflage() { + if (this.isLatched() || this.isPouncing()) { + this.setCamouflaged(false); + return; + } + + boolean idle = this.getTarget() == null && this.getDeltaMovement().horizontalDistanceSqr() < 0.003D; + boolean stalking = this.isClingingToCeiling(); + boolean movingQuickly = this.getDeltaMovement().lengthSqr() > QUICK_MOVE_SQR; + boolean shouldCamouflage = !movingQuickly && (idle || stalking); + this.setCamouflaged(shouldCamouflage); + } + + private boolean tryLatch(LivingEntity target) { + if (!(target instanceof Player) || this.latchCooldownTicks > 0 || this.isLatched()) { + return false; + } + if (this.level().getEntitiesOfClass(JumpyBugEntity.class, target.getBoundingBox().inflate(0.75D), + bug -> bug != this && bug.isLatchedTo(target)).isEmpty()) { + this.entityData.set(LATCHED_TARGET_ID, target.getId()); + this.latchTicksRemaining = DEFAULT_LATCH_DURATION; + this.biteCooldownTicks = 0; + this.pounceTicks = 0; + this.setAttackState(AttackState.LATCHED); + this.setTarget(target); + target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage()); + return true; + } + return false; + } + + private void detachFromTarget(boolean knockAway) { + LivingEntity target = this.getLatchedTarget(); + this.entityData.set(LATCHED_TARGET_ID, -1); + this.latchTicksRemaining = 0; + this.biteCooldownTicks = DEFAULT_BITE_INTERVAL; + this.latchCooldownTicks = DEFAULT_LATCH_COOLDOWN; + this.setAttackState(AttackState.RECOVERING); + this.recoveryTicks = DEFAULT_RECOVERY_TICKS; + this.setNoGravity(false); + this.noPhysics = false; + + if (knockAway && target != null) { + Vec3 away = this.position().subtract(target.position()); + if (away.lengthSqr() < 1.0E-4D) { + away = target.getLookAngle().scale(-1.0D); + } + away = away.normalize(); + this.setDeltaMovement(away.x * 0.35D, 0.25D, away.z * 0.35D); + this.hasImpulse = true; + } + } + + @Nullable + private LivingEntity getLatchedTarget() { + int entityId = this.entityData.get(LATCHED_TARGET_ID); + if (entityId == -1) { + return null; + } + + Entity entity = this.level().getEntity(entityId); + return entity instanceof LivingEntity livingEntity ? livingEntity : null; + } + + private Vec3 getLatchPosition(LivingEntity target) { + Vec3 eyePos = target.position().add(0.0D, target.getEyeHeight() - 0.15D, 0.0D); + Vec3 backOffset = target.getLookAngle().normalize().scale(-0.16D); + return eyePos.add(backOffset).add(0.0D, -0.18D, 0.0D); + } + + @Nullable + private BlockPos findClingBlockPos() { + BlockPos origin = this.blockPosition(); + for (int dy = 1; dy <= 2; dy++) { + BlockPos candidate = origin.above(dy); + if (this.isCeilingBlock(candidate)) { + return candidate; + } + } + return null; + } + + private boolean isCeilingBlock(BlockPos pos) { + return this.level().getBlockState(pos).isFaceSturdy(this.level(), pos, net.minecraft.core.Direction.DOWN); + } + + private boolean canClingHere() { + return this.findClingBlockPos() != null; + } + + private void beginClinging() { + this.setClingingToCeiling(true); + this.setAttackState(AttackState.CLINGING); + this.setNoGravity(true); + this.noPhysics = true; + this.getNavigation().stop(); + this.setDeltaMovement(Vec3.ZERO); + } + + private void stopClinging() { + this.setClingingToCeiling(false); + this.setAttackState(AttackState.GROUND); + this.setNoGravity(false); + this.noPhysics = false; + } + + private void beginPounce(LivingEntity target) { + this.stopClinging(); + this.setTarget(target); + this.setAttackState(AttackState.POUNCING); + this.setCamouflaged(false); + this.getNavigation().stop(); + this.pounceCooldownTicks = DEFAULT_POUNCE_COOLDOWN; + this.pounceTicks = 0; + + Vec3 from = this.position(); + Vec3 to = target.getEyePosition().subtract(from); + Vec3 horizontal = new Vec3(to.x, 0.0D, to.z); + Vec3 direction = horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : target.getLookAngle(); + double upward = POUNCE_UPWARD_SPEED + Mth.clamp(to.y * 0.08D, -0.04D, 0.22D); + this.setDeltaMovement(direction.x * POUNCE_HORIZONTAL_SPEED, upward, direction.z * POUNCE_HORIZONTAL_SPEED); + this.hasImpulse = true; + } + + private void finishPounce(boolean keepMomentum) { + this.pounceTicks = 0; + if (!keepMomentum) { + Vec3 movement = this.getDeltaMovement(); + this.setDeltaMovement(movement.x * 0.25D, Math.max(0.0D, movement.y), movement.z * 0.25D); + } + this.setAttackState(AttackState.RECOVERING); + this.recoveryTicks = DEFAULT_RECOVERY_TICKS; + } + + private boolean canUseAmbush() { + return !this.isLatched() + && !this.isPouncing() + && this.recoveryTicks <= 0 + && this.latchCooldownTicks <= 0; + } + + private enum AttackState implements StringRepresentable { + GROUND(0, "ground"), + CLINGING(1, "clinging"), + POUNCING(2, "pouncing"), + LATCHED(3, "latched"), + RECOVERING(4, "recovering"); + + private static final IntFunction BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); + public static final Codec CODEC = StringRepresentable.fromEnum(AttackState::values); + + private final int id; + private final String name; + + AttackState(int id, String name) { + this.id = id; + this.name = name; + } + + public int id() { + return this.id; + } + + @Override + public String getSerializedName() { + return this.name; + } + } + + private final class LatchedGoal extends Goal { + private LatchedGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + return JumpyBugEntity.this.isLatched(); + } + + @Override + public boolean canContinueToUse() { + return JumpyBugEntity.this.isLatched(); + } + + @Override + public void tick() { + JumpyBugEntity.this.getNavigation().stop(); + } + } + + private final class PounceAttackGoal extends Goal { + private PounceAttackGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && JumpyBugEntity.this.canUseAmbush() + && JumpyBugEntity.this.pounceCooldownTicks <= 0 + && JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE + && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D); + } + + @Override + public boolean canContinueToUse() { + return JumpyBugEntity.this.isPouncing(); + } + + @Override + public void start() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target != null) { + JumpyBugEntity.this.beginPounce(target); + } + } + } + + private final class CeilingClingGoal extends Goal { + private CeilingClingGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); + } + + @Override + public boolean canUse() { + if (!JumpyBugEntity.this.canUseAmbush() || JumpyBugEntity.this.isClingingToCeiling()) { + return false; + } + + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target == null) { + return JumpyBugEntity.this.random.nextInt(40) == 0 && JumpyBugEntity.this.canClingHere(); + } + + return JumpyBugEntity.this.distanceToSqr(target) <= (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE) * (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE) + && JumpyBugEntity.this.canClingHere(); + } + + @Override + public boolean canContinueToUse() { + return JumpyBugEntity.this.isClingingToCeiling(); + } + + @Override + public void start() { + JumpyBugEntity.this.beginClinging(); + } + + @Override + public void stop() { + if (JumpyBugEntity.this.isClingingToCeiling()) { + JumpyBugEntity.this.stopClinging(); + } + } + + @Override + public void tick() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target == null) { + return; + } + + JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (JumpyBugEntity.this.pounceCooldownTicks <= 0 + && JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE + && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 4.0D)) { + JumpyBugEntity.this.stopClinging(); + JumpyBugEntity.this.beginPounce(target); + } + } + } + + private final class ChaseTargetGoal extends Goal { + private ChaseTargetGoal() { + this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK)); + } + + @Override + public boolean canUse() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + return target != null + && target.isAlive() + && !JumpyBugEntity.this.isLatched() + && !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && JumpyBugEntity.this.recoveryTicks <= 0; + } + + @Override + public boolean canContinueToUse() { + return this.canUse(); + } + + @Override + public void tick() { + LivingEntity target = JumpyBugEntity.this.getTarget(); + if (target == null) { + return; + } + + JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); + if (JumpyBugEntity.this.distanceToSqr(target) > DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE) { + JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); + } else { + JumpyBugEntity.this.getNavigation().stop(); + } + } + } + + private final class WanderGoal extends RandomStrollGoal { + private WanderGoal() { + super(JumpyBugEntity.this, 0.8D); + } + + @Override + public boolean canUse() { + return !JumpyBugEntity.this.isLatched() + && !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && JumpyBugEntity.this.getTarget() == null + && super.canUse(); + } + + @Override + public boolean canContinueToUse() { + return !JumpyBugEntity.this.isLatched() + && !JumpyBugEntity.this.isClingingToCeiling() + && !JumpyBugEntity.this.isPouncing() + && super.canContinueToUse(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java new file mode 100644 index 00000000..7e0c68e0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -0,0 +1,126 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.goal.FloatGoal; +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.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class LurkingTerrorEntity extends Monster implements GeoEntity { + 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_LAND_ANIM = RawAnimation.begin().thenLoop("attackland"); + private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair"); + private static final byte ATTACK_ANIM_EVENT = 5; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int attackAnimTicks = 0; + + public LurkingTerrorEntity(EntityType type, Level level) { + super(type, level); + this.moveControl = new FlyingMoveControl(this, 10, true); + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth()) + .add(Attributes.MOVEMENT_SPEED, 0.25D) + .add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage()) + .add(Attributes.FOLLOW_RANGE, 16.0D) + .add(Attributes.FLYING_SPEED, 0.4D); + } + + @Override + protected PathNavigation createNavigation(Level level) { + FlyingPathNavigation nav = new FlyingPathNavigation(this, level); + nav.setCanOpenDoors(false); + nav.setCanFloat(true); + nav.setCanPassDoors(true); + return nav; + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0D, true)); + this.goalSelector.addGoal(2, new WaterAvoidingRandomStrollGoal(this, 0.85D)); + this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 8.0F)); + this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 3, this::mainAnimController)); + } + + private PlayState mainAnimController(AnimationState state) { + if (attackAnimTicks > 0) { +// if (!this.isOnGround()) { +// return state.setAndContinue(ATTACK_AIR_ANIM); +// } + return state.setAndContinue(ATTACK_LAND_ANIM); + } + if (state.isMoving()) { + return state.setAndContinue(WALK_ANIM); + } + return state.setAndContinue(IDLE_ANIM); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return geoCache; + } + + @Override + public boolean doHurtTarget(net.minecraft.world.entity.Entity target) { + boolean result = super.doHurtTarget(target); + if (result) { + attackAnimTicks = 20; + this.level().broadcastEntityEvent(this, ATTACK_ANIM_EVENT); + } + return result; + } + + @Override + public void handleEntityEvent(byte id) { + if (id == ATTACK_ANIM_EVENT) { + attackAnimTicks = 20; + return; + } + super.handleEntityEvent(id); + } + + @Override + public void tick() { + super.tick(); + if (attackAnimTicks > 0) attackAnimTicks--; + } + + @Override + public boolean causeFallDamage(float fallDistance, float multiplier, net.minecraft.world.damagesource.DamageSource source) { + return false; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index 4b6fd083..fd5aedc9 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -16,6 +16,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.world.BossEvent; import net.minecraft.world.Difficulty; +import net.minecraft.tags.DamageTypeTags; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; @@ -219,6 +220,10 @@ public class ToreterrorEntity extends Monster implements GeoEntity { @Override public boolean hurt(DamageSource source, float amount) { + if (source.is(net.minecraft.world.damagesource.DamageTypes.DROWN)) return false; + if (source.is(DamageTypeTags.IS_PROJECTILE)) { + amount *= (float) AntarchySettings.toreterrorProjectileDamageMultiplier(); + } if (!this.isPhase2()) { float halfHealth = this.getMaxHealth() * 0.5F; if (this.getHealth() - amount <= halfHealth) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java new file mode 100644 index 00000000..db801b58 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsHelper.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.content.item; + +public final class JumpyBootsHelper { + public static final int CHARGE_TICKS_MAX = 30; + public static final int PRIME_WINDOW_TICKS = 15; + public static final int COOLDOWN_TICKS = 40; + + public static final float MAX_VERTICAL_BOOST = 2.0F; + public static final float SPRINT_FORWARD_BOOST = 0.3F; + public static final long FALL_PROTECTION_TICKS = 120L; + public static final String FALL_PROTECTION_NBT_KEY = "antarchy:jumpy_boots_protection_until"; + + private JumpyBootsHelper() { + } + + public static float verticalBoostFor(int chargeTicks) { + float ratio = Math.min(chargeTicks / (float) CHARGE_TICKS_MAX, 1.0F); + return ratio * MAX_VERTICAL_BOOST; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java new file mode 100644 index 00000000..56606f28 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/JumpyBootsItem.java @@ -0,0 +1,33 @@ +package com.craisinlord.antarchy.content.item; + +import net.minecraft.ChatFormatting; +import net.minecraft.core.Holder; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; + +import java.util.List; + +public final class JumpyBootsItem extends ArmorItem { + public JumpyBootsItem(Holder material, Properties properties) { + super(material, Type.BOOTS, properties); + } + + public static boolean isWearingJumpyBoots(net.minecraft.world.entity.LivingEntity entity) { + return entity != null && entity.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.FEET).getItem() instanceof JumpyBootsItem; + } + + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public void appendHoverText(ItemStack stack, Item.TooltipContext context, List tooltipComponents, TooltipFlag tooltipFlag) { + tooltipComponents.add(Component.translatable("tooltip.antarchy.jumpy_boots").withStyle(ChatFormatting.DARK_RED)); + super.appendHoverText(stack, context, tooltipComponents, tooltipFlag); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java b/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java new file mode 100644 index 00000000..705a7146 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/network/JumpyBootsLaunchPayload.java @@ -0,0 +1,24 @@ +package com.craisinlord.antarchy.content.network; + +import com.craisinlord.antarchy.Antarchy; +import io.netty.buffer.ByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +public record JumpyBootsLaunchPayload(int chargeTicks, boolean sprinting) implements CustomPacketPayload { + public static final Type TYPE = + new Type<>(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots_launch")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.composite( + ByteBufCodecs.VAR_INT, JumpyBootsLaunchPayload::chargeTicks, + ByteBufCodecs.BOOL, JumpyBootsLaunchPayload::sprinting, + JumpyBootsLaunchPayload::new + ); + + @Override + public Type type() { + return TYPE; + } +} diff --git a/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json b/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json new file mode 100644 index 00000000..f9736e11 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/creeping_horror.animation.json @@ -0,0 +1,2372 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "rightjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [17.5, 0, 0] + }, + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [20, 0, 0] + }, + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [27.5, 0, 0] + }, + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftjaw": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json new file mode 100644 index 00000000..c81914d5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/jumpy_bug.animation.json @@ -0,0 +1,3181 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4.5, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-12.2252, -29.0774, 13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [13.6745, 58.6061, 23.203] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [6, -34.72, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [6, -32.3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [4, -29.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -28.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-6, -34.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-6, -32.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-6, -32.24, -6] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -31.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.5714, 35.9552, -34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-23.5556, 44.8303, -14.2689] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump": { + "animation_length": 2.5, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.1699, 28.0243, 22.7959] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-19.4984, 23.2443, -41.8996] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.4984, 23.2443, -41.8996] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 41.52] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 41.52] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -46.05] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -46.05] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -31.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 43.69, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 43.69, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [11.1699, -28.0243, -22.7959] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-19.4984, -23.2443, 41.8996] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.4984, -23.2443, 41.8996] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -41.52] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -41.52] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 46.05] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 46.05] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -35.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-11.1699, 28.0243, -22.7959] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.4984, 23.2443, 41.8996] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.4984, 23.2443, 41.8996] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -41.52] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -41.52] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 46.05] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 46.05] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -35.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-11.1699, -28.0243, 22.7959] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.4984, -23.2443, -41.8996] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.4984, -23.2443, -41.8996] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 41.52] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 41.52] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -46.05] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -46.05] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35.58] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35.58] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attack": { + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -27.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, -0.9366, -25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, 0.9366, 25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json b/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json new file mode 100644 index 00000000..8f8c3f13 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/lurking_terror.animation.json @@ -0,0 +1,6934 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10.257, -28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.6179, -48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [7.6439, -48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [0, 3.75, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-9.6179, 48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [7.6439, 48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10.257, 28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.6439, 48.8755, -28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [9.6179, 48.6127, -5.3962] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10.257, 28.8205, -9.1359] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-7.6439, -48.8755, 28.2259] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.6179, -48.6127, 5.3962] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-10.257, -28.8205, 9.1359] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [15, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, -16.44, 8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, -3.2477, 3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, 3.99, 12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, 19.5763, 16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, 16.9546, 18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, -23.6439, 15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, -16.6, 9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [-1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.21, 16.44, -8.76] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [8.9897, 3.2477, -3.637] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [-6.3574, -3.99, -12.1976] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [2.6844, -19.5763, -16.2625] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3.7346, -16.9546, -18.7439] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [12.4227, 23.6439, -15.3703] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [11.25, 16.6, -9.19] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.0625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.3125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.4375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 0, -0.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5625": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8125": { + "post": { + "vector": [1, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9375": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 0, -0.06] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackland": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, -30.5717, -24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, -4.5993, -32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, -26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 6, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [0, 9.13, -4.06] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 6, -9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [5, 0, 0] + }, + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [10, 0, 0] + }, + "post": { + "vector": [10, 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" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.3553, 30.5717, 24.192] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-0.505, 4.5993, 32.7137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [15.3924, 26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 1.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 29] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, 21.5444, -24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, 41.2302, -13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, 26.5931, -20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-13.8657, -21.5444, 24.5629] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-6.3454, -41.2302, 13.6458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.3924, -26.5931, 20.1521] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-2.5016, -3.2493, -22.6194] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 19.5, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.6521] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -24.75] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, -3.1406, -63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-38.9808, 3.1406, 63.2916] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, 8.7591, -67.0544] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-47.3233, -8.7591, 67.0544] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fly": { + "loop": true, + "animation_length": 5, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 4, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-12.6866, 9.7606, 2.1856] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-12.9264, -14.6364, -3.3192] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-12.6866, -9.7606, -2.1856] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.9153, 19.2911, 5.3815] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.9153, -19.2911, -5.3815] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-19.5682, -26.1278, -8.8967] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-18.5482, 19.0375, 6.246] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-18.5482, -19.0375, -6.246] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "3.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "3.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "4.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "4.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "5.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "attackair": { + "loop": true, + "animation_length": 1, + "bones": { + "upperRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, 10, 0] + }, + "post": { + "vector": [-10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, -8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, -9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1875": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 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.125": { + "post": { + "vector": [0, 4, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -2, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 3, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6875": { + "post": { + "vector": [0, 5, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.14, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailbase": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-22.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.6866, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailmiddle": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-30.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.9153, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tailtip": { + "rotation": { + "0.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-36.0482, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-18.5482, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontleg": { + "rotation": { + "0.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.3284, 8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [28.9762, 9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftfrontfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, 8.552, -63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, 9.77, -61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackleg": { + "rotation": { + "0.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.3284, -8.552, 63.7354] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-28.9762, -9.77, 61.5239] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftbackfoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerRightJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, 10, 0] + }, + "post": { + "vector": [10, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "upperLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [-10, -10, 0] + }, + "post": { + "vector": [-10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "lowerLeftJaw": { + "rotation": { + "0.0": { + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [15, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "1.0": { + "pre": { + "vector": [10, -10, 0] + }, + "post": { + "vector": [10, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleleg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddleknee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -10.39] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightmiddlefoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -44.61] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, 0.9139, -76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, 1.1797, -43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing1": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-25.0746, -0.9139, 76.0322] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.0298, -1.1797, 43.4554] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, 5.8091, -78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, 5.6479, -39.0075] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightWing2": { + "rotation": { + "0.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [-37.0054, -5.8091, 78.4915] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25.1727, -5.6479, 39.0075] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json new file mode 100644 index 00000000..ea78b5ad --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/creeping_horror_eggs_1" }, + { "model": "antarchy:block/creeping_horror_eggs_1", "y": 90 }, + { "model": "antarchy:block/creeping_horror_eggs_1", "y": 180 }, + { "model": "antarchy:block/creeping_horror_eggs_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1" }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/creeping_horror_eggs_2" }, + { "model": "antarchy:block/creeping_horror_eggs_2", "y": 90 }, + { "model": "antarchy:block/creeping_horror_eggs_2", "y": 180 }, + { "model": "antarchy:block/creeping_horror_eggs_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2" }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/creeping_horror_eggs_3" }, + { "model": "antarchy:block/creeping_horror_eggs_3", "y": 90 }, + { "model": "antarchy:block/creeping_horror_eggs_3", "y": 180 }, + { "model": "antarchy:block/creeping_horror_eggs_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3" }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/creeping_horror_eggs_4" }, + { "model": "antarchy:block/creeping_horror_eggs_4", "y": 90 }, + { "model": "antarchy:block/creeping_horror_eggs_4", "y": 180 }, + { "model": "antarchy:block/creeping_horror_eggs_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4" }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 270 } + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json new file mode 100644 index 00000000..a44f9824 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json @@ -0,0 +1,76 @@ +{ + "variants": { + "eggs=1,hatch=0": [ + { "model": "antarchy:block/lurking_terror_eggs_1" }, + { "model": "antarchy:block/lurking_terror_eggs_1", "y": 90 }, + { "model": "antarchy:block/lurking_terror_eggs_1", "y": 180 }, + { "model": "antarchy:block/lurking_terror_eggs_1", "y": 270 } + ], + "eggs=1,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 270 } + ], + "eggs=1,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1" }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 270 } + ], + "eggs=2,hatch=0": [ + { "model": "antarchy:block/lurking_terror_eggs_2" }, + { "model": "antarchy:block/lurking_terror_eggs_2", "y": 90 }, + { "model": "antarchy:block/lurking_terror_eggs_2", "y": 180 }, + { "model": "antarchy:block/lurking_terror_eggs_2", "y": 270 } + ], + "eggs=2,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 270 } + ], + "eggs=2,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2" }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 270 } + ], + "eggs=3,hatch=0": [ + { "model": "antarchy:block/lurking_terror_eggs_3" }, + { "model": "antarchy:block/lurking_terror_eggs_3", "y": 90 }, + { "model": "antarchy:block/lurking_terror_eggs_3", "y": 180 }, + { "model": "antarchy:block/lurking_terror_eggs_3", "y": 270 } + ], + "eggs=3,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 270 } + ], + "eggs=3,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3" }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 270 } + ], + "eggs=4,hatch=0": [ + { "model": "antarchy:block/lurking_terror_eggs_4" }, + { "model": "antarchy:block/lurking_terror_eggs_4", "y": 90 }, + { "model": "antarchy:block/lurking_terror_eggs_4", "y": 180 }, + { "model": "antarchy:block/lurking_terror_eggs_4", "y": 270 } + ], + "eggs=4,hatch=1": [ + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 270 } + ], + "eggs=4,hatch=2": [ + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4" }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 270 } + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json b/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json new file mode 100644 index 00000000..2b93facf --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/creeping_horror.geo.json @@ -0,0 +1,197 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.creepinghorror", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 9, + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]}, + {"origin": [-6, 0, -7], "size": [12, 12, 14], "inflate": 0.25, "uv": [0, 46]}, + {"origin": [-6, 0, -7], "size": [12, 12, 14], "inflate": 0.5, "uv": [52, 0]}, + {"origin": [-4, 2, -7], "size": [8, 8, 2], "uv": [104, 12]}, + {"origin": [-6, 9.85673, -2.40373], "size": [12, 0, 5], "pivot": [0, 6, -7], "rotation": [50, 0, 0], "uv": [100, 84]}, + {"origin": [-6, 10.24264, -0.75736], "size": [12, 0, 6], "pivot": [0, 6, -5], "rotation": [45, 0, 0], "uv": [100, 54]}, + {"origin": [-6, 11.19615, 1], "size": [12, 0, 7], "pivot": [0, 6, -2], "rotation": [30, 0, 0], "uv": [100, 43]}, + {"origin": [-6, 11.43785, 4.53571], "size": [12, 0, 8], "pivot": [0, 6, 2], "rotation": [25, 0, 0], "uv": [92, 35]}, + {"origin": [-6, 11.79555, 8.55291], "size": [12, 0, 9], "pivot": [0, 6, 7], "rotation": [15, 0, 0], "uv": [92, 26]}, + {"origin": [-6, 0, -7], "size": [12, 0, 5], "pivot": [0, 0, -7], "rotation": [30, 0, -180], "uv": [100, 84]}, + {"origin": [-6, 0, -5], "size": [12, 0, 6], "pivot": [0, 0, -5], "rotation": [25, 0, -180], "uv": [100, 54]}, + {"origin": [-6, 0, -2], "size": [12, 0, 7], "pivot": [0, 0, -2], "rotation": [15, 0, -180], "uv": [100, 43]}, + {"origin": [-6, 0, 2], "size": [12, 0, 8], "pivot": [0, 0, 2], "rotation": [10, 0, -180], "uv": [92, 35]}, + {"origin": [-6, 0, 7], "size": [12, 0, 9], "pivot": [0, 0, 7], "rotation": [0, 0, 180], "uv": [92, 26]}, + {"origin": [-12, 6, -2], "size": [12, 0, 7], "pivot": [-6, 6, -2], "rotation": [20, 0, -90], "uv": [100, 43], "mirror": true}, + {"origin": [-12, 6, 2], "size": [12, 0, 8], "pivot": [-6, 6, 2], "rotation": [10, 0, -90], "uv": [92, 35], "mirror": true}, + {"origin": [-12, 6, 7], "size": [12, 0, 9], "pivot": [-6, 6, 7], "rotation": [5, 0, -90], "uv": [92, 26], "mirror": true}, + {"origin": [0, 6, 2], "size": [12, 0, 8], "pivot": [6, 6, 2], "rotation": [10, 0, 90], "uv": [92, 35]}, + {"origin": [0, 6, 7], "size": [12, 0, 9], "pivot": [6, 6, 7], "rotation": [5, 0, 90], "uv": [92, 26]}, + {"origin": [0, 6, -2], "size": [12, 0, 7], "pivot": [6, 6, -2], "rotation": [20, 0, 90], "uv": [100, 43]} + ] + }, + { + "name": "rightjaw", + "parent": "body", + "pivot": [-6, 6, -7], + "cubes": [ + {"origin": [-6, 3, -13], "size": [4, 6, 6], "uv": [104, 0]} + ] + }, + { + "name": "leftjaw", + "parent": "body", + "pivot": [6, 6, -7], + "cubes": [ + {"origin": [2, 3, -13], "size": [4, 6, 6], "uv": [104, 0], "mirror": true} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [52, 46]}, + {"origin": [-5, 1, 7], "size": [10, 10, 14], "inflate": 0.25, "uv": [52, 70]}, + {"origin": [-5, 1, 7], "size": [10, 10, 14], "inflate": 0.5, "uv": [0, 72]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 94]}, + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "inflate": 0.25, "uv": [90, 94]}, + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "inflate": 0.5, "uv": [0, 96]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-1.5, 4.5, 35], "size": [3, 3, 14], "uv": [58, 26]}, + {"origin": [-4.5, 6, 39], "size": [9, 0, 20], "uv": [0, 26]} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [100, 60]}, + {"origin": [-18, 6, -6], "size": [12, 4, 4], "inflate": 0.25, "uv": [100, 68]}, + {"origin": [-18, 6, -6], "size": [12, 4, 4], "inflate": 0.5, "uv": [100, 76]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [100, 60]}, + {"origin": [-18, 6, 3], "size": [12, 4, 4], "inflate": 0.25, "uv": [100, 68]}, + {"origin": [-18, 6, 3], "size": [12, 4, 4], "inflate": 0.5, "uv": [100, 76]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [42, 115]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [100, 50]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [100, 60], "mirror": true}, + {"origin": [6, 6, -6], "size": [12, 4, 4], "inflate": 0.25, "uv": [100, 68], "mirror": true}, + {"origin": [6, 6, -6], "size": [12, 4, 4], "inflate": 0.5, "uv": [100, 76], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [100, 60], "mirror": true}, + {"origin": [6, 6, 3], "size": [12, 4, 4], "inflate": 0.25, "uv": [100, 68], "mirror": true}, + {"origin": [6, 6, 3], "size": [12, 4, 4], "inflate": 0.5, "uv": [100, 76], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [42, 115], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [100, 50], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json new file mode 100644 index 00000000..aacb5227 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/jumpy_bug.geo.json @@ -0,0 +1,285 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.jumpybug", + "texture_width": 512, + "texture_height": 512, + "visible_bounds_width": 10, + "visible_bounds_height": 9.5, + "visible_bounds_offset": [0, 4.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 65, 0], + "cubes": [ + {"origin": [-10, 65, -18], "size": [20, 32, 36], "uv": [0, 164]}, + {"origin": [-12, 97, -46], "size": [24, 12, 80], "uv": [0, 0]}, + {"origin": [-10, 81, 18], "size": [20, 16, 16], "uv": [224, 152]}, + {"origin": [-8, 97, -78], "size": [16, 12, 32], "uv": [176, 92]}, + {"origin": [-10, 109, -58], "size": [20, 4, 12], "uv": [224, 184]}, + {"origin": [-4, 89, -78], "size": [8, 8, 4], "uv": [176, 152]}, + {"origin": [-18, 67, -16], "size": [8, 24, 32], "uv": [208, 0]}, + {"origin": [10, 67, -16], "size": [8, 24, 32], "uv": [112, 212]}, + {"origin": [-10, 89, -26], "size": [20, 8, 8], "uv": [192, 252]}, + {"origin": [-2, 79, -34], "size": [4, 4, 16], "uv": [228, 268]}, + {"origin": [-10, 65, -26], "size": [20, 8, 8], "uv": [248, 252]}, + {"origin": [-6, 65, -40], "size": [12, 6, 14], "uv": [64, 268]}, + {"origin": [-12, 57, -42], "size": [24, 8, 64], "uv": [0, 92]}, + {"origin": [-8, 57, -74], "size": [16, 8, 32], "uv": [192, 212]}, + {"origin": [-4, 65, -74], "size": [8, 8, 4], "uv": [200, 152]} + ] + }, + { + "name": "rightEye", + "parent": "body", + "pivot": [-10, 82, -18], + "cubes": [ + {"origin": [-14, 78, -22], "size": [8, 8, 8], "uv": [0, 272]} + ] + }, + { + "name": "leftEye", + "parent": "body", + "pivot": [10, 82, -18], + "cubes": [ + {"origin": [6, 78, -22], "size": [8, 8, 8], "uv": [0, 272], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "body", + "pivot": [-18, 78, -16], + "cubes": [ + {"origin": [-22, 76, -28], "size": [8, 4, 12], "uv": [268, 268]} + ] + }, + { + "name": "leftGrip", + "parent": "body", + "pivot": [18, 78, -16], + "cubes": [ + {"origin": [14, 76, -28], "size": [8, 4, 12], "uv": [268, 268], "mirror": true} + ] + }, + { + "name": "rightAntenna", + "parent": "body", + "pivot": [-10, 95, 14], + "cubes": [ + {"origin": [-42, 93, 14], "size": [32, 4, 4], "uv": [208, 77]} + ] + }, + { + "name": "leftAntenna", + "parent": "body", + "pivot": [10, 95, 14], + "cubes": [ + {"origin": [10, 93, 14], "size": [32, 4, 4], "uv": [208, 77], "mirror": true} + ] + }, + { + "name": "rightArm", + "parent": "body", + "pivot": [-12, 93, -22], + "cubes": [ + {"origin": [-14, 91, -40], "size": [4, 4, 20], "uv": [64, 232]} + ] + }, + { + "name": "rightElbow", + "parent": "rightArm", + "pivot": [-12, 95, -34], + "cubes": [ + {"origin": [-15, 91, -40], "size": [6, 32, 6], "uv": [204, 268]} + ] + }, + { + "name": "rightClaw", + "parent": "rightElbow", + "pivot": [-12, 123, -40], + "cubes": [ + {"origin": [-14, 115, -56], "size": [4, 8, 16], "uv": [164, 268]}, + {"origin": [-12, 115, -88], "size": [0, 8, 32], "uv": [0, 232]} + ] + }, + { + "name": "leftArm", + "parent": "body", + "pivot": [12, 93, -22], + "cubes": [ + {"origin": [10, 91, -40], "size": [4, 4, 20], "uv": [64, 232], "mirror": true} + ] + }, + { + "name": "leftElbow", + "parent": "leftArm", + "pivot": [12, 95, -34], + "cubes": [ + {"origin": [9, 91, -40], "size": [6, 32, 6], "uv": [204, 268], "mirror": true} + ] + }, + { + "name": "leftClaw", + "parent": "leftElbow", + "pivot": [12, 123, -40], + "cubes": [ + {"origin": [10, 115, -56], "size": [4, 8, 16], "uv": [164, 268], "mirror": true}, + {"origin": [12, 115, -88], "size": [0, 8, 32], "uv": [0, 232], "mirror": true} + ] + }, + { + "name": "backRightThigh", + "parent": "root", + "pivot": [-12, 65, 14], + "cubes": [ + {"origin": [-28, 57, 10], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-28, 65, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-60, 57, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, 10], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-108, 64, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, 14], "size": [16, 4, 0], "uv": [208, 85]} + ] + }, + { + "name": "backLeftThigh", + "parent": "root", + "pivot": [12, 65, 14], + "cubes": [ + {"origin": [12, 57, 10], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [28, 65, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 55, 9], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [60, 57, 14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, 10], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [108, 64, 14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, 12], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, 14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontLeftThigh", + "parent": "root", + "pivot": [12, 65, -14], + "cubes": [ + {"origin": [12, 57, -18], "size": [16, 8, 8], "uv": [116, 268], "mirror": true} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [28, 65, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [28, 55, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56], "mirror": true} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [60, 57, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [60, 57, -18], "size": [48, 8, 8], "uv": [176, 136], "mirror": true} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [108, 64, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [108, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200], "mirror": true}, + {"origin": [132, 60, -14], "size": [16, 4, 0], "uv": [208, 85], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "root", + "pivot": [-12, 65, -14], + "cubes": [ + {"origin": [-28, 57, -18], "size": [16, 8, 8], "uv": [116, 268]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-28, 65, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-60, 55, -19], "size": [32, 11, 10], "inflate": 0.025, "uv": [208, 56]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-60, 57, -14], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-108, 57, -18], "size": [48, 8, 8], "uv": [176, 136]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-108, 64, -14], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-132, 60, -16], "size": [24, 4, 4], "inflate": 0.025, "uv": [224, 200]}, + {"origin": [-148, 60, -14], "size": [16, 4, 0], "uv": [208, 85]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json b/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json new file mode 100644 index 00000000..a58c99ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/lurking_terror.geo.json @@ -0,0 +1,281 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.lurkingterror", + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 7, + "visible_bounds_height": 3.5, + "visible_bounds_offset": [0, 1.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 0, 0], + "cubes": [ + {"origin": [-6, 0, -7], "size": [12, 12, 14], "uv": [0, 0]} + ] + }, + { + "name": "upperRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, 13.5, -21], "size": [4, 3, 14], "pivot": [4, 5.5, -14], "rotation": [0, 0, -90], "uv": [0, 50]}, + {"origin": [5.5, 16.5, -21], "size": [3, 3, 14], "pivot": [4, 8.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [8.5, 15.5, -21], "size": [3, 4, 14], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [64, 47]}, + {"origin": [4.5, 15.5, -21], "size": [4, 4, 2], "pivot": [7, 8.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [8.5, -1.5, -20], "size": [6, 1, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [64, 65]}, + {"origin": [14.5, -7.5, -20], "size": [1, 6, 13], "pivot": [11, 9.5, -14], "rotation": [0, 0, 90], "uv": [34, 87]} + ] + }, + { + "name": "upperLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, 13.5, -21], "size": [4, 3, 14], "pivot": [-4, 5.5, -14], "rotation": [0, 0, 90], "uv": [0, 50]}, + {"origin": [-8.5, 16.5, -21], "size": [3, 3, 14], "pivot": [-4, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [-11.5, 15.5, -21], "size": [3, 4, 14], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [0, 67]}, + {"origin": [-8.5, 15.5, -21], "size": [4, 4, 2], "pivot": [-7, 8.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [-14.5, -1.5, -20], "size": [6, 1, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [64, 79]}, + {"origin": [-15.5, -7.5, -20], "size": [1, 6, 13], "pivot": [-11, 9.5, -14], "rotation": [0, 0, -90], "uv": [88, 0]} + ] + }, + { + "name": "lowerRightJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [4.5, -4.5, -21], "size": [4, 3, 14], "pivot": [4, 6.5, -14], "rotation": [0, 0, 90], "uv": [52, 0]}, + {"origin": [5.5, -7.5, -21], "size": [3, 3, 14], "pivot": [4, 3.5, -14], "rotation": [0, 0, 90], "uv": [0, 85]}, + {"origin": [8.5, -7.5, -21], "size": [3, 4, 14], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 47]}, + {"origin": [4.5, -7.5, -21], "size": [4, 4, 2], "pivot": [7, 3.5, -14], "rotation": [0, 0, 90], "uv": [34, 68]}, + {"origin": [8.5, -7.5, -20], "size": [6, 1, 13], "pivot": [11, 3.5, -14], "rotation": [0, 0, 90], "uv": [64, 79]}, + {"origin": [14.5, -6.5, -20], "size": [1, 6, 13], "pivot": [11, 10.5, -14], "rotation": [0, 0, 90], "uv": [88, 0]} + ] + }, + { + "name": "lowerLeftJaw", + "parent": "body", + "pivot": [0, 6, -7], + "cubes": [ + {"origin": [-8.5, -4.5, -21], "size": [4, 3, 14], "pivot": [-4, 6.5, -14], "rotation": [0, 0, -90], "uv": [52, 0]}, + {"origin": [-8.5, -7.5, -21], "size": [3, 3, 14], "pivot": [-4, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 85]}, + {"origin": [-11.5, -7.5, -21], "size": [3, 4, 14], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [0, 67]}, + {"origin": [-8.5, -7.5, -21], "size": [4, 4, 2], "pivot": [-7, 3.5, -14], "rotation": [0, 0, -90], "uv": [34, 68]}, + {"origin": [-14.5, -7.5, -20], "size": [6, 1, 13], "pivot": [-11, 3.5, -14], "rotation": [0, 0, -90], "uv": [64, 65]}, + {"origin": [-15.5, -6.5, -20], "size": [1, 6, 13], "pivot": [-11, 10.5, -14], "rotation": [0, 0, -90], "uv": [34, 87]} + ] + }, + { + "name": "tailbase", + "parent": "body", + "pivot": [0, 6, 7], + "cubes": [ + {"origin": [-5, 1, 7], "size": [10, 10, 14], "uv": [0, 26]} + ] + }, + { + "name": "tailmiddle", + "parent": "tailbase", + "pivot": [0, 6, 21], + "cubes": [ + {"origin": [-3.5, 2.5, 21], "size": [7, 7, 14], "uv": [48, 26]} + ] + }, + { + "name": "tailtip", + "parent": "tailmiddle", + "pivot": [0, 6, 35], + "cubes": [ + {"origin": [-5, 1, 35], "size": [10, 10, 14], "uv": [0, 26]} + ] + }, + { + "name": "leftWing1", + "parent": "body", + "pivot": [-2, 12, -7], + "cubes": [ + {"origin": [-2, 12, -7], "size": [0, 32, 8], "uv": [48, 47]} + ] + }, + { + "name": "leftWing2", + "parent": "body", + "pivot": [-3, 12, 0], + "cubes": [ + {"origin": [-3, 12, 0], "size": [0, 27, 8], "uv": [48, 47]} + ] + }, + { + "name": "rightWing1", + "parent": "body", + "pivot": [2, 12, -7], + "cubes": [ + {"origin": [2, 12, -7], "size": [0, 32, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightWing2", + "parent": "body", + "pivot": [3, 12, 0], + "cubes": [ + {"origin": [3, 12, 0], "size": [0, 27, 8], "uv": [48, 47], "mirror": true} + ] + }, + { + "name": "rightfrontleg", + "parent": "root", + "pivot": [-6, 8, -3], + "cubes": [ + {"origin": [-18, 6, -6], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightfrontknee", + "parent": "rightfrontleg", + "pivot": [-18, 6, -4], + "cubes": [ + {"origin": [-18, 6, -5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightfrontfoot", + "parent": "rightfrontknee", + "pivot": [-18, 18, -4], + "cubes": [ + {"origin": [-35, 18, -4], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "rightbackleg", + "parent": "root", + "pivot": [-6, 8, 4], + "cubes": [ + {"origin": [-18, 6, 3], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightbackknee", + "parent": "rightbackleg", + "pivot": [-18, 6, 5], + "cubes": [ + {"origin": [-18, 6, 4], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightbackfoot", + "parent": "rightbackknee", + "pivot": [-18, 18, 5], + "cubes": [ + {"origin": [-35, 18, 5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftfrontleg", + "parent": "root", + "pivot": [6, 8, -3], + "cubes": [ + {"origin": [6, 6, -6], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftfrontknee", + "parent": "leftfrontleg", + "pivot": [18, 6, -4], + "cubes": [ + {"origin": [15, 6, -5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftfrontfoot", + "parent": "leftfrontknee", + "pivot": [18, 18, -4], + "cubes": [ + {"origin": [15, 18, -4], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "leftmiddleleg", + "parent": "root", + "pivot": [6, 8, 1.5], + "cubes": [ + {"origin": [6, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftmiddleknee", + "parent": "leftmiddleleg", + "pivot": [18, 6, 0.5], + "cubes": [ + {"origin": [15, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftmiddlefoot", + "parent": "leftmiddleknee", + "pivot": [18, 18, 0.5], + "cubes": [ + {"origin": [15, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + }, + { + "name": "rightmiddleleg", + "parent": "root", + "pivot": [-6, 8, 1.5], + "cubes": [ + {"origin": [-18, 6, -1.5], "size": [12, 4, 4], "uv": [90, 23]} + ] + }, + { + "name": "rightmiddleknee", + "parent": "rightmiddleleg", + "pivot": [-18, 6, 0.5], + "cubes": [ + {"origin": [-18, 6, -0.5], "size": [3, 16, 2], "uv": [36, 50]} + ] + }, + { + "name": "rightmiddlefoot", + "parent": "rightmiddleknee", + "pivot": [-18, 18, 0.5], + "cubes": [ + {"origin": [-35, 18, 0.5], "size": [20, 4, 0], "uv": [52, 19]} + ] + }, + { + "name": "leftbackleg", + "parent": "root", + "pivot": [6, 8, 4], + "cubes": [ + {"origin": [6, 6, 3], "size": [12, 4, 4], "uv": [90, 23], "mirror": true} + ] + }, + { + "name": "leftbackknee", + "parent": "leftbackleg", + "pivot": [18, 6, 5], + "cubes": [ + {"origin": [15, 6, 4], "size": [3, 16, 2], "uv": [36, 50], "mirror": true} + ] + }, + { + "name": "leftbackfoot", + "parent": "leftbackknee", + "pivot": [18, 18, 5], + "cubes": [ + {"origin": [15, 18, 5], "size": [20, 4, 0], "uv": [52, 19], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index fa5c36a8..74920b84 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -92,6 +92,8 @@ "block.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", "block.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", "block.antarchy.bed_bug_egg": "Bed Bug Egg", + "block.antarchy.creeping_horror_eggs": "Creeping Horror Eggs", + "block.antarchy.lurking_terror_eggs": "Lurking Terror Eggs", "block.antarchy.wasp_nest": "Wasp Nest", "block.antarchy.red_ant_nest": "Red Ant Nest", "block.antarchy.brown_ant_nest": "Brown Ant Nest", @@ -144,6 +146,7 @@ "entity.antarchy.missile_squid": "Missile Squid", "entity.antarchy.nightmare": "Nightmare", "entity.antarchy.bed_bug": "Bed Bug", + "entity.antarchy.jumpy_bug": "Jumpy Bug", "entity.antarchy.wasp": "Wasp", "entity.antarchy.bomber": "Bomber", "entity.antarchy.moleworm": "Moleworm", @@ -152,6 +155,8 @@ "entity.antarchy.triffid": "Triffid", "entity.antarchy.toreterror": "Toreterror", "entity.antarchy.water_bomb": "Water Bomb", + "entity.antarchy.creeping_horror": "Creeping Horror", + "entity.antarchy.lurking_terror": "Lurking Terror", "subtitles.antarchy.mantis_ambient": "Mantis clicks", "subtitles.antarchy.mantis_hurt": "Mantis screeches", "subtitles.antarchy.mantis_attack": "Mantis snaps", @@ -160,6 +165,7 @@ "item.antarchy.wasp_nest": "Wasp Nest", "item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg", "item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg", + "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", "item.antarchy.big_bertha_blade": "Big Bertha Blade", "item.antarchy.big_bertha_handle": "Big Bertha Handle", "item.antarchy.big_bertha_hilt": "Big Bertha Hilt", @@ -278,7 +284,11 @@ "tooltip.antarchy.blood_crystal_katana.launch": "Launches you forward on hit.", "tooltip.antarchy.blood_crystal_katana.trail": "Leaves a crimson trail behind you.", "item.antarchy.mantis_claw": "Mantis Claw", + "item.antarchy.king_scale": "King Scale", + "item.antarchy.queen_scale": "Queen Scale", "item.antarchy.jumpy_bug_leg": "Jumpy Bug Leg", + "item.antarchy.jumpy_boots": "Jumpy Boots", + "tooltip.antarchy.jumpy_boots": "Sneak to charge, then jump to spring upward.", "item.antarchy.brutalfly_wing": "Brutalfly Wing", "item.antarchy.brutalfly_elytra": "Brutalfly Elytra", "tooltip.antarchy.brutalfly_elytra.flap": "While flying, hold %s to flap your wings", @@ -348,6 +358,8 @@ "item.antarchy.missile_squid_spawn_egg": "Missile Squid Spawn Egg", "item.antarchy.nightmare_spawn_egg": "Nightmare Spawn Egg", "item.antarchy.toreterror_spawn_egg": "Toreterror Spawn Egg", + "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", + "item.antarchy.lurking_terror_spawn_egg": "Lurking Terror Spawn Egg", "item.antarchy.water_cannon": "Water Cannon", "item.antarchy.primordial_scute": "Primordial Scute", "item.antarchy.primordial_helmet": "Primordial Helmet", @@ -459,6 +471,10 @@ "advancements.antarchy.now_watch_me_whip.description": "Now watch me nae nae", "advancements.antarchy.kill_molevore.title": "Moley Poley", "advancements.antarchy.kill_molevore.description": "Kill a Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Wetter is Better!", + "advancements.antarchy.water_cannon_craft.description": "Obtain a Water Cannon.", + "advancements.antarchy.kill_toreterror.title": "More like Tore-Terrible Aim!", + "advancements.antarchy.kill_toreterror.description": "Defeat the Toreterror.", "death.attack.bed_bug_bite": "%1$s got bit by the bed bugs", "death.attack.bed_bug_bite.player": "%1$s got bit by the bed bugs while fighting %2$s", "message.antarchy.dread_too_scared_to_sleep": "You are too scared to sleep.", @@ -670,6 +686,10 @@ "advancements.antarchy.ultimate_bow.description": "Obtain an Ultimate Bow.", "advancements.antarchy.kill_molevore.title": "Moley Poley", "advancements.antarchy.kill_molevore.description": "Kill a Molevore.", + "advancements.antarchy.water_cannon_craft.title": "Wetter is Better!", + "advancements.antarchy.water_cannon_craft.description": "Obtain a Water Cannon.", + "advancements.antarchy.kill_toreterror.title": "More like Tore-Terrible Aim!", + "advancements.antarchy.kill_toreterror.description": "Defeat the Toreterror.", "advancements.antarchy.cancel_out.title": "1 - 1 = ?", "advancements.antarchy.cancel_out.description": "Have Growth and Shrinking active at the same time.", "death.attack.bed_bug_bite": "%1$s got bit by the bed bugs", diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json new file mode 100644 index 00000000..7a7c5178 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json new file mode 100644 index 00000000..504f83af --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json new file mode 100644 index 00000000..444bdf36 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json new file mode 100644 index 00000000..f93265b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json new file mode 100644 index 00000000..a63af561 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json new file mode 100644 index 00000000..71eec9e4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json new file mode 100644 index 00000000..7e5d23e4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json new file mode 100644 index 00000000..a971716e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json new file mode 100644 index 00000000..c7684d53 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json new file mode 100644 index 00000000..6ec1173a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json new file mode 100644 index 00000000..ec94e0ff --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json new file mode 100644 index 00000000..c1ba4ffb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json new file mode 100644 index 00000000..7c3dc843 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json new file mode 100644 index 00000000..5e296fad --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json new file mode 100644 index 00000000..7f1c780e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json new file mode 100644 index 00000000..7a890da7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_slightly_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json new file mode 100644 index 00000000..78cbec5a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json new file mode 100644 index 00000000..bde1c914 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json new file mode 100644 index 00000000..4c29c62b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json new file mode 100644 index 00000000..40ccb68c --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json new file mode 100644 index 00000000..248b4d18 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_turtle_egg", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json new file mode 100644 index 00000000..0ac42d62 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_two_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json new file mode 100644 index 00000000..40a9f01b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_three_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json new file mode 100644 index 00000000..ca09f12d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/template_four_turtle_eggs", + "textures": { + "all": "antarchy:block/lurking_terror_egg/lurking_terror_egg_very_cracked" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json new file mode 100644 index 00000000..b06b0d97 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/creeping_horror_eggs_1" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json b/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json new file mode 100644 index 00000000..c7c80c03 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/jumpy_boots.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/jumpy_boots" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/jumpy_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/king_scale.json b/common/src/main/resources/assets/antarchy/models/item/king_scale.json new file mode 100644 index 00000000..b338cb8e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/king_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/king_scale" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json new file mode 100644 index 00000000..7cc8b116 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/lurking_terror_eggs_1" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/queen_scale.json b/common/src/main/resources/assets/antarchy/models/item/queen_scale.json new file mode 100644 index 00000000..50abbda8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/queen_scale.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/queen_scale" + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png b/common/src/main/resources/assets/antarchy/textures/block/amber_moss/amber_lichen.png new file mode 100644 index 0000000000000000000000000000000000000000..cb7a9d841d66be046db7ad095163edeba6c42cb2 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~zW|>QS0H`j z$eP|+Q@Xmlnwpx*%FBQvxIn3mdaJW~w~yiUP_3o0+UxVo&{VeYe(D7ZNtFco1vC7| z1=xfBDgafbdb&7(1O=x8B^?=D1Z?xJ#4^QIohUlF zVpE~Pa@jAOiMgsR;(`9s5x%Rg>FwDh{E|0!r@nk}^7I#JD|=&ePnc)@c~!bz@tyh$ fq5GFO?f#_KpVeXe_oYMeILM`*u6{1-oD!Mb@?P)Px$_en%SR49=>lD%%+Fc5@?)QL+a5{)=w5#PCyiUZQbO;D5jw16iY?#r!k_nbaD}Z_t_XB`Suz`O?ggn zj1m93G;4?n9~Q_AUX?MnBvK zSyT2tH?$ce08~1SQI?7-o!ps>5p#-ro4wDscgYwbSr`EK^*(?5ssKDYF{d~M#jjnj zkB80sEK5aPJ-Jv@?t0AzE}L?UlI_)$gAeXZ0Co(7wLLICrM=BH#lZoP{J)`GDzX>R zok^C8{*JTvx$89#&4|Y+kB9B#;@)P4HaJu|$x5e&HUN*0naK_g&rTc<+u+bznu017 z4GsXNpk!;QRK!?bqv(1KprMUn1RpA$*tRjE(y6$yZKcz)6w6YSyH&2s@FMFEs{Xin zpT$l9_-v5HR#P^YTFxnYpDUg0MFcQ7FxHwf!>B21qd5)12g#V`$T$embb@?P)Px$_en%SR49=>lD%%+Fc5@?)QL+a5{)=w5#PCyiUZQbO;D5jw16iY?#r!k_nbaD}Z_t_XB`Suz`O?ggn zj1m93G;4?n9~Q_AUX?MnBvK zSyT2tH?$ce08~1SQI?7-o!ps>5p#-ro4wDscgYwbSr`EK^*(?5ssKDYF{d~M#jjnj zkB80sEK5aPJ-Jv@?t0AzE}L?UlI_)$gAeXZ0Co(7wLLICrM=BH#lZoP{J)`GDzX>R zok^C8{*JTvx$89#&4|Y+kB9B#;@)P4HaJu|$x5e&HUN*0naK_g&rTc<+u+bznu017 z4GsXNpk!;QRK!?bqv(1KprMUn1RpA$*tRjE(y6$yZKcz)6w6YSyH&2s@FMFEs{Xin zpT$l9_-v5HR#P^YTFxnYpDUg0MFcQ7FxHwf!>B21qd5)12g#V`$T$embPx$q)9|UR5*=olgn!3FcgNraZFstMk1F*FvyTaA+s7N^tt9e<^lRr1BI>{n1#WD z(nZoDVK+{}%q-F)lxfe(1|9uZeY^Yh^RGKNeD8UBdFRv}8M}daCgl|XS(#HUrZlY! z-wANBoRv8@x7T6u=JuK&-wm5u1JJaNu^XrsQ%r40Y-?#+2f(J*Y|RSa`|$63k6vm_ zZKxJg#%^G?o}&tdJ2=vqj;Rgq;COm@XHs6F3WZ*tk=?l zg{cjCsj;mkD|1qzDF>Sm8Di2`m&S}zF-}H0@bGv>kY0$Xapap?lL}4S+Tea{?9T3a z>juVd;QsfY(2uOlQH3HEbX6#t4_&e>+5u+kIortCo!#SmPx}9@aViq)Y(1x1OfNi; zR;FJqe#$+HPNa%AX`F408XFZelIEV@h9=3%Jmf8PjT4D`5|>FNBr&>P>Wi3UY-`!s geR!?1oRvBM0GOdIXYu?}xBvhE07*qoM6N<$g8Y-=6#xJL literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs.png new file mode 100644 index 0000000000000000000000000000000000000000..905c49c9bf5afb59cf804e22c7664d4f92c45c9e GIT binary patch literal 465 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/chiten.png b/common/src/main/resources/assets/antarchy/textures/item/chiten.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0ea5bff1ee04fe140310e8bfaa819afc0f0062 GIT binary patch literal 323 zcmV-J0lfZ+P)Px#{YgYYR5*>@(6LLyKorOEZ>$J~YK7VcCsDg7PP+CVaO>Q~!T(L@)<40avpA@9 z$RZd_Lk{lFgG@(UdPicSW)pnNad+?Y7@7ywMfadK;{+zWh_>j?A1tOS|w(oJ}W1x4+BP>7j?^uxOp4jK#dZGrxZf8Yeg!?sz;7M*uv$Jb4IIa4q0q zZ$Pw88HXbul*AG%O${~%WLlt%g%DPe_z}9=Dqq~DGu;kXCa}_wY|fSHwZi|TJ^@RM Vk!bNNOl|-G002ovPDHLkV1h@@kO=?) literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png b/common/src/main/resources/assets/antarchy/textures/item/creeping_horror_egg.png new file mode 100644 index 0000000000000000000000000000000000000000..3f83ab768a2a976b0435869e0d9cb31d2bed1d08 GIT binary patch literal 428 zcmV;d0aN~oP)Px$W=TXrR5*>rlEF#>Q51&%8zD0>=8Ox4ASYVrs;u0KvPx$jY&j7R5*>zl0QfSaTLctNf0!3Eh8E=Eli6cI#F5xF&F(G(OkG}q8z zTx(NXe;`5v5sTW44$`3v;)V-6q=fF*P=-s_U`prZTyJ{s_j~X2`~JQ>`0HqDbn&7N z+SR;pUjm?K_uAFp{M+#QnreH)nM%>;#|v0HY0k#F?cqeu0dW!6*Hk;8$VfgJ0AU(T zy{mYa`>}S?WKu! zP~Z*wq0i4Whj5k0I>@8UCeXf>1QZ!di~kPTZ;KGf$&iCb-5~OMPH?W1Je69?>OATO zh1XJJ1>x}#TH8I8oPx#?MXyIR5*>*lCchgFc^dn5wRc+=s=+!Yufxnm0TM;5`7)MOrI_?i$mQrB{y4Em`m^t_0EnIjD7bdZ=S+AHbs}%6V z!OX^V(h|92l)kMk(GoazEqqZn5yv0tqWyv}j+jX-06=!7NG@eBT#x~_!IFI};J5-^ zBH|=p2^?CBzYFyCaFyoZbh3uZm)ji$#+|=4)|`8&(p-rvbFf*jSn1onD*-^2=9r!D z*d-@Jo&$w|WDlTyFaQ93imU0Qoy7N-=GrBvCNB~EUN3OjO>Qulw^#rG002ovPDHLk FV1oMRfPx$c1c7*R5*>zlD$qNF%*Tr1hQmiFd8(g@Ds5brJz_AR@z6PrJ$kUHFy&qgMuan zJ$)o3K-vN%K%gi>Xq2ls9s`qLijasfKnu6Jw$C{}KECkPRru&&XLiXA`x`fa?aOrz zKlvWHR*4;1pS7tHzr8X5d!qR}z2J_!t-_}QwMy(%;L!+u8i1CRb?LGlDi95CL?+*o z7poCbpqTv;0MHH$bz?y^Yg47cb6$z$9B4_=l9GfzT2cTOs}c2P0uLD*67=-5H99h>s$9H`Jo8;h2d8PDhBAp;7C7340@?kEP)Px$;7LS5R5*>5l0it5VHn4M-w@hKXd@&mqRaY}62!I!j!*)3+K|2oa&&022&B^v zfu|0`=rHJ@hi#4$gf96JMd*Se#UwVPw!+0|#D|8|^pogN>+*DH`^ehD{Z9`s@Bjb& zp67jGj|wMs2`6=F`LaKjkZ@9$jh!v=M55MNy>4q1@aap1^q2xry6; zpZ&3f1OsQ8nJoRE!XHbBd=E)Jw78Ee9<8v1>;qcEct4j8~3nmm4o}$0#u~S)yW^bas5By|bO^bPc@1PLn;{OOg7|dHV|o>A9rYB zM{_rO!3%|m7lJa?t$J@S373B1U}bIRlT+|!=ajW^y=5=pncLHOh<{Pt{px)xin)6x zsfeCXV?1EdmztUH7%1a1?|o;n-{B8jdsrG4XShH9G0h;VK;n<=jSsp2j{LoIN>h` zL-O3*|2!V&RRRpmIx}xsExF%*v^-mB#T#yC73&>$q+b1AUV7`tjVS`{kE;B9-_My> o3-sOp|6I3Agn$e-kT;nbxC>Jqbr~7n07V!)UHx3vIVCg!0N}4~!~g&Q diff --git a/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json b/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json new file mode 100644 index 00000000..8a19a910 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/kill_toreterror.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "kill_toreterror": { + "conditions": { + "entity": { + "type": "antarchy:toreterror" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.kill_toreterror.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "id": "antarchy:toreterror_spawn_egg" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.kill_toreterror.title" + } + }, + "requirements": [ + [ + "kill_toreterror" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json b/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json new file mode 100644 index 00000000..eaaa28c9 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/water_cannon_craft.json @@ -0,0 +1,36 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "get_water_cannon": { + "conditions": { + "items": [ + { + "items": "antarchy:water_cannon" + } + ] + }, + "trigger": "minecraft:inventory_changed" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.water_cannon_craft.description" + }, + "frame": "task", + "icon": { + "count": 1, + "id": "antarchy:water_cannon" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.water_cannon_craft.title" + } + }, + "requirements": [ + [ + "get_water_cannon" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json b/common/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json new file mode 100644 index 00000000..ee8223b7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_eggs.json @@ -0,0 +1 @@ +{"type":"minecraft:block","pools":[]} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json b/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json new file mode 100644 index 00000000..7cb9cc54 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json @@ -0,0 +1,33 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:jumpy_bug_leg", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json b/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json new file mode 100644 index 00000000..ab820d6c --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/jumpy_boots.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "JBJ", + "J J" + ], + "key": { + "J": { + "item": "antarchy:jumpy_bug_leg" + }, + "B": { + "item": "minecraft:netherite_boots" + } + }, + "result": { + "id": "antarchy:jumpy_boots", + "count": 1 + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index e02456ad..48850b92 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -55,6 +55,7 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -66,6 +67,8 @@ import com.craisinlord.antarchy.content.item.LucidPearlItem; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; @@ -191,6 +194,7 @@ import net.minecraft.world.item.StandingAndWallBlockItem; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; +import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleType; @@ -614,6 +618,22 @@ public final class AntarchyFabricContent { () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); + public static final DeferredBlock CREEPING_HORROR_EGGS = BLOCKS.register("creeping_horror_eggs", + () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.of() + .strength(0.15F) + .sound(SoundType.METAL) + .randomTicks() + .noOcclusion() + .noCollission() + .replaceable())); + public static final DeferredBlock LURKING_TERROR_EGGS = BLOCKS.register("lurking_terror_eggs", + () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.of() + .strength(0.15F) + .sound(SoundType.METAL) + .randomTicks() + .noOcclusion() + .noCollission() + .replaceable())); public static final DeferredBlock BED_BUG_EGG = BLOCKS.register("bed_bug_egg", () -> new BedBugEggBlock(BlockBehaviour.Properties.of() .strength(0.15F) @@ -749,6 +769,11 @@ public final class AntarchyFabricContent { .sized(0.55F, 0.75F) .clientTrackingRange(8) .build("bomber")); + public static final DeferredHolder, EntityType> JUMPY_BUG = ENTITY_TYPES.register("jumpy_bug", + () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) + .sized(3.0F, 3.0F) + .clientTrackingRange(8) + .build("jumpy_bug")); public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) .sized(0.5F, 0.5F) @@ -1112,6 +1137,8 @@ public final class AntarchyFabricContent { () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_CAMPFIRE); + public static final DeferredItem CREEPING_HORROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(CREEPING_HORROR_EGGS); + public static final DeferredItem LURKING_TERROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(LURKING_TERROR_EGGS); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); @@ -1148,8 +1175,26 @@ public final class AntarchyFabricContent { -2.2F )); public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); + private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + net.minecraft.sounds.SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(net.minecraft.world.item.Items.NETHERITE_BOOTS), + java.util.List.of(new ArmorMaterial.Layer(net.minecraft.resources.ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new com.craisinlord.antarchy.content.item.JumpyBootsItem( + net.minecraft.core.Holder.direct(JUMPY_BOOTS_ARMOR_MATERIAL.get()), + new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)) + )); public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); @@ -1548,6 +1593,8 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(WASP, 0x111111, 0xF1D800, new Item.Properties())); public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new DeferredSpawnEggItem(BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); + public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", + () -> new DeferredSpawnEggItem(JUMPY_BUG, 0x111111, 0xFF7A00, new Item.Properties())); public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", () -> new DeferredSpawnEggItem(CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", @@ -1598,8 +1645,22 @@ public final class AntarchyFabricContent { .clientTrackingRange(8) .updateInterval(1) .build("water_bomb")); + public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", + () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) + .sized(0.7F, 0.5F) + .clientTrackingRange(10) + .build("creeping_horror")); + public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", + () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) + .sized(0.8F, 0.6F) + .clientTrackingRange(10) + .build("lurking_terror")); public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", () -> new DeferredSpawnEggItem(TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + public static final DeferredItem CREEPING_HORROR_SPAWN_EGG = ITEMS.register("creeping_horror_spawn_egg", + () -> new DeferredSpawnEggItem(CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); + public static final DeferredItem LURKING_TERROR_SPAWN_EGG = ITEMS.register("lurking_terror_spawn_egg", + () -> new DeferredSpawnEggItem(LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); public static final DeferredHolder ANTARCHY_TAB = CREATIVE_MODE_TABS.register("antarchy", () -> CreativeModeTab.builder(CreativeModeTab.Row.TOP, 0) .title(net.minecraft.network.chat.Component.translatable("itemGroup.antarchy.antarchy")) @@ -1673,6 +1734,7 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(MANTIS.get(), MantisEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(TRIFFID.get(), TriffidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(LUCID.get(), LucidEntity.createAttributes().build()); @@ -1680,6 +1742,8 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(BASILISK.get(), BasiliskEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(TORETERROR.get(), ToreterrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(CREEPING_HORROR.get(), CreepingHorrorEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(LURKING_TERROR.get(), LurkingTerrorEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(RED_ANT.get(), buildAntAttributes( AntarchySettings.redAntHealth(), @@ -1712,6 +1776,7 @@ public final class AntarchyFabricContent { 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); + SpawnPlacements.register(JUMPY_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn); SpawnPlacements.register(KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); @@ -1813,11 +1878,14 @@ public final class AntarchyFabricContent { "moleworm_spawn_egg", "mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", "honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", - "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg" -> 90; + "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", + "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; case "water_cannon" -> 52; case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots" -> 53; + case "jumpy_boots" -> 54; + case "king_scale", "queen_scale" -> 22; default -> 50; }; } @@ -1972,6 +2040,16 @@ public final class AntarchyFabricContent { return defense; } + private static java.util.EnumMap createJumpyBootsDefense() { + java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } + private static java.util.EnumMap createBloodCrystalArmorDefense() { java.util.EnumMap defense = new java.util.EnumMap<>(ArmorItem.Type.class); defense.put(ArmorItem.Type.BOOTS, 2); @@ -2062,6 +2140,7 @@ public final class AntarchyFabricContent { builder.registerPotionRecipe(potionHolder(GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(STRONG_GROWING)); builder.registerPotionRecipe(potionHolder(STRONG_GROWING), Ingredient.of(Items.GLOWSTONE_DUST), potionHolder(EXTREME_GROWING)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CLOUD_SHARK_FIN.get()), net.minecraft.world.item.alchemy.Potions.SLOW_FALLING); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(JUMPY_BUG_LEG.get()), Potions.LEAPING); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(CORNEA_EAR.get()), net.minecraft.world.item.alchemy.Potions.NIGHT_VISION); }); @@ -2218,6 +2297,8 @@ public final class AntarchyFabricContent { HUSH_PROJECTILE, TORETERROR, WATER_BOMB, + CREEPING_HORROR, + LURKING_TERROR, () -> DUPLICATOR_LOG.get(), () -> DUPLICATOR_SAPLING.get(), () -> DUCT_TAPE.get(), @@ -2268,6 +2349,8 @@ public final class AntarchyFabricContent { () -> PINK_MILKWEED.get(), () -> TORCHFLOWER_BUSH.get(), () -> BED_BUG_EGG.get(), + () -> CREEPING_HORROR_EGGS.get(), + () -> LURKING_TERROR_EGGS.get(), () -> WASP_NEST.get(), () -> HUSHWEED.get(), () -> OURANWOOD_SQUIRREL_NEST.get(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 5e8aa0f1..0dc57b6e 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -10,6 +10,9 @@ import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.gravity.AntarchyGravityDirection; import com.craisinlord.antarchy.content.gravity.AntarchyGravityTransition; +import com.craisinlord.antarchy.content.command.CaterpillarCommand; +import com.craisinlord.antarchy.content.command.GravityCommand; +import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; import net.minecraft.server.level.ServerPlayer; @@ -38,6 +41,11 @@ public final class AntarchyFabricEvents { } public static void register() { + CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { + GravityCommand.register(dispatcher); + CaterpillarCommand.register(dispatcher); + }); + DispenserBlock.registerBehavior(AntarchyFabricContent.SQUIDZOOKA.get(), new SquidzookaDispenseBehavior()); DispenserBlock.registerBehavior(AntarchyFabricContent.WATER_CANNON.get(), new WaterCannonDispenseBehavior()); 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 fbf5069d..8132da99 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 @@ -92,6 +92,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.WASP.get(), WaspRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BOMBER.get(), BomberRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.JUMPY_BUG.get(), JumpyBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BASILISK.get(), BasiliskRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); @@ -104,6 +105,8 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.EMPEROR_SCORPION.get(), EmperorScorpionRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.TORETERROR.get(), ToreterrorRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.WATER_BOMB.get(), WaterBombRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.CREEPING_HORROR.get(), CreepingHorrorRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.LURKING_TERROR.get(), LurkingTerrorRenderer::new); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.boatLayer(), BoatModel::createBodyModel); EntityModelLayerRegistry.registerModelLayer(OuranwoodBoatRenderer.chestBoatLayer(), ChestBoatModel::createBodyModel); @@ -285,6 +288,7 @@ public final class AntarchyFabricClientBootstrap { ParalyzedClientHandler.clampPlayerInput(client.player); } BrutalflyElytraClientHandler.tick(); + JumpyBootsClientHandler.tick(); DiamondMinecartClientHandler.tick(); ParalyzedClientHandler.tick(); DreadClientHandler.tick(); @@ -303,6 +307,7 @@ public final class AntarchyFabricClientBootstrap { DreadHudRenderer.render(guiGraphics); ParalyzedHudRenderer.render(guiGraphics); BrutalflyElytraHudRenderer.render(guiGraphics); + JumpyBootsHudRenderer.render(guiGraphics); BloodglassHudRenderer.render(guiGraphics); TriffidGooHudRenderer.render(guiGraphics); }); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java new file mode 100644 index 00000000..5576664e --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java @@ -0,0 +1,84 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; + +public final class JumpyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private JumpyBootsClientHandler() { + } + + public static void tick() { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java new file mode 100644 index 00000000..ad747b14 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsHudRenderer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.fabric.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class JumpyBootsHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private JumpyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + return; + } + if (!JumpyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java new file mode 100644 index 00000000..15123f40 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.fabric.mixin; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyVariable; + +@Mixin(LivingEntity.class) +public abstract class JumpyBootsFallDamageMixin { + @ModifyVariable(method = "causeFallDamage", at = @At("HEAD"), ordinal = 0, argsOnly = true) + private float antarchy$reduceJumpyBootsFallDamage(float fallDistance) { + LivingEntity self = (LivingEntity) (Object) this; + if (!JumpyBootsItem.isWearingJumpyBoots(self)) return fallDistance; + long protectionUntil = self.getPersistentData().getLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY); + if (self.level().getGameTime() < protectionUntil) { + return fallDistance * 0.25F; + } + return fallDistance; + } +} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 4a75a3d3..452e1d16 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -7,8 +7,11 @@ import com.craisinlord.antarchy.content.entity.multipart.network.MultipartIntera import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.GravityGunItem; import com.craisinlord.antarchy.content.network.*; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; import com.craisinlord.antarchy.content.weather.ThoraxisWeatherSnapshot; import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry; import net.fabricmc.fabric.api.networking.v1.PlayerLookup; @@ -46,6 +49,7 @@ public final class AntarchyFabricNetworking { PayloadTypeRegistry.playC2S().register(GravityGunScrollPayload.TYPE, GravityGunScrollPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(DiamondMinecartInputPayload.TYPE, DiamondMinecartInputPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(BrutalflyElytraFlapPayload.TYPE, BrutalflyElytraFlapPayload.STREAM_CODEC); + PayloadTypeRegistry.playC2S().register(JumpyBootsLaunchPayload.TYPE, JumpyBootsLaunchPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(MultipartAttackPayload.TYPE, MultipartAttackPayload.STREAM_CODEC); PayloadTypeRegistry.playC2S().register(MultipartInteractPayload.TYPE, MultipartInteractPayload.STREAM_CODEC); } @@ -59,6 +63,8 @@ public final class AntarchyFabricNetworking { context.server().execute(() -> handleDiamondMinecartInput(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(BrutalflyElytraFlapPayload.TYPE, (payload, context) -> context.server().execute(() -> handleBrutalflyFlap(context.player(), payload))); + ServerPlayNetworking.registerGlobalReceiver(JumpyBootsLaunchPayload.TYPE, (payload, context) -> + context.server().execute(() -> handleJumpyBootsLaunch(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(MultipartAttackPayload.TYPE, (payload, context) -> context.server().execute(() -> handleMultipartAttack(context.player(), payload))); ServerPlayNetworking.registerGlobalReceiver(MultipartInteractPayload.TYPE, (payload, context) -> @@ -262,4 +268,40 @@ public final class AntarchyFabricNetworking { InteractionHand hand = payload.handId() == 0 ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND; owner.antarchy$interactMultipartPart(part, serverPlayer, part.position(), hand); } + + private static void handleJumpyBootsLaunch(ServerPlayer player, JumpyBootsLaunchPayload payload) { + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + if (player.isSpectator() || player.isPassenger()) return; + + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (player.getCooldowns().isOnCooldown(boots.getItem())) return; + + int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); + if (clampedCharge <= 0) return; + + float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); + Vec3 current = player.getDeltaMovement(); + double newX = current.x; + double newZ = current.z; + + if (payload.sprinting()) { + Vec3 look = player.getLookAngle(); + newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + } + + player.setDeltaMovement(newX, verticalBoost, newZ); + player.hasImpulse = true; + player.hurtMarked = true; + player.resetFallDistance(); + player.connection.send(new ClientboundSetEntityMotionPacket(player)); + + player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, + 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + + player.getPersistentData().putLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY, + player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); + + player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); + } } diff --git a/fabric/src/main/resources/antarchy-fabric.mixins.json b/fabric/src/main/resources/antarchy-fabric.mixins.json index 03cd5084..ee3afe81 100644 --- a/fabric/src/main/resources/antarchy-fabric.mixins.json +++ b/fabric/src/main/resources/antarchy-fabric.mixins.json @@ -14,6 +14,7 @@ "BloodglassEffectMixin", "BloodglassRespawnMixin", "DreamCampfireBlockEntityMixin", + "JumpyBootsFallDamageMixin", "infinity.RandomSpringMixin", "infinity.PortalCreatorMixin" ], diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java index bbe92560..034fe250 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -74,6 +74,11 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setBomberExplosionDamage(AntarchyMobsConfig.bomberExplosionDamage()); AntarchySettings.setBomberExplosionRadius(AntarchyMobsConfig.bomberExplosionRadius()); + AntarchySettings.setJumpyBugHealth(AntarchyMobsConfig.jumpyBugHealth()); + AntarchySettings.setJumpyBugPounceDamage(AntarchyMobsConfig.jumpyBugPounceDamage()); + AntarchySettings.setJumpyBugLatchDamage(AntarchyMobsConfig.jumpyBugLatchDamage()); + AntarchySettings.setJumpyBugCamouflageAlpha(AntarchyMobsConfig.jumpyBugCamouflageAlpha()); + AntarchySettings.setKrakenHealth(AntarchyMobsConfig.krakenHealth()); AntarchySettings.setKrakenAttackDamage(AntarchyMobsConfig.krakenAttackDamage()); AntarchySettings.setKrakenProjectileDamageTakenMultiplier(AntarchyMobsConfig.krakenProjectileDamageTakenMultiplier()); @@ -150,11 +155,17 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setToreterrorSpinDamage(AntarchyMobsConfig.toreterrorSpinDamage()); AntarchySettings.setToreterrorSpinKnockback(AntarchyMobsConfig.toreterrorSpinKnockback()); AntarchySettings.setToreterrorRangedWaterBombChance(AntarchyMobsConfig.toreterrorRangedWaterBombChance()); + AntarchySettings.setToreterrorProjectileDamageMultiplier(AntarchyMobsConfig.toreterrorProjectileDamageMultiplier()); AntarchySettings.setWaterBombDamage(AntarchyMobsConfig.waterBombDamage()); AntarchySettings.setWaterBombLifetimeTicks(AntarchyMobsConfig.waterBombLifetimeTicks()); AntarchySettings.setWaterBombGravity(AntarchyMobsConfig.waterBombGravity()); AntarchySettings.setWaterBombKnockback(AntarchyMobsConfig.waterBombKnockback()); AntarchySettings.setWaterCannonCooldownSeconds(AntarchyMobsConfig.waterCannonCooldownSeconds()); + + AntarchySettings.setCreepingHorrorHealth(AntarchyMobsConfig.creepingHorrorHealth()); + AntarchySettings.setCreepingHorrorAttackDamage(AntarchyMobsConfig.creepingHorrorAttackDamage()); + AntarchySettings.setLurkingTerrorHealth(AntarchyMobsConfig.lurkingTerrorHealth()); + AntarchySettings.setLurkingTerrorAttackDamage(AntarchyMobsConfig.lurkingTerrorAttackDamage()); } private static void bakeToolsConfig() { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java index 5f292cf0..6857193f 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMobsConfig.java @@ -57,6 +57,14 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue BOMBER_EXPLOSION_RADIUS; + // Jumpy Bug + + private static final ModConfigSpec.DoubleValue JUMPY_BUG_HEALTH; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_POUNCE_DAMAGE; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_LATCH_DAMAGE; + private static final ModConfigSpec.DoubleValue JUMPY_BUG_CAMOUFLAGE_ALPHA; + + // Kraken private static final ModConfigSpec.DoubleValue KRAKEN_HEALTH; @@ -154,6 +162,7 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue TORETERROR_SPIN_DAMAGE; private static final ModConfigSpec.DoubleValue TORETERROR_SPIN_KNOCKBACK; private static final ModConfigSpec.DoubleValue TORETERROR_RANGED_WATER_BOMB_CHANCE; + private static final ModConfigSpec.DoubleValue TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER; private static final ModConfigSpec.DoubleValue WATER_BOMB_DAMAGE; private static final ModConfigSpec.IntValue WATER_BOMB_LIFETIME_TICKS; private static final ModConfigSpec.DoubleValue WATER_BOMB_GRAVITY; @@ -161,6 +170,18 @@ public final class AntarchyMobsConfig { private static final ModConfigSpec.DoubleValue WATER_CANNON_COOLDOWN_SECONDS; + // Creeping Horror + + private static final ModConfigSpec.DoubleValue CREEPING_HORROR_HEALTH; + private static final ModConfigSpec.DoubleValue CREEPING_HORROR_ATTACK_DAMAGE; + + + // Lurking Terror + + private static final ModConfigSpec.DoubleValue LURKING_TERROR_HEALTH; + private static final ModConfigSpec.DoubleValue LURKING_TERROR_ATTACK_DAMAGE; + + // Lucid private static final ModConfigSpec.DoubleValue LUCID_ATTACK_RANGE; @@ -288,6 +309,16 @@ public final class AntarchyMobsConfig { b.pop(); + // Jumpy Bug + + b.push("jumpyBug"); + JUMPY_BUG_HEALTH = b.comment("Base max health.").defineInRange("health", 12.0D, 1.0D, 32768.0D); + JUMPY_BUG_POUNCE_DAMAGE = b.comment("Damage dealt on a successful pounce latch.").defineInRange("pounceDamage", 2.0D, 0.0D, 1024.0D); + JUMPY_BUG_LATCH_DAMAGE = b.comment("Damage dealt per bite while latched.").defineInRange("latchDamage", 1.0D, 0.0D, 1024.0D); + JUMPY_BUG_CAMOUFLAGE_ALPHA = b.comment("Renderer alpha while camouflaged.").defineInRange("camouflageAlpha", 0.18D, 0.01D, 1.0D); + b.pop(); + + // Kraken b.push("kraken"); @@ -432,6 +463,16 @@ public final class AntarchyMobsConfig { b.pop(); // dread + b.push("creepingHorror"); + CREEPING_HORROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + CREEPING_HORROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + + b.push("lurkingTerror"); + LURKING_TERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 15.0D, 1.0D, 32768.0D); + LURKING_TERROR_ATTACK_DAMAGE = b.comment("Base attack damage.").defineInRange("attackDamage", 6.0D, 0.0D, 1024.0D); + b.pop(); + b.push("toreterror"); TORETERROR_HEALTH = b.comment("Base max health.").defineInRange("health", 300.0D, 1.0D, 32768.0D); TORETERROR_JUMP_ATTACK_DAMAGE = b.comment("Damage dealt by the jump shockwave.").defineInRange("jumpAttackDamage", 14.0D, 0.0D, 1024.0D); @@ -439,6 +480,7 @@ public final class AntarchyMobsConfig { TORETERROR_SPIN_DAMAGE = b.comment("Damage per spin-attack tick.").defineInRange("spinDamage", 8.0D, 0.0D, 1024.0D); TORETERROR_SPIN_KNOCKBACK = b.comment("Knockback strength of the spin attack.").defineInRange("spinKnockback", 1.5D, 0.0D, 10.0D); TORETERROR_RANGED_WATER_BOMB_CHANCE = b.comment("Chance (0.0-1.0) the ranged attack fires a Water Bomb instead of Bombers.").defineInRange("rangedWaterBombChance", 0.5D, 0.0D, 1.0D); + TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER = b.comment("Damage multiplier applied to projectile hits on the Toreterror (0.5 = half damage).").defineInRange("projectileDamageMultiplier", 0.5D, 0.0D, 1.0D); WATER_BOMB_DAMAGE = b.comment("Damage dealt by a Water Bomb hit.").defineInRange("waterBombDamage", 6.0D, 0.0D, 1024.0D); WATER_BOMB_LIFETIME_TICKS = b.comment("Ticks before a Water Bomb despawns.").defineInRange("waterBombLifetimeTicks", 120, 1, 6000); WATER_BOMB_GRAVITY = b.comment("Gravity applied to Water Bombs (higher = steeper arc).").defineInRange("waterBombGravity", 0.12D, 0.0D, 2.0D); @@ -494,6 +536,11 @@ public final class AntarchyMobsConfig { static double bomberExplosionDamage() { return BOMBER_EXPLOSION_DAMAGE.get(); } static double bomberExplosionRadius() { return BOMBER_EXPLOSION_RADIUS.get(); } + static double jumpyBugHealth() { return JUMPY_BUG_HEALTH.get(); } + static double jumpyBugPounceDamage() { return JUMPY_BUG_POUNCE_DAMAGE.get(); } + static double jumpyBugLatchDamage() { return JUMPY_BUG_LATCH_DAMAGE.get(); } + static double jumpyBugCamouflageAlpha() { return JUMPY_BUG_CAMOUFLAGE_ALPHA.get(); } + static double krakenHealth() { return KRAKEN_HEALTH.get(); } static double krakenAttackDamage() { return KRAKEN_ATTACK_DAMAGE.get(); } static double krakenProjectileDamageTakenMultiplier() { return KRAKEN_PROJECTILE_DAMAGE_TAKEN_MULTIPLIER.get(); } @@ -564,6 +611,7 @@ public final class AntarchyMobsConfig { static double toreterrorSpinDamage() { return TORETERROR_SPIN_DAMAGE.get(); } static double toreterrorSpinKnockback() { return TORETERROR_SPIN_KNOCKBACK.get(); } static double toreterrorRangedWaterBombChance() { return TORETERROR_RANGED_WATER_BOMB_CHANCE.get(); } + static double toreterrorProjectileDamageMultiplier() { return TORETERROR_PROJECTILE_DAMAGE_MULTIPLIER.get(); } static double waterBombDamage() { return WATER_BOMB_DAMAGE.get(); } static int waterBombLifetimeTicks() { return WATER_BOMB_LIFETIME_TICKS.get(); } static double waterBombGravity() { return WATER_BOMB_GRAVITY.get(); } @@ -576,4 +624,9 @@ public final class AntarchyMobsConfig { static boolean dreadHallucinationMobsEnabled() { return DREAD_HALLUCINATION_MOBS_ENABLED.get(); } static double dreadHallucinationMobMinInterval() { return DREAD_HALLUCINATION_MOB_MIN_INTERVAL.get(); } static double dreadHallucinationMobMaxInterval() { return DREAD_HALLUCINATION_MOB_MAX_INTERVAL.get(); } + + static double creepingHorrorHealth() { return CREEPING_HORROR_HEALTH.get(); } + static double creepingHorrorAttackDamage() { return CREEPING_HORROR_ATTACK_DAMAGE.get(); } + static double lurkingTerrorHealth() { return LURKING_TERROR_HEALTH.get(); } + static double lurkingTerrorAttackDamage() { return LURKING_TERROR_ATTACK_DAMAGE.get(); } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index fb1f78bb..6a1b7047 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -183,6 +183,8 @@ public class AntarchyNeoforge { AntarchyNeoforgeEntites.HUSH_PROJECTILE, AntarchyNeoforgeEntites.TORETERROR, AntarchyNeoforgeEntites.WATER_BOMB, + AntarchyNeoforgeEntites.CREEPING_HORROR, + AntarchyNeoforgeEntites.LURKING_TERROR, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -233,6 +235,8 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.TORCHFLOWER_BUSH.get(), () -> AntarchyNeoforgeBlocks.BED_BUG_EGG.get(), + () -> AntarchyNeoforgeBlocks.CREEPING_HORROR_EGGS.get(), + () -> AntarchyNeoforgeBlocks.LURKING_TERROR_EGGS.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED.get(), () -> AntarchyNeoforgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java new file mode 100644 index 00000000..bda2c95a --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforgeEvents.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.neoforge; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.command.CaterpillarCommand; +import com.craisinlord.antarchy.content.command.GravityCommand; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.RegisterCommandsEvent; + +@EventBusSubscriber(modid = Antarchy.MODID) +public final class AntarchyNeoforgeEvents { + private AntarchyNeoforgeEvents() { + } + + @SubscribeEvent + public static void onRegisterCommands(RegisterCommandsEvent event) { + GravityCommand.register(event.getDispatcher()); + CaterpillarCommand.register(event.getDispatcher()); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index d17e35eb..9c98ffbe 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -4,6 +4,8 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.client.hud.BloodglassHudRenderer; import com.craisinlord.antarchy.content.client.particle.*; import com.craisinlord.antarchy.content.client.renderer.*; +import com.craisinlord.antarchy.content.client.renderer.CreepingHorrorRenderer; +import com.craisinlord.antarchy.content.client.renderer.LurkingTerrorRenderer; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeBlocks; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeEntites; @@ -104,6 +106,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BOMBER.get(), context -> withParalyzedGeoLayer(new BomberRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.JUMPY_BUG.get(), context -> withParalyzedGeoLayer(new JumpyBugRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BASILISK.get(), context -> withParalyzedGeoLayer(new BasiliskRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.SHRINK_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.GROWTH_RAY_PROJECTILE.get(), SizeRayProjectileRenderer::new); @@ -116,6 +119,8 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), context -> withParalyzedGeoLayer(new EmperorScorpionRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorRenderer::new); event.registerEntityRenderer(AntarchyNeoforgeEntites.WATER_BOMB.get(), WaterBombRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.CREEPING_HORROR.get(), CreepingHorrorRenderer::new); + event.registerEntityRenderer(AntarchyNeoforgeEntites.LURKING_TERROR.get(), LurkingTerrorRenderer::new); } @SubscribeEvent @@ -222,6 +227,10 @@ public final class AntarchyNeoForgeClient { ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "triffid_goo"), (guiGraphics, partialTick) -> TriffidGooHudRenderer.render(guiGraphics) ); + event.registerAboveAll( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"), + (guiGraphics, partialTick) -> JumpyBootsHudRenderer.render(guiGraphics) + ); } @SubscribeEvent diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java new file mode 100644 index 00000000..f2e9cf60 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java @@ -0,0 +1,91 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.minecraft.client.Minecraft; +import net.minecraft.client.player.LocalPlayer; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.network.PacketDistributor; + +@EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) +public final class JumpyBootsClientHandler { + private static int chargeTicks = 0; + private static boolean wasCharging = false; + private static int primeWindowTicks = 0; + private static int storedChargeTicks = 0; + + private JumpyBootsClientHandler() { + } + + @SubscribeEvent + public static void onClientTick(ClientTickEvent.Post event) { + Minecraft mc = Minecraft.getInstance(); + LocalPlayer player = mc.player; + + if (player == null || mc.level == null || mc.screen != null) { + reset(); + return; + } + + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + reset(); + return; + } + + boolean onGround = player.onGround(); + boolean sneaking = player.input.shiftKeyDown; + boolean jumpPressed = mc.options.keyJump.consumeClick(); + + if (primeWindowTicks > 0) { + primeWindowTicks--; + if (jumpPressed) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } + if (primeWindowTicks <= 0) { + reset(); + } + return; + } + + if (!onGround) { + chargeTicks = 0; + wasCharging = false; + return; + } + + if (sneaking) { + chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); + wasCharging = true; + } else if (wasCharging && chargeTicks > 0) { + storedChargeTicks = chargeTicks; + primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; + chargeTicks = 0; + wasCharging = false; + } else { + chargeTicks = 0; + wasCharging = false; + } + } + + private static void reset() { + chargeTicks = 0; + wasCharging = false; + primeWindowTicks = 0; + storedChargeTicks = 0; + } + + public static boolean isCharging() { + return chargeTicks > 0; + } + + public static int getChargeTicks() { + return chargeTicks; + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java new file mode 100644 index 00000000..6dd6a0b5 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsHudRenderer.java @@ -0,0 +1,49 @@ +package com.craisinlord.antarchy.neoforge.client; + +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; + +public final class JumpyBootsHudRenderer { + private static final ResourceLocation JUMP_BAR_BACKGROUND = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_background.png"); + private static final ResourceLocation JUMP_BAR_PROGRESS = ResourceLocation.withDefaultNamespace("textures/gui/sprites/hud/jump_bar_progress.png"); + private static final int BAR_WIDTH = 182; + private static final int BAR_HEIGHT = 5; + + private JumpyBootsHudRenderer() { + } + + public static void render(GuiGraphics guiGraphics) { + Minecraft mc = Minecraft.getInstance(); + Player player = mc.player; + if (player == null || mc.screen != null || player.isDeadOrDying()) { + return; + } + if (!JumpyBootsItem.isWearingJumpyBoots(player)) { + return; + } + if (!JumpyBootsClientHandler.isCharging()) { + return; + } + + int width = mc.getWindow().getGuiScaledWidth(); + int height = mc.getWindow().getGuiScaledHeight(); + int x0 = width / 2 - BAR_WIDTH / 2; + int y0 = height - 29; + + guiGraphics.blit(JUMP_BAR_BACKGROUND, x0, y0, 0, 0, BAR_WIDTH, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + + int chargeTicks = JumpyBootsClientHandler.getChargeTicks(); + float chargeRatio = Mth.clamp(chargeTicks / (float) JumpyBootsHelper.CHARGE_TICKS_MAX, 0.0F, 1.0F); + int filledWidth = Mth.clamp((int) (chargeRatio * BAR_WIDTH), 0, BAR_WIDTH); + if (filledWidth > 0) { + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 0.35F + chargeRatio * 0.65F); + guiGraphics.blit(JUMP_BAR_PROGRESS, x0, y0, 0, 0, filledWidth, BAR_HEIGHT, BAR_WIDTH, BAR_HEIGHT); + guiGraphics.setColor(1.0F, 1.0F, 1.0F, 1.0F); + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java new file mode 100644 index 00000000..a684b108 --- /dev/null +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java @@ -0,0 +1,81 @@ +package com.craisinlord.antarchy.neoforge.network; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.content.network.JumpyBootsLaunchPayload; +import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.phys.Vec3; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.entity.living.LivingFallEvent; +import net.neoforged.neoforge.network.handling.IPayloadContext; +import net.neoforged.neoforge.network.registration.PayloadRegistrar; + +@EventBusSubscriber(modid = Antarchy.MODID) +public final class JumpyBootsNetworking { + private JumpyBootsNetworking() { + } + + public static void register(PayloadRegistrar registrar) { + registrar.playToServer( + JumpyBootsLaunchPayload.TYPE, + JumpyBootsLaunchPayload.STREAM_CODEC, + JumpyBootsNetworking::handleLaunch + ); + } + + private static void handleLaunch(JumpyBootsLaunchPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + if (!(context.player() instanceof ServerPlayer player)) return; + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + if (player.isSpectator() || player.isPassenger()) return; + + ItemStack boots = player.getItemBySlot(EquipmentSlot.FEET); + if (player.getCooldowns().isOnCooldown(boots.getItem())) return; + + int clampedCharge = Math.min(payload.chargeTicks(), JumpyBootsHelper.CHARGE_TICKS_MAX); + if (clampedCharge <= 0) return; + + float verticalBoost = JumpyBootsHelper.verticalBoostFor(clampedCharge); + Vec3 current = player.getDeltaMovement(); + + double newY = verticalBoost; + double newX = current.x; + double newZ = current.z; + + if (payload.sprinting()) { + Vec3 look = player.getLookAngle(); + newX += look.x * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + newZ += look.z * JumpyBootsHelper.SPRINT_FORWARD_BOOST; + } + + player.setDeltaMovement(newX, newY, newZ); + player.hasImpulse = true; + player.hurtMarked = true; + player.resetFallDistance(); + player.connection.send(new ClientboundSetEntityMotionPacket(player)); + + player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); + + player.getPersistentData().putLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY, player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); + + player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); + }); + } + + @SubscribeEvent + public static void onLivingFall(LivingFallEvent event) { + if (!(event.getEntity() instanceof ServerPlayer player)) return; + if (!JumpyBootsItem.isWearingJumpyBoots(player)) return; + long protectionUntil = player.getPersistentData().getLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY); + if (player.level().getGameTime() < protectionUntil) { + event.setDamageMultiplier(event.getDamageMultiplier() * 0.25F); + } + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index 3df66a73..daeff25d 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -982,6 +982,7 @@ public final class AntarchyNeoForgeEvents { event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.MOLEWORM_ITEM.get(), AntarchyNeoforgeMisc.HASTE); event.getBuilder().addMix(AntarchyNeoforgeMisc.HASTE, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.STRONG_HASTE); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.CLOUD_SHARK_FIN.get(), Potions.SLOW_FALLING); + event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.JUMPY_BUG_LEG.get(), Potions.LEAPING); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.CORNEA_EAR.get(), Potions.NIGHT_VISION); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.URANIUM_NUGGET.get(), AntarchyNeoforgeMisc.SHRINKING); event.getBuilder().addMix(AntarchyNeoforgeMisc.SHRINKING, Items.GLOWSTONE_DUST, AntarchyNeoforgeMisc.STRONG_SHRINKING); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index fafbe95f..80d2c74a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -4,6 +4,8 @@ import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.*; +import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; import com.craisinlord.antarchy.content.block.entity.AntNestBlockEntity; import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; @@ -200,6 +202,10 @@ public final class AntarchyNeoforgeBlocks { .noOcclusion() .noCollission() .replaceable())); + public static final DeferredBlock CREEPING_HORROR_EGGS = BLOCKS.register("creeping_horror_eggs", + () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG))); + public static final DeferredBlock LURKING_TERROR_EGGS = BLOCKS.register("lurking_terror_eggs", + () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG))); public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", () -> new WaspNestBlock(AntarchyNeoforgeItems::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); public static final DeferredBlock OURANWOOD_SQUIRREL_NEST = BLOCKS.register("ouranwood_squirrel_nest", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 5295d416..9d512de4 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -67,6 +67,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.DR_TRAYAURUS_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.WASP_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.BOMBER_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.JUMPY_BUG_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MISSILE_SQUID_SPAWN_EGG.get()); @@ -77,6 +78,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BASILISK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.EMPEROR_SCORPION_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.TORETERROR_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.CREEPING_HORROR_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.LURKING_TERROR_SPAWN_EGG.get()); } if (event.getTabKey() == CreativeModeTabs.NATURAL_BLOCKS) { @@ -92,6 +95,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.BED_BUG_EGG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CREEPING_HORROR_EGGS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LURKING_TERROR_EGGS_ITEM.get()); event.accept(AntarchyNeoforgeItems.WASP_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.RED_ANT_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROWN_ANT_NEST_ITEM.get()); @@ -135,6 +140,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_SHARD.get()); event.accept(AntarchyNeoforgeItems.BLOOD_CRYSTAL_APPLE.get()); event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get()); + event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); + event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_WING.get()); event.accept(AntarchyNeoforgeItems.PRIMORDIAL_SCUTE.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO.get()); @@ -285,6 +292,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.SCORPION_WHIP.get()); event.accept(AntarchyNeoforgeItems.FALLEN_KING_CROWN.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_ELYTRA.get()); + event.accept(AntarchyNeoforgeItems.JUMPY_BOOTS.get()); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.EXTREME_SHRINKING)); @@ -384,7 +392,7 @@ public class AntarchyNeoforgeCreativeModeTabs { case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; // 17 - Misc wearables / gadgets - case "moggles", "brutalfly_elytra", "fallen_king_crown" -> 17; + case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; // 18 - Weapons case "battle_axe", "basilisk_dagger", "squidzooka", "shrink_ray", "growth_ray", @@ -415,7 +423,8 @@ public class AntarchyNeoforgeCreativeModeTabs { "moleworm", "uranium_nugget", "titanium_nugget", "uranium_ingot", "titanium_ingot", "lucid_eye", "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", - "primordial_scute", "triffid_goo", "vortex_eye" -> 22; + "primordial_scute", "triffid_goo", "vortex_eye", + "king_scale", "queen_scale" -> 22; // 23 - Arrows (reserved for future arrow types) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 03d1016a..5fdc95c4 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -15,6 +15,7 @@ import com.craisinlord.antarchy.content.entity.DrTrayaurusEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.EmperorScorpionEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.JumpyBugEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; @@ -40,6 +41,8 @@ import com.craisinlord.antarchy.content.entity.lucid.LucidBoltEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEntity; import com.craisinlord.antarchy.content.entity.lucid.LucidEyeProjectileEntity; import com.craisinlord.antarchy.content.entity.nightmare.NightmareEntity; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import net.minecraft.core.registries.Registries; @@ -117,6 +120,11 @@ public final class AntarchyNeoforgeEntites { .sized(0.55F, 0.75F) .clientTrackingRange(8) .build("bomber")); + public static final DeferredHolder, EntityType> JUMPY_BUG = ENTITY_TYPES.register("jumpy_bug", + () -> EntityType.Builder.of(JumpyBugEntity::new, MobCategory.MONSTER) + .sized(3.0F, 3.0F) + .clientTrackingRange(8) + .build("jumpy_bug")); public static final DeferredHolder, EntityType> SHRINK_RAY_PROJECTILE = ENTITY_TYPES.register("shrink_ray_projectile", () -> EntityType.Builder.of(SizeRayProjectileEntity::createShrink, MobCategory.MISC) .sized(0.5F, 0.5F) @@ -253,6 +261,16 @@ public final class AntarchyNeoforgeEntites { .clientTrackingRange(8) .updateInterval(1) .build("water_bomb")); + public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", + () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) + .sized(0.7F, 0.5F) + .clientTrackingRange(10) + .build("creeping_horror")); + public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", + () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) + .sized(0.8F, 0.6F) + .clientTrackingRange(10) + .build("lurking_terror")); public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", () -> EntityType.Builder.of( UpwardFallingBlockEntity::new, MobCategory.MISC) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 2bb79a56..e46ae002 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -2,6 +2,8 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.config.AntarchySettings; import com.craisinlord.antarchy.content.entity.*; +import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.cloud_shark.CloudSharkEntity; @@ -46,6 +48,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BOMBER.get(), BomberEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MANTIS.get(), MantisEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.TRIFFID.get(), TriffidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.LUCID.get(), LucidEntity.createAttributes().build()); @@ -53,6 +56,8 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.BASILISK.get(), BasiliskEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), EmperorScorpionEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.TORETERROR.get(), ToreterrorEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.CREEPING_HORROR.get(), CreepingHorrorEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.LURKING_TERROR.get(), LurkingTerrorEntity.createAttributes().build()); AttributeSupplier redAntAttributes = buildAntAttributes(AntarchySettings.redAntHealth(), AntarchySettings.redAntMovementSpeed(), AntarchySettings.redAntAttackDamage()).build(); AttributeSupplier brownAntAttributes = buildAntAttributes(AntarchySettings.brownAntHealth(), AntarchySettings.brownAntMovementSpeed(), AntarchySettings.brownAntAttackDamage()).build(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 78d3e873..4de147eb 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -14,6 +14,7 @@ import com.craisinlord.antarchy.content.item.BloodCrystalShardItem; import com.craisinlord.antarchy.content.item.ultimate.*; import com.craisinlord.antarchy.content.item.NightmareArmorItem; import com.craisinlord.antarchy.content.item.PrimordialArmorItem; +import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.WaterCannonItem; import com.craisinlord.antarchy.content.item.NightmareSwordItem; import com.craisinlord.antarchy.content.item.LucidEyeItem; @@ -117,6 +118,16 @@ public final class AntarchyNeoforgeItems { 3.0F, 0.1F )); + private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", + () -> new ArmorMaterial( + createJumpyBootsDefense(), + 15, + SoundEvents.ARMOR_EQUIP_NETHERITE, + () -> Ingredient.of(Items.NETHERITE_BOOTS), + List.of(new ArmorMaterial.Layer(ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "jumpy_boots"))), + 3.0F, + 0.1F + )); private static final DeferredHolder FALLEN_KING_CROWN_ARMOR_MATERIAL = ARMOR_MATERIALS.register("fallen_king_crown", () -> new ArmorMaterial( createFallenKingCrownDefense(), @@ -259,6 +270,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG); + public static final DeferredItem CREEPING_HORROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CREEPING_HORROR_EGGS); + public static final DeferredItem LURKING_TERROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LURKING_TERROR_EGGS); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", @@ -294,8 +307,13 @@ public final class AntarchyNeoforgeItems { -2.2F )); public static final DeferredItem MANTIS_CLAW = ITEMS.registerSimpleItem("mantis_claw", new Item.Properties().rarity(Rarity.UNCOMMON)); - public static final DeferredItem JUMPY_BUG_LEG = ITEMS.register("jumpy_bug_leg", - () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem KING_SCALE = ITEMS.register("king_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", + () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", + () -> new JumpyBootsItem(JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); public static final DeferredItem BRUTALFLY_WING = ITEMS.registerSimpleItem("brutalfly_wing", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem BRUTALFLY_ELYTRA = ITEMS.register("brutalfly_elytra", () -> new BrutalflyElytraItem(new Item.Properties().rarity(Rarity.UNCOMMON).durability(480))); @@ -495,6 +513,8 @@ public final class AntarchyNeoforgeItems { () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.WASP, 0x111111, 0xF1D800, new Item.Properties())); public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); + public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.JUMPY_BUG, 0x111111, 0xFF7A00, new Item.Properties())); public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", @@ -532,6 +552,10 @@ public final class AntarchyNeoforgeItems { () -> new PrimordialArmorItem(PRIMORDIAL_ARMOR_MATERIAL, ArmorItem.Type.BOOTS, new Item.Properties().stacksTo(1).rarity(Rarity.RARE).fireResistant())); public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TORETERROR, 0x90EE90, 0x5C4033, new Item.Properties().rarity(Rarity.EPIC))); + public static final DeferredItem CREEPING_HORROR_SPAWN_EGG = ITEMS.register("creeping_horror_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CREEPING_HORROR, 0x6B3A1F, 0x6B0000, new Item.Properties())); + public static final DeferredItem LURKING_TERROR_SPAWN_EGG = ITEMS.register("lurking_terror_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.LURKING_TERROR, 0x2D5A1B, 0x8B0000, new Item.Properties())); private AntarchyNeoforgeItems() {} @@ -632,4 +656,14 @@ public final class AntarchyNeoforgeItems { defense.put(ArmorItem.Type.BODY, 2); return defense; } + + private static EnumMap createJumpyBootsDefense() { + EnumMap defense = new EnumMap<>(ArmorItem.Type.class); + defense.put(ArmorItem.Type.BOOTS, 3); + defense.put(ArmorItem.Type.LEGGINGS, 0); + defense.put(ArmorItem.Type.CHESTPLATE, 0); + defense.put(ArmorItem.Type.HELMET, 0); + defense.put(ArmorItem.Type.BODY, 0); + return defense; + } } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java index 84da8558..2a7e9028 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgePayloadHandlers.java @@ -3,6 +3,7 @@ package com.craisinlord.antarchy.neoforge.registry; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import com.craisinlord.antarchy.neoforge.network.BrutalflyElytraNetworking; +import com.craisinlord.antarchy.neoforge.network.JumpyBootsNetworking; import com.craisinlord.antarchy.neoforge.network.MultipartNetworking; import net.neoforged.bus.api.IEventBus; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; @@ -18,6 +19,7 @@ public class AntarchyNeoforgePayloadHandlers { var registrar = event.registrar("1"); AntarchyGravityNetworking.register(registrar); BrutalflyElytraNetworking.register(registrar); + JumpyBootsNetworking.register(registrar); registrar.playToClient( com.craisinlord.antarchy.content.network.BloodglassStatePayload.TYPE, com.craisinlord.antarchy.content.network.BloodglassStatePayload.STREAM_CODEC, diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 7711e1e1..66c56cca 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -33,6 +33,7 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CloudSharkEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.WASP.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, WaspEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BOMBER.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BomberEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.JUMPY_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); From cd2972a208d1cc92069638eb135b0439350c0ba5 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Thu, 25 Jun 2026 00:31:49 -0500 Subject: [PATCH 03/25] fixed various errors with rough draft of new stuff --- .../neoforged/neoforge/entity/PartEntity.java | 29 --- .../software/bernie/geckolib/util/Color.java | 230 ------------------ .../renderer/CreepingHorrorRenderer.java | 2 +- .../content/entity/CreepingHorrorEntity.java | 16 +- .../content/entity/LurkingTerrorEntity.java | 6 +- ...ror_eggs.json => creeping_horror_egg.json} | 98 ++++---- ...rror_eggs.json => lurking_terror_egg.json} | 98 ++++---- .../resources/assets/antarchy/lang/en_us.json | 4 +- ...eggs_1.json => creeping_horror_egg_1.json} | 0 ...eggs_2.json => creeping_horror_egg_2.json} | 0 ...eggs_3.json => creeping_horror_egg_3.json} | 0 ...eggs_4.json => creeping_horror_egg_4.json} | 0 ..._eggs_1.json => lurking_terror_egg_1.json} | 0 ..._eggs_2.json => lurking_terror_egg_2.json} | 0 ..._eggs_3.json => lurking_terror_egg_3.json} | 0 ..._eggs_4.json => lurking_terror_egg_4.json} | 0 ...ightly_cracked_creeping_horror_egg_1.json} | 0 ...ightly_cracked_creeping_horror_egg_2.json} | 0 ...ightly_cracked_creeping_horror_egg_3.json} | 0 ...ightly_cracked_creeping_horror_egg_4.json} | 0 ...lightly_cracked_lurking_terror_egg_1.json} | 0 ...lightly_cracked_lurking_terror_egg_2.json} | 0 ...lightly_cracked_lurking_terror_egg_3.json} | 0 ...lightly_cracked_lurking_terror_egg_4.json} | 0 ...> very_cracked_creeping_horror_egg_1.json} | 0 ...> very_cracked_creeping_horror_egg_2.json} | 0 ...> very_cracked_creeping_horror_egg_3.json} | 0 ...> very_cracked_creeping_horror_egg_4.json} | 0 ...=> very_cracked_lurking_terror_egg_1.json} | 0 ...=> very_cracked_lurking_terror_egg_2.json} | 0 ...=> very_cracked_lurking_terror_egg_3.json} | 0 ...=> very_cracked_lurking_terror_egg_4.json} | 0 .../models/item/creeping_horror_egg.json | 6 + .../models/item/creeping_horror_eggs.json | 3 - .../models/item/lurking_terror_egg.json | 6 + .../models/item/lurking_terror_eggs.json | 3 - .../fabric/AntarchyFabricContent.java | 12 +- .../mixin/JumpyBootsFallDamageMixin.java | 4 +- .../network/AntarchyFabricNetworking.java | 3 +- .../fabric/util/JumpyBootsFabricHelper.java | 19 ++ .../antarchy/neoforge/AntarchyNeoforge.java | 4 +- .../registry/AntarchyNeoforgeBlocks.java | 4 +- .../AntarchyNeoforgeCreativeModeTabs.java | 4 +- .../registry/AntarchyNeoforgeItems.java | 4 +- 44 files changed, 162 insertions(+), 393 deletions(-) delete mode 100644 .tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java delete mode 100644 .tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java rename common/src/main/resources/assets/antarchy/blockstates/{creeping_horror_eggs.json => creeping_horror_egg.json} (60%) rename common/src/main/resources/assets/antarchy/blockstates/{lurking_terror_eggs.json => lurking_terror_egg.json} (61%) rename common/src/main/resources/assets/antarchy/models/block/{creeping_horror_eggs_1.json => creeping_horror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{creeping_horror_eggs_2.json => creeping_horror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{creeping_horror_eggs_3.json => creeping_horror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{creeping_horror_eggs_4.json => creeping_horror_egg_4.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{lurking_terror_eggs_1.json => lurking_terror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{lurking_terror_eggs_2.json => lurking_terror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{lurking_terror_eggs_3.json => lurking_terror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{lurking_terror_eggs_4.json => lurking_terror_egg_4.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_creeping_horror_eggs_1.json => slightly_cracked_creeping_horror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_creeping_horror_eggs_2.json => slightly_cracked_creeping_horror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_creeping_horror_eggs_3.json => slightly_cracked_creeping_horror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_creeping_horror_eggs_4.json => slightly_cracked_creeping_horror_egg_4.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_lurking_terror_eggs_1.json => slightly_cracked_lurking_terror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_lurking_terror_eggs_2.json => slightly_cracked_lurking_terror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_lurking_terror_eggs_3.json => slightly_cracked_lurking_terror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{slightly_cracked_lurking_terror_eggs_4.json => slightly_cracked_lurking_terror_egg_4.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_creeping_horror_eggs_1.json => very_cracked_creeping_horror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_creeping_horror_eggs_2.json => very_cracked_creeping_horror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_creeping_horror_eggs_3.json => very_cracked_creeping_horror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_creeping_horror_eggs_4.json => very_cracked_creeping_horror_egg_4.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_lurking_terror_eggs_1.json => very_cracked_lurking_terror_egg_1.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_lurking_terror_eggs_2.json => very_cracked_lurking_terror_egg_2.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_lurking_terror_eggs_3.json => very_cracked_lurking_terror_egg_3.json} (100%) rename common/src/main/resources/assets/antarchy/models/block/{very_cracked_lurking_terror_eggs_4.json => very_cracked_lurking_terror_egg_4.json} (100%) create mode 100644 common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json delete mode 100644 common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json delete mode 100644 common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json create mode 100644 fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java diff --git a/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java b/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java deleted file mode 100644 index 8ae33e19..00000000 --- a/.tmp_neoforge_src_lookup/net/neoforged/neoforge/entity/PartEntity.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) Forge Development LLC and contributors - * SPDX-License-Identifier: LGPL-2.1-only - */ - -package net.neoforged.neoforge.entity; - -import net.minecraft.network.protocol.Packet; -import net.minecraft.network.protocol.game.ClientGamePacketListener; -import net.minecraft.server.level.ServerEntity; -import net.minecraft.world.entity.Entity; - -public abstract class PartEntity extends Entity { - private final T parent; - - public PartEntity(T parent) { - super(parent.getType(), parent.level()); - this.parent = parent; - } - - public T getParent() { - return parent; - } - - @Override - public Packet getAddEntityPacket(ServerEntity entity) { - throw new UnsupportedOperationException(); - } -} diff --git a/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java b/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java deleted file mode 100644 index 81f6171f..00000000 --- a/.tmp_neoforge_src_lookup/software/bernie/geckolib/util/Color.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - Direct copy of https://github.com/shedaniel/cloth-basic-math/blob/master/src/main/java/me/shedaniel/math/Color.java under the unlicense. - */ -package software.bernie.geckolib.util; - -/** - * Color holder object for storing a packed int argb value. - */ -public record Color(int argbInt) { - public static final Color WHITE = new Color(0xFFFFFFFF); - public static final Color LIGHT_GRAY = new Color(0xFFC0C0C0); - public static final Color GRAY = new Color(0xFF808080); - public static final Color DARK_GRAY = new Color(0xFF404040); - public static final Color BLACK = new Color(0xFF000000); - public static final Color RED = new Color(0xFFFF0000); - public static final Color PINK = new Color(0xFFFFAFAF); - public static final Color ORANGE = new Color(0xFFFFC800); - public static final Color YELLOW = new Color(0xFFFFFF00); - public static final Color GREEN = new Color(0xFF00FF00); - public static final Color MAGENTA = new Color(0xFFFF00FF); - public static final Color CYAN = new Color(0xFF00FFFF); - public static final Color BLUE = new Color(0xFF0000FF); - - /** - * Creates a new {@code Color} instance from RGB values, ensuring 100% opacity - */ - public static Color ofOpaque(int color) { - return new Color(0xFF000000 | color); - } - - /** - * Creates a new {@code Color} instance from RGB values with 100% opacity - */ - public static Color ofRGB(float red, float green, float blue) { - return ofRGBA(red, green, blue, 1f); - } - - /** - * Creates a new {@code Color} instance from RGB values with 100% opacity - */ - public static Color ofRGB(int r, int g, int b) { - return ofRGBA(r, g, b, 255); - } - - /** - * Creates a new {@code Color} instance from RGBA values - */ - public static Color ofRGBA(float r, float g, float b, float a) { - return ofRGBA((int)(r * 255f + 0.5), (int)(g * 255f + 0.5f), (int)(b * 255f + 0.5f), (int)(a * 255f + 0.5f)); - } - - /** - * Creates a new {@code Color} instance from RGBA values - */ - public static Color ofRGBA(int r, int g, int b, int a) { - return new Color(((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF)); - } - - /** - * Creates a new {@code Color} instance from ARGB values - */ - public static Color ofARGB(float a, float r, float g, float b) { - return ofARGB((int)(a * 255f + 0.5f), (int)(r * 255f + 0.5), (int)(g * 255f + 0.5f), (int)(b * 255f + 0.5f)); - } - - /** - * Creates a new {@code Color} instance from ARGB values - */ - public static Color ofARGB(int a, int r, int g, int b) { - return new Color(((a & 0xFF) << 24) | ((r & 0xFF) << 16) | ((g & 0xFF) << 8) | (b & 0xFF)); - } - - /** - * Creates a new {@code Color} instance from HSB values with 100% opacity - */ - public static Color ofHSB(float hue, float saturation, float brightness) { - return ofOpaque(HSBtoARGB(hue, saturation, brightness)); - } - - /** - * Converts a HSB value triplet to a packed ARGB int - */ - public static int HSBtoARGB(float hue, float saturation, float brightness) { - int r = 0; - int g = 0; - int b = 0; - - if (saturation == 0) { - r = g = b = (int) (brightness * 255f + 0.5f); - } - else { - float h = (hue - (float)Math.floor(hue)) * 6f; - float f = h - (float)Math.floor(h); - float p = brightness * (1 - saturation); - float q = brightness * (1 - saturation * f); - float t = brightness * (1 - (saturation * (1 - f))); - - switch ((int)h) { - case 0 -> { - r = (int) (brightness * 255f + 0.5f); - g = (int) (t * 255f + 0.5f); - b = (int) (p * 255f + 0.5f); - } - case 1 -> { - r = (int) (q * 255f + 0.5f); - g = (int) (brightness * 255f + 0.5f); - b = (int) (p * 255f + 0.5f); - } - case 2 -> { - r = (int) (p * 255f + 0.5f); - g = (int) (brightness * 255f + 0.5f); - b = (int) (t * 255f + 0.5f); - } - case 3 -> { - r = (int) (p * 255f + 0.5f); - g = (int) (q * 255f + 0.5f); - b = (int) (brightness * 255f + 0.5f); - } - case 4 -> { - r = (int) (t * 255f + 0.5f); - g = (int) (p * 255f + 0.5f); - b = (int) (brightness * 255f + 0.5f); - } - case 5 -> { - r = (int) (brightness * 255f + 0.5f); - g = (int) (p * 255f + 0.5f); - b = (int) (q * 255f + 0.5f); - } - } - } - - return 0xFF000000 | (r << 16) | (g << 8) | b; - } - - public int getColor() { - return this.argbInt; - } - - public int getAlpha() { - return this.argbInt >> 24 & 0xFF; - } - - public float getAlphaFloat() { - return getAlpha() / 255f; - } - - public int getRed() { - return this.argbInt >> 16 & 0xFF; - } - - public float getRedFloat() { - return getRed() / 255f; - } - - public int getGreen() { - return this.argbInt >> 8 & 0xFF; - } - - public float getGreenFloat() { - return getGreen() / 255f; - } - - public int getBlue() { - return this.argbInt & 0xFF; - } - - public float getBlueFloat() { - return getBlue() / 255f; - } - - /** - * Returns a brighter variant of the same color - * - * @param factor The factor for shading - */ - public Color brighter(double factor) { - int r = getRed(); - int g = getGreen(); - int b = getBlue(); - int i = (int)(1 / (1 - (1 / factor))); - - if (r == 0 && g == 0 && b == 0) - return ofRGBA(i, i, i, getAlpha()); - - if (r > 0 && r < i) - r = i; - - if (g > 0 && g < i) - g = i; - - if (b > 0 && b < i) - b = i; - - return ofRGBA(Math.min((int) (r / (1 / factor)), 255), Math.min((int) (g / (1 / factor)), 255), - Math.min((int) (b / (1 / factor)), 255), getAlpha()); - } - - /** - * Returns a darker variant of the same color - * - * @param factor The factor for shading. The value provided is an inversely relative multiplier.
- * E.G. input=2 -> 2x as dark.
- * E.G. input=0.5 -> 0.5x as dark (brighter) - */ - public Color darker(float factor) { - return ofRGBA(Math.max((int)(getRed() * (1 / factor)), 0), Math.max((int)(getGreen() * (1 / factor)), 0), - Math.max((int)(getBlue() * (1 / factor)), 0), getAlpha()); - } - - @Override - public boolean equals(Object other) { - if (this == other) - return true; - - if (getClass() != other.getClass()) - return false; - - return hashCode() == other.hashCode(); - } - - @Override - public int hashCode() { - return this.argbInt; - } - - @Override - public String toString() { - return String.valueOf(this.argbInt); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java index 5155f3ad..6a34b3c4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java @@ -20,7 +20,7 @@ public class CreepingHorrorRenderer extends GeoEntityRenderer CLIMBING = - SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); + SynchedEntityData.defineId(CreepingHorrorEntity.class, EntityDataSerializers.BOOLEAN); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -75,7 +75,11 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { @Override public boolean onClimbable() { - return this.horizontalCollision; + return this.entityData.get(CLIMBING); + } + + public boolean isWallClimbing() { + return this.entityData.get(CLIMBING) && !this.onGround(); } @Override @@ -120,11 +124,9 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { @Override public void tick() { super.tick(); + if (!this.level().isClientSide()) { + this.entityData.set(CLIMBING, this.horizontalCollision); + } if (attackAnimTicks > 0) attackAnimTicks--; } - - //TODO IT NEVER ACTUALLY SETS TO CLIMBING - public boolean isClimbing() { - return this.entityData.get(CLIMBING); - } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index 7e0c68e0..64ceb98f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -78,9 +78,9 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { private PlayState mainAnimController(AnimationState state) { if (attackAnimTicks > 0) { -// if (!this.isOnGround()) { -// return state.setAndContinue(ATTACK_AIR_ANIM); -// } + if (!this.onGround()) { + return state.setAndContinue(ATTACK_AIR_ANIM); + } return state.setAndContinue(ATTACK_LAND_ANIM); } if (state.isMoving()) { diff --git a/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json similarity index 60% rename from common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json rename to common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json index ea78b5ad..8611d9f0 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_eggs.json +++ b/common/src/main/resources/assets/antarchy/blockstates/creeping_horror_egg.json @@ -1,76 +1,76 @@ -{ +{ "variants": { "eggs=1,hatch=0": [ - { "model": "antarchy:block/creeping_horror_eggs_1" }, - { "model": "antarchy:block/creeping_horror_eggs_1", "y": 90 }, - { "model": "antarchy:block/creeping_horror_eggs_1", "y": 180 }, - { "model": "antarchy:block/creeping_horror_eggs_1", "y": 270 } + { "model": "antarchy:block/creeping_horror_egg_1" }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_1", "y": 270 } ], "eggs=1,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_1", "y": 270 } + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_1", "y": 270 } ], "eggs=1,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1" }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_1", "y": 270 } + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_1", "y": 270 } ], "eggs=2,hatch=0": [ - { "model": "antarchy:block/creeping_horror_eggs_2" }, - { "model": "antarchy:block/creeping_horror_eggs_2", "y": 90 }, - { "model": "antarchy:block/creeping_horror_eggs_2", "y": 180 }, - { "model": "antarchy:block/creeping_horror_eggs_2", "y": 270 } + { "model": "antarchy:block/creeping_horror_egg_2" }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_2", "y": 270 } ], "eggs=2,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_2", "y": 270 } + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_2", "y": 270 } ], "eggs=2,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2" }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_2", "y": 270 } + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_2", "y": 270 } ], "eggs=3,hatch=0": [ - { "model": "antarchy:block/creeping_horror_eggs_3" }, - { "model": "antarchy:block/creeping_horror_eggs_3", "y": 90 }, - { "model": "antarchy:block/creeping_horror_eggs_3", "y": 180 }, - { "model": "antarchy:block/creeping_horror_eggs_3", "y": 270 } + { "model": "antarchy:block/creeping_horror_egg_3" }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_3", "y": 270 } ], "eggs=3,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_3", "y": 270 } + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_3", "y": 270 } ], "eggs=3,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3" }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_3", "y": 270 } + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_3", "y": 270 } ], "eggs=4,hatch=0": [ - { "model": "antarchy:block/creeping_horror_eggs_4" }, - { "model": "antarchy:block/creeping_horror_eggs_4", "y": 90 }, - { "model": "antarchy:block/creeping_horror_eggs_4", "y": 180 }, - { "model": "antarchy:block/creeping_horror_eggs_4", "y": 270 } + { "model": "antarchy:block/creeping_horror_egg_4" }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/creeping_horror_egg_4", "y": 270 } ], "eggs=4,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4" }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_creeping_horror_eggs_4", "y": 270 } + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4" }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_creeping_horror_egg_4", "y": 270 } ], "eggs=4,hatch=2": [ - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4" }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 90 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 180 }, - { "model": "antarchy:block/very_cracked_creeping_horror_eggs_4", "y": 270 } + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4" }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_creeping_horror_egg_4", "y": 270 } ] } } diff --git a/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json similarity index 61% rename from common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json rename to common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json index a44f9824..dce79841 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_eggs.json +++ b/common/src/main/resources/assets/antarchy/blockstates/lurking_terror_egg.json @@ -1,76 +1,76 @@ -{ +{ "variants": { "eggs=1,hatch=0": [ - { "model": "antarchy:block/lurking_terror_eggs_1" }, - { "model": "antarchy:block/lurking_terror_eggs_1", "y": 90 }, - { "model": "antarchy:block/lurking_terror_eggs_1", "y": 180 }, - { "model": "antarchy:block/lurking_terror_eggs_1", "y": 270 } + { "model": "antarchy:block/lurking_terror_egg_1" }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_1", "y": 270 } ], "eggs=1,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_1", "y": 270 } + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_1", "y": 270 } ], "eggs=1,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1" }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_1", "y": 270 } + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_1", "y": 270 } ], "eggs=2,hatch=0": [ - { "model": "antarchy:block/lurking_terror_eggs_2" }, - { "model": "antarchy:block/lurking_terror_eggs_2", "y": 90 }, - { "model": "antarchy:block/lurking_terror_eggs_2", "y": 180 }, - { "model": "antarchy:block/lurking_terror_eggs_2", "y": 270 } + { "model": "antarchy:block/lurking_terror_egg_2" }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_2", "y": 270 } ], "eggs=2,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_2", "y": 270 } + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_2", "y": 270 } ], "eggs=2,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2" }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_2", "y": 270 } + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_2", "y": 270 } ], "eggs=3,hatch=0": [ - { "model": "antarchy:block/lurking_terror_eggs_3" }, - { "model": "antarchy:block/lurking_terror_eggs_3", "y": 90 }, - { "model": "antarchy:block/lurking_terror_eggs_3", "y": 180 }, - { "model": "antarchy:block/lurking_terror_eggs_3", "y": 270 } + { "model": "antarchy:block/lurking_terror_egg_3" }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_3", "y": 270 } ], "eggs=3,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_3", "y": 270 } + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_3", "y": 270 } ], "eggs=3,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3" }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_3", "y": 270 } + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_3", "y": 270 } ], "eggs=4,hatch=0": [ - { "model": "antarchy:block/lurking_terror_eggs_4" }, - { "model": "antarchy:block/lurking_terror_eggs_4", "y": 90 }, - { "model": "antarchy:block/lurking_terror_eggs_4", "y": 180 }, - { "model": "antarchy:block/lurking_terror_eggs_4", "y": 270 } + { "model": "antarchy:block/lurking_terror_egg_4" }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/lurking_terror_egg_4", "y": 270 } ], "eggs=4,hatch=1": [ - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4" }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 90 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 180 }, - { "model": "antarchy:block/slightly_cracked_lurking_terror_eggs_4", "y": 270 } + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4" }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/slightly_cracked_lurking_terror_egg_4", "y": 270 } ], "eggs=4,hatch=2": [ - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4" }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 90 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 180 }, - { "model": "antarchy:block/very_cracked_lurking_terror_eggs_4", "y": 270 } + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4" }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 90 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 180 }, + { "model": "antarchy:block/very_cracked_lurking_terror_egg_4", "y": 270 } ] } } diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 74920b84..bfd0fb6b 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -92,8 +92,8 @@ "block.antarchy.smooth_dream_sandstone_slab": "Smooth Dream Sandstone Slab", "block.antarchy.cut_dream_sandstone_slab": "Cut Dream Sandstone Slab", "block.antarchy.bed_bug_egg": "Bed Bug Egg", - "block.antarchy.creeping_horror_eggs": "Creeping Horror Eggs", - "block.antarchy.lurking_terror_eggs": "Lurking Terror Eggs", + "block.antarchy.creeping_horror_egg": "Creeping Horror Egg", + "block.antarchy.lurking_terror_egg": "Lurking Terror Egg", "block.antarchy.wasp_nest": "Wasp Nest", "block.antarchy.red_ant_nest": "Red Ant Nest", "block.antarchy.brown_ant_nest": "Brown Ant Nest", diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/creeping_horror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/lurking_terror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/lurking_terror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/slightly_cracked_lurking_terror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_1.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_1.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_2.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_2.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_3.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_3.json diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json similarity index 100% rename from common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_eggs_4.json rename to common/src/main/resources/assets/antarchy/models/block/very_cracked_lurking_terror_egg_4.json diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json new file mode 100644 index 00000000..09dddc04 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/creeping_horror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json b/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json deleted file mode 100644 index b06b0d97..00000000 --- a/common/src/main/resources/assets/antarchy/models/item/creeping_horror_eggs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/creeping_horror_eggs_1" -} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json new file mode 100644 index 00000000..42cebd01 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_egg.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/lurking_terror_egg" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json b/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json deleted file mode 100644 index 7cc8b116..00000000 --- a/common/src/main/resources/assets/antarchy/models/item/lurking_terror_eggs.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "parent": "antarchy:block/lurking_terror_eggs_1" -} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 48850b92..2740e602 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -618,7 +618,7 @@ public final class AntarchyFabricContent { () -> new DreamFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); public static final DeferredBlock DREAM_CEILING_FIRE = BLOCKS.register("dream_fire_ceiling", () -> new DreamCeilingFireBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_FIRE))); - public static final DeferredBlock CREEPING_HORROR_EGGS = BLOCKS.register("creeping_horror_eggs", + public static final DeferredBlock CREEPING_HORROR_EGG = BLOCKS.register("creeping_horror_egg", () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.of() .strength(0.15F) .sound(SoundType.METAL) @@ -626,7 +626,7 @@ public final class AntarchyFabricContent { .noOcclusion() .noCollission() .replaceable())); - public static final DeferredBlock LURKING_TERROR_EGGS = BLOCKS.register("lurking_terror_eggs", + public static final DeferredBlock LURKING_TERROR_EGG = BLOCKS.register("lurking_terror_egg", () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.of() .strength(0.15F) .sound(SoundType.METAL) @@ -1137,8 +1137,8 @@ public final class AntarchyFabricContent { () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(DREAM_CAMPFIRE); - public static final DeferredItem CREEPING_HORROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(CREEPING_HORROR_EGGS); - public static final DeferredItem LURKING_TERROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(LURKING_TERROR_EGGS); + public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(CREEPING_HORROR_EGG); + public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(LURKING_TERROR_EGG); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); @@ -2349,8 +2349,8 @@ public final class AntarchyFabricContent { () -> PINK_MILKWEED.get(), () -> TORCHFLOWER_BUSH.get(), () -> BED_BUG_EGG.get(), - () -> CREEPING_HORROR_EGGS.get(), - () -> LURKING_TERROR_EGGS.get(), + () -> CREEPING_HORROR_EGG.get(), + () -> LURKING_TERROR_EGG.get(), () -> WASP_NEST.get(), () -> HUSHWEED.get(), () -> OURANWOOD_SQUIRREL_NEST.get(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java index 15123f40..da5683cf 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/JumpyBootsFallDamageMixin.java @@ -1,7 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin; -import com.craisinlord.antarchy.content.item.JumpyBootsHelper; import com.craisinlord.antarchy.content.item.JumpyBootsItem; +import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -13,7 +13,7 @@ public abstract class JumpyBootsFallDamageMixin { private float antarchy$reduceJumpyBootsFallDamage(float fallDistance) { LivingEntity self = (LivingEntity) (Object) this; if (!JumpyBootsItem.isWearingJumpyBoots(self)) return fallDistance; - long protectionUntil = self.getPersistentData().getLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY); + long protectionUntil = JumpyBootsFabricHelper.getProtectionUntil(self); if (self.level().getGameTime() < protectionUntil) { return fallDistance * 0.25F; } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index 452e1d16..a3fb4470 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -8,6 +8,7 @@ import com.craisinlord.antarchy.content.gravity.AntarchyGravityApi; import com.craisinlord.antarchy.content.item.BrutalflyElytraFlightHelper; import com.craisinlord.antarchy.content.item.BrutalflyElytraItem; import com.craisinlord.antarchy.content.item.JumpyBootsHelper; +import com.craisinlord.antarchy.fabric.util.JumpyBootsFabricHelper; import com.craisinlord.antarchy.content.item.JumpyBootsItem; import com.craisinlord.antarchy.content.item.GravityGunItem; import com.craisinlord.antarchy.content.network.*; @@ -299,7 +300,7 @@ public final class AntarchyFabricNetworking { player.level().playSound(null, player.blockPosition(), SoundEvents.SLIME_JUMP, SoundSource.PLAYERS, 1.0F, 0.6F + (clampedCharge / (float) JumpyBootsHelper.CHARGE_TICKS_MAX) * 0.6F); - player.getPersistentData().putLong(JumpyBootsHelper.FALL_PROTECTION_NBT_KEY, + JumpyBootsFabricHelper.setProtectionUntil(player, player.level().getGameTime() + JumpyBootsHelper.FALL_PROTECTION_TICKS); player.getCooldowns().addCooldown(boots.getItem(), JumpyBootsHelper.COOLDOWN_TICKS); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java new file mode 100644 index 00000000..5386ac41 --- /dev/null +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/util/JumpyBootsFabricHelper.java @@ -0,0 +1,19 @@ +package com.craisinlord.antarchy.fabric.util; + +import net.minecraft.world.entity.LivingEntity; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +public class JumpyBootsFabricHelper { + private static final Map PROTECTION_TIMES = new ConcurrentHashMap<>(); + + public static long getProtectionUntil(LivingEntity entity) { + return PROTECTION_TIMES.getOrDefault(entity.getUUID(), 0L); + } + + public static void setProtectionUntil(LivingEntity entity, long gameTime) { + PROTECTION_TIMES.put(entity.getUUID(), gameTime); + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 6a1b7047..8584119e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -235,8 +235,8 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), () -> AntarchyNeoforgeBlocks.TORCHFLOWER_BUSH.get(), () -> AntarchyNeoforgeBlocks.BED_BUG_EGG.get(), - () -> AntarchyNeoforgeBlocks.CREEPING_HORROR_EGGS.get(), - () -> AntarchyNeoforgeBlocks.LURKING_TERROR_EGGS.get(), + () -> AntarchyNeoforgeBlocks.CREEPING_HORROR_EGG.get(), + () -> AntarchyNeoforgeBlocks.LURKING_TERROR_EGG.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED.get(), () -> AntarchyNeoforgeBlocks.OURANWOOD_SQUIRREL_NEST.get(), diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 80d2c74a..b3741c35 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -202,9 +202,9 @@ public final class AntarchyNeoforgeBlocks { .noOcclusion() .noCollission() .replaceable())); - public static final DeferredBlock CREEPING_HORROR_EGGS = BLOCKS.register("creeping_horror_eggs", + public static final DeferredBlock CREEPING_HORROR_EGG = BLOCKS.register("creeping_horror_egg", () -> new CreepingHorrorEggBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG))); - public static final DeferredBlock LURKING_TERROR_EGGS = BLOCKS.register("lurking_terror_eggs", + public static final DeferredBlock LURKING_TERROR_EGG = BLOCKS.register("lurking_terror_egg", () -> new LurkingTerrorEggBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.TURTLE_EGG))); public static final DeferredBlock WASP_NEST = BLOCKS.register("wasp_nest", () -> new WaspNestBlock(AntarchyNeoforgeItems::waspNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.BEE_NEST))); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 9d512de4..589cf42a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -95,8 +95,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.BED_BUG_EGG_ITEM.get()); - event.accept(AntarchyNeoforgeItems.CREEPING_HORROR_EGGS_ITEM.get()); - event.accept(AntarchyNeoforgeItems.LURKING_TERROR_EGGS_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CREEPING_HORROR_EGG_ITEM.get()); + event.accept(AntarchyNeoforgeItems.LURKING_TERROR_EGG_ITEM.get()); event.accept(AntarchyNeoforgeItems.WASP_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.RED_ANT_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROWN_ANT_NEST_ITEM.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 4de147eb..0625e436 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -270,8 +270,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN); public static final DeferredItem DREAM_CAMPFIRE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_CAMPFIRE); public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BED_BUG_EGG); - public static final DeferredItem CREEPING_HORROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CREEPING_HORROR_EGGS); - public static final DeferredItem LURKING_TERROR_EGGS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LURKING_TERROR_EGGS); + public static final DeferredItem CREEPING_HORROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CREEPING_HORROR_EGG); + public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LURKING_TERROR_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", From 36b75301046794fde88123a25e2d19a9ad0d6c18 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Thu, 25 Jun 2026 15:10:24 -0500 Subject: [PATCH 04/25] stinky, attribute fix native, new kraken, and a bunch of other random bs --- .../com/craisinlord/antarchy/Antarchy.java | 2 + .../antarchy/config/AntarchySettings.java | 2 +- .../antarchy/content/AntarchyObjects.java | 18 + .../antarchy/content/AntarchyTags.java | 1 + .../antarchy/content/AttributeRangeInit.java | 34 + .../antarchy/content/StinkyBehavior.java | 170 + .../content/block/AmberMossBlock.java | 38 + .../content/block/BedBugEggBlock.java | 2 +- .../content/block/CreepingHorrorEggBlock.java | 2 +- .../content/block/LurkingTerrorEggBlock.java | 2 +- .../content/client/model/StinkBugModel.java | 23 + .../renderer/CreepingHorrorRenderer.java | 1 + .../renderer/LurkingTerrorRenderer.java | 1 + .../client/renderer/StinkBugRenderer.java | 35 + .../content/effect/StinkyMobEffect.java | 10 + .../content/entity/CreepingHorrorEntity.java | 2 +- .../content/entity/DrTrayaurusEntity.java | 18 + .../content/entity/JumpyBugEntity.java | 211 +- .../content/entity/LurkingTerrorEntity.java | 7 +- .../content/entity/MissileSquidEntity.java | 12 + .../content/entity/StinkBugEntity.java | 125 + .../content/entity/WaterBombEntity.java | 19 +- .../content/entity/kraken/KrakenEntity.java | 1 + .../antarchy/content/item/SquidzookaItem.java | 56 +- .../mixins/AccessorRangedAttribute.java | 18 + .../mixins/StinkyLivingEntityMixin.java | 20 + .../resources/antarchy-common.mixins.json | 20 +- .../antarchy/animations/kraken.animation.json | 14689 +++++----------- .../animations/octopus_bomb.animation.json | 11385 ++++++++++++ .../animations/spit_bug.animation.json | 2264 +++ .../animations/stink_bug.animation.json | 611 + .../antarchy/blockstates/amber_lichen.json | 150 + .../blockstates/amber_moss_block.json | 7 + .../blockstates/amber_moss_carpet.json | 154 + .../antarchy/blockstates/chiten_block.json | 16 + .../antarchy/blockstates/creepvine.json | 120 + .../assets/antarchy/blockstates/myrmite.json | 7 + .../assets/antarchy/geo/kraken.geo.json | 547 +- .../assets/antarchy/geo/octopus_bomb.geo.json | 318 + .../assets/antarchy/geo/spit_bug.geo.json | 232 + .../assets/antarchy/geo/stink_bug.geo.json | 85 + .../resources/assets/antarchy/lang/en_us.json | 27 + .../antarchy/models/block/amber_lichen.json | 17 + .../models/block/amber_moss_block.json | 6 + .../models/block/amber_moss_carpet.json | 6 + .../block/amber_moss_carpet_side_small.json | 6 + .../block/amber_moss_carpet_side_tall.json | 18 + .../antarchy/models/block/chiten_block.json | 7 + .../antarchy/models/block/creepvine.json | 18 + .../assets/antarchy/models/block/myrmite.json | 6 + .../antarchy/models/item/amber_lichen.json | 6 + .../models/item/amber_moss_block.json | 3 + .../models/item/amber_moss_carpet.json | 3 + .../assets/antarchy/models/item/chiten.json | 6 + .../antarchy/models/item/chiten_block.json | 3 + .../antarchy/models/item/creepvine.json | 6 + .../assets/antarchy/models/item/myrmite.json | 3 + .../antarchy/models/item/stink_bug.json | 6 + .../models/item/stink_bug_spawn_egg.json | 3 + .../assets/antarchy/particles/stinky_gas.json | 12 + .../creeping_horror_egg.png} | Bin .../creeping_horror_egg_slightly_cracked.png} | Bin .../creeping_horror_egg_very_cracked.png} | Bin .../lurking_terror_egg.png | Bin .../lurking_terror_egg_slightly_cracked.png | Bin .../lurking_terror_egg_very_cracked.png | Bin .../antarchy/textures/entity/kraken_blue.png | Bin 10608 -> 0 bytes .../antarchy/textures/entity/kraken_dark.png | Bin 11564 -> 0 bytes .../textures/entity/kraken_purple.png | Bin 10985 -> 0 bytes .../entity/{kraken.png => octopus_bomb.png} | Bin .../antarchy/textures/entity/spit_bug.png | Bin 0 -> 13145 bytes .../antarchy/textures/entity/stink_bug.png | Bin 0 -> 674 bytes .../antarchy/textures/item/stink_bug.png | Bin 0 -> 308 bytes .../antarchy/textures/mob_effect/stinky.png | Bin 0 -> 356 bytes .../particle/stinky_gas/stinky_gas_01.png | Bin 0 -> 300 bytes .../particle/stinky_gas/stinky_gas_02.png | Bin 0 -> 337 bytes .../particle/stinky_gas/stinky_gas_03.png | Bin 0 -> 356 bytes .../particle/stinky_gas/stinky_gas_04.png | Bin 0 -> 348 bytes .../particle/stinky_gas/stinky_gas_05.png | Bin 0 -> 323 bytes .../particle/stinky_gas/stinky_gas_06.png | Bin 0 -> 293 bytes .../particle/stinky_gas/stinky_gas_07.png | Bin 0 -> 255 bytes .../particle/stinky_gas/stinky_gas_08.png | Bin 0 -> 185 bytes .../whoever_smelt_it_dealt_it.json | 39 + .../data/antarchy/dimension/elythia.json | 96 + .../loot_table/blocks/amber_lichen.json | 25 + .../loot_table/blocks/amber_moss_block.json | 20 + .../loot_table/blocks/amber_moss_carpet.json | 20 + .../loot_table/blocks/chiten_block.json | 20 + .../blocks/creeping_horror_egg.json | 91 + .../antarchy/loot_table/blocks/creepvine.json | 25 + .../loot_table/blocks/lurking_terror_egg.json | 91 + .../antarchy/loot_table/blocks/myrmite.json | 20 + .../loot_table/entities/stink_bug.json | 25 + .../loot_table/entities/toreterror.json | 2 +- .../antarchy/recipe/amber_moss_carpet.json | 17 + .../data/antarchy/recipe/chiten_block.json | 17 + .../antarchy/recipe/umbral_moss_carpet.json | 17 + .../entity_type/stinky_repelled_hostiles.json | 10 + .../tags/worldgen/biome/is_elythia.json | 4 +- .../worldgen/biome/elythia_beach.json | 68 + .../worldgen/biome/elythia_ocean.json | 68 + .../density_function/elythia_surface.json | 2 +- .../worldgen/noise_settings/elythia.json | 124 +- .../data/minecraft/tags/block/dirt.json | 3 +- .../minecraft/tags/block/mineable/hoe.json | 6 +- .../tags/block/mineable/pickaxe.json | 2 + .../tags/block/needs_stone_tool.json | 3 +- .../data/minecraft/tags/block/vines.json | 7 + .../minecraft/tags/entity_type/arthropod.json | 18 + .../minecraft/tags/entity_type/zombies.json | 4 - .../data/minecraft/tags/item/dirt.json | 3 +- .../data/minecraft/tags/item/vines.json | 7 + .../fabric/AntarchyFabricContent.java | 65 +- .../antarchy/fabric/AntarchyFabricEvents.java | 7 +- .../client/AntarchyFabricClientBootstrap.java | 5 + .../client/JumpyBootsClientHandler.java | 5 + .../network/AntarchyFabricNetworking.java | 1 + .../antarchy/neoforge/AntarchyMiscConfig.java | 2 +- .../antarchy/neoforge/AntarchyNeoforge.java | 4 + .../client/AntarchyNeoForgeClient.java | 5 + .../client/JumpyBootsClientHandler.java | 18 + .../network/JumpyBootsNetworking.java | 1 + .../registry/AntarchyNeoForgeEvents.java | 7 +- .../registry/AntarchyNeoforgeBlocks.java | 12 + .../AntarchyNeoforgeCreativeModeTabs.java | 24 +- .../registry/AntarchyNeoforgeEntites.java | 10 +- .../AntarchyNeoforgeEntityAttributes.java | 1 + .../registry/AntarchyNeoforgeItems.java | 14 +- .../registry/AntarchyNeoforgeMisc.java | 8 + .../AntarchyNeoforgeSpawnPlacements.java | 1 + 130 files changed, 21935 insertions(+), 10706 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java create mode 100644 common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json create mode 100644 common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/chiten_block.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/creepvine.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/myrmite.json create mode 100644 common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json create mode 100644 common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/amber_lichen.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/creepvine.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/myrmite.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/amber_lichen.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/chiten.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/chiten_block.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/creepvine.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/myrmite.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/stink_bug.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/particles/stinky_gas.json rename common/src/main/resources/assets/antarchy/textures/block/{creeping_horror_eggs/creeping_horror_eggs.png => creeping_horror_egg/creeping_horror_egg.png} (100%) rename common/src/main/resources/assets/antarchy/textures/block/{creeping_horror_eggs/creeping_horror_eggs_slightly_cracked.png => creeping_horror_egg/creeping_horror_egg_slightly_cracked.png} (100%) rename common/src/main/resources/assets/antarchy/textures/block/{creeping_horror_eggs/creeping_horror_eggs_very_cracked.png => creeping_horror_egg/creeping_horror_egg_very_cracked.png} (100%) rename common/src/main/resources/assets/antarchy/textures/block/{lurking_terror_eggs => lurking_terror_egg}/lurking_terror_egg.png (100%) rename common/src/main/resources/assets/antarchy/textures/block/{lurking_terror_eggs => lurking_terror_egg}/lurking_terror_egg_slightly_cracked.png (100%) rename common/src/main/resources/assets/antarchy/textures/block/{lurking_terror_eggs => lurking_terror_egg}/lurking_terror_egg_very_cracked.png (100%) delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png delete mode 100644 common/src/main/resources/assets/antarchy/textures/entity/kraken_purple.png rename common/src/main/resources/assets/antarchy/textures/entity/{kraken.png => octopus_bomb.png} (100%) create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/spit_bug.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/stink_bug.png create mode 100644 common/src/main/resources/assets/antarchy/textures/mob_effect/stinky.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_01.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_02.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_04.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_05.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_07.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_08.png create mode 100644 common/src/main/resources/data/antarchy/advancement/whoever_smelt_it_dealt_it.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/amber_lichen.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_block.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/amber_moss_carpet.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/chiten_block.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/creeping_horror_egg.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/creepvine.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/lurking_terror_egg.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/myrmite.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/stink_bug.json create mode 100644 common/src/main/resources/data/antarchy/recipe/amber_moss_carpet.json create mode 100644 common/src/main/resources/data/antarchy/recipe/chiten_block.json create mode 100644 common/src/main/resources/data/antarchy/recipe/umbral_moss_carpet.json create mode 100644 common/src/main/resources/data/antarchy/tags/entity_type/stinky_repelled_hostiles.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/elythia_beach.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json create mode 100644 common/src/main/resources/data/minecraft/tags/block/vines.json create mode 100644 common/src/main/resources/data/minecraft/tags/entity_type/arthropod.json delete mode 100644 common/src/main/resources/data/minecraft/tags/entity_type/zombies.json create mode 100644 common/src/main/resources/data/minecraft/tags/item/vines.json diff --git a/common/src/main/java/com/craisinlord/antarchy/Antarchy.java b/common/src/main/java/com/craisinlord/antarchy/Antarchy.java index aa7fc096..a462f362 100644 --- a/common/src/main/java/com/craisinlord/antarchy/Antarchy.java +++ b/common/src/main/java/com/craisinlord/antarchy/Antarchy.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy; +import com.craisinlord.antarchy.content.AttributeRangeInit; import com.craisinlord.integrated_api.events.lifecycle.ServerGoingToStartEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -10,6 +11,7 @@ public class Antarchy { public static final Logger LOGGER = LogManager.getLogger(); public static void init() { + AttributeRangeInit.apply(); ServerGoingToStartEvent.EVENT.addListener(Antarchy::serverAboutToStart); } private static void serverAboutToStart(final ServerGoingToStartEvent event) { diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 51c9d338..8bb2de50 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -5,7 +5,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; public final class AntarchySettings { - private static boolean disableInfinityBookPortalCreation = false; + private static boolean disableInfinityBookPortalCreation = true; private static boolean easterBunnyEnabled = true; private static int easterBunnyNaturalSpawnChancePercent = 1; private static boolean rainbowAntsLeadToInfinityDimensions = true; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 61189a44..a5d0d49f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -6,6 +6,7 @@ import com.craisinlord.antarchy.content.entity.ButterflyEntity; import com.craisinlord.antarchy.content.entity.CaterpillarEntity; import com.craisinlord.antarchy.content.entity.EasterBunnyEntity; import com.craisinlord.antarchy.content.entity.HushProjectileEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.WaterBombEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; @@ -27,6 +28,7 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import java.util.function.Supplier; import net.minecraft.core.Holder; +import net.minecraft.core.particles.SimpleParticleType; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.entity.ai.attributes.Attribute; import net.minecraft.world.entity.EntityType; @@ -85,6 +87,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> LURKING_TERROR = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> STINK_BUG = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_LOG = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier DUPLICATOR_SAPLING = (Supplier) UNBOUND; @@ -165,6 +169,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier REVERIE_BOTTLE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier STINK_BUG_ITEM = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> DREAD = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> DOUBLE_DAMAGE_CHANCE = (Supplier>) UNBOUND; @@ -177,6 +183,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> INVERTED_EFFECT = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> STINKY_EFFECT = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier OURANWOOD_ACORN_BLOCK = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier MOSSY_OURANWOOD_LOG = (Supplier) UNBOUND; @@ -208,6 +216,8 @@ public final class AntarchyObjects { public static Supplier> WASP_NEST_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> HUSHWEED_BLOCK_ENTITY = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_GAS = (Supplier) UNBOUND; private AntarchyObjects() { } @@ -234,6 +244,7 @@ public final class AntarchyObjects { Supplier> waterBomb, Supplier> creepingHorror, Supplier> lurkingTerror, + Supplier> stinkBug, Supplier duplicatorLog, Supplier duplicatorSapling, Supplier ductTape, @@ -274,9 +285,11 @@ public final class AntarchyObjects { Supplier krakenTooth, Supplier moggles, Supplier reverieBottle, + Supplier stinkBugItem, Supplier> dread, Supplier> paralyzedEffect, Supplier> invertedEffect, + Supplier> stinkyEffect, Supplier ouranwoodAcornBlock, Supplier mossyOuranwoodLog, Supplier mossyOuranwoodWood, @@ -293,6 +306,7 @@ public final class AntarchyObjects { Supplier> dreamCampfireBlockEntity, Supplier> waspNestBlockEntity, Supplier> hushweedBlockEntity, + Supplier stinkyGas, Supplier> doubleDamageChance, Supplier> bloodglassMaxHearts, Supplier> bloodglassWard @@ -318,6 +332,7 @@ public final class AntarchyObjects { WATER_BOMB = waterBomb; CREEPING_HORROR = creepingHorror; LURKING_TERROR = lurkingTerror; + STINK_BUG = stinkBug; DUPLICATOR_LOG = duplicatorLog; DUPLICATOR_SAPLING = duplicatorSapling; DUCT_TAPE = ductTape; @@ -358,9 +373,11 @@ public final class AntarchyObjects { KRAKEN_TOOTH = krakenTooth; MOGGLES = moggles; REVERIE_BOTTLE = reverieBottle; + STINK_BUG_ITEM = stinkBugItem; DREAD = dread; PARALYZED_EFFECT = paralyzedEffect; INVERTED_EFFECT = invertedEffect; + STINKY_EFFECT = stinkyEffect; OURANWOOD_ACORN_BLOCK = ouranwoodAcornBlock; MOSSY_OURANWOOD_LOG = mossyOuranwoodLog; MOSSY_OURANWOOD_WOOD = mossyOuranwoodWood; @@ -377,6 +394,7 @@ public final class AntarchyObjects { DREAM_CAMPFIRE_BLOCK_ENTITY = dreamCampfireBlockEntity; WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; + STINKY_GAS = stinkyGas; DOUBLE_DAMAGE_CHANCE = doubleDamageChance; BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; BLOODGLASS_WARD = bloodglassWard; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index d7e170f6..4bffaa9a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -55,6 +55,7 @@ public final class AntarchyTags { public static final TagKey> PARALYSIS_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("paralysis_immune")); public static final TagKey> HUSHWEED_TARGETS = TagKey.create(Registries.ENTITY_TYPE, id("hushweed_targets")); public static final TagKey> TRIFFID_PREY = TagKey.create(Registries.ENTITY_TYPE, id("triffid_prey")); + public static final TagKey> STINKY_REPELLED_HOSTILES = TagKey.create(Registries.ENTITY_TYPE, id("stinky_repelled_hostiles")); public static final TagKey> SCORPION_WHIP_IMMUNE = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_immune")); public static final TagKey> SCORPION_WHIP_BLACKLIST = TagKey.create(Registries.ENTITY_TYPE, id("scorpion_whip_blacklist")); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java b/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java new file mode 100644 index 00000000..271ebc32 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/AttributeRangeInit.java @@ -0,0 +1,34 @@ +package com.craisinlord.antarchy.content; + +import com.craisinlord.antarchy.mixins.AccessorRangedAttribute; +import com.google.common.collect.ImmutableSet; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.ai.attributes.Attribute; +import net.minecraft.world.entity.ai.attributes.RangedAttribute; + +import java.util.Set; + +public class AttributeRangeInit { + + private static final double MAX = 11_000_000D; + + private static final Set TARGETS = ImmutableSet.of( + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.max_health"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.armor_toughness"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_damage"), + ResourceLocation.fromNamespaceAndPath("minecraft", "generic.attack_knockback") + ); + + public static void apply() { + for (ResourceLocation id : TARGETS) { + Attribute attribute = BuiltInRegistries.ATTRIBUTE.get(id); + if (attribute instanceof RangedAttribute ranged && ranged instanceof AccessorRangedAttribute accessor) { + if (ranged.getMaxValue() < MAX) { + accessor.antarchyAttributefix$setMaxValue(MAX); + } + } + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java new file mode 100644 index 00000000..2ae08064 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java @@ -0,0 +1,170 @@ +package com.craisinlord.antarchy.content; + +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.PathfinderMob; +import net.minecraft.world.entity.monster.Enemy; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.phys.Vec3; + +public final class StinkyBehavior { + public static final int STINKY_EFFECT_DURATION_TICKS = 60; + public static final double STINK_BUG_AURA_RADIUS = 5.0D; + public static final double STINKY_NAUSEA_RADIUS = 4.0D; + private static final int TRAIL_INTERVAL_TICKS = 4; + private static final int REACTION_INTERVAL_TICKS = 10; + private static final double ARTHROPOD_ALERT_RADIUS = 28.0D; + private static final double FLEE_RADIUS = 10.0D; + private static final double FLEE_DISTANCE = 8.0D; + private static final int STINKY_NAUSEA_DURATION_TICKS = 60; + private static final int STINK_BUG_BURST_NAUSEA_DURATION_TICKS = 100; + + private StinkyBehavior() { + } + + public static void tickStinkyTrail(LivingEntity entity) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + if (!entity.isAlive() || entity.tickCount % TRAIL_INTERVAL_TICKS != 0 || !entity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return; + } + + Vec3 motion = entity.getDeltaMovement(); + Vec3 horizontalMotion = new Vec3(motion.x, 0.0D, motion.z); + Vec3 direction = horizontalMotion.lengthSqr() > 1.0E-4D + ? horizontalMotion.normalize() + : entity.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + if (direction.lengthSqr() <= 1.0E-4D) { + direction = new Vec3(0.0D, 0.0D, 1.0D); + } else { + direction = direction.normalize(); + } + + Vec3 origin = entity.position() + .subtract(direction.scale(0.35D)) + .add(0.0D, Math.max(0.15D, entity.getBbHeight() * 0.2D), 0.0D); + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + origin.x, + origin.y, + origin.z, + 2, + entity.getBbWidth() * 0.12D, + 0.04D, + entity.getBbWidth() * 0.12D, + 0.005D + ); + applyNearbyNausea(entity, STINKY_NAUSEA_RADIUS, STINKY_NAUSEA_DURATION_TICKS); + if (entity.tickCount % REACTION_INTERVAL_TICKS == 0) { + reactToStinkySource(entity); + } + } + + public static void emitBurst(LivingEntity entity, int count) { + if (!(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + serverLevel.sendParticles( + AntarchyObjects.STINKY_GAS.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + count, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.35D, + 0.045D + ); + applyNearbyNausea(entity, STINK_BUG_AURA_RADIUS, STINK_BUG_BURST_NAUSEA_DURATION_TICKS); + } + + public static void applyNearbyNausea(LivingEntity source, double radius, int durationTicks) { + if (source.level().isClientSide()) { + return; + } + + for (Player player : source.level().getEntitiesOfClass( + Player.class, + source.getBoundingBox().inflate(radius), + player -> player.isAlive() && !player.isSpectator() && player != source + )) { + player.addEffect(new MobEffectInstance(MobEffects.CONFUSION, durationTicks, 0, false, true, true)); + } + } + + private static void reactToStinkySource(LivingEntity source) { + if (source.level().isClientSide() || !source.isAlive()) { + return; + } + + for (Mob mob : source.level().getEntitiesOfClass( + Mob.class, + source.getBoundingBox().inflate(ARTHROPOD_ALERT_RADIUS), + mob -> mob.isAlive() && mob != source + )) { + if (mob.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + attractArthropod(mob, source); + continue; + } + if (shouldRepelMob(mob, source)) { + repelPassiveOrNeutralMob(mob, source); + } + } + } + + private static void attractArthropod(Mob mob, LivingEntity source) { + if (!isValidStinkySourceForMob(mob, source)) { + return; + } + + LivingEntity currentTarget = mob.getTarget(); + if (currentTarget != null && currentTarget.isAlive() && currentTarget.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) + && mob.distanceToSqr(currentTarget) <= ARTHROPOD_ALERT_RADIUS * ARTHROPOD_ALERT_RADIUS) { + return; + } + + mob.setTarget(source); + } + + private static void repelPassiveOrNeutralMob(Mob mob, LivingEntity source) { + if (!(mob instanceof PathfinderMob pathfinderMob) || !isValidStinkySourceForMob(mob, source)) { + return; + } + + Vec3 away = mob.position().subtract(source.position()); + if (away.lengthSqr() < 1.0E-4D) { + away = new Vec3(mob.getRandom().nextDouble() - 0.5D, 0.0D, mob.getRandom().nextDouble() - 0.5D); + } + + Vec3 escapeTarget = mob.position().add(away.normalize().scale(FLEE_DISTANCE)); + pathfinderMob.setTarget(null); + pathfinderMob.getNavigation().moveTo(escapeTarget.x, escapeTarget.y, escapeTarget.z, 1.2D); + } + + private static boolean shouldRepelMob(Mob mob, LivingEntity source) { + if (mob.hasEffect(AntarchyObjects.STINKY_EFFECT.get()) || mob.distanceToSqr(source) > FLEE_RADIUS * FLEE_RADIUS) { + return false; + } + + if (mob.getType().is(AntarchyTags.Entities.STINKY_REPELLED_HOSTILES)) { + return true; + } + + return !(mob instanceof Enemy); + } + + private static boolean isValidStinkySourceForMob(Mob mob, LivingEntity source) { + if (source == mob || !source.isAlive() || !source.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + return false; + } + if (source instanceof Player player && (player.isCreative() || player.isSpectator())) { + return false; + } + return !mob.isAlliedTo(source); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java new file mode 100644 index 00000000..0b0a840c --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java @@ -0,0 +1,38 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.BonemealableBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; + +public class AmberMossBlock extends Block implements BonemealableBlock { + public static final MapCodec CODEC = Block.simpleCodec(AmberMossBlock::new); + + public AmberMossBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { + return false; + } + + @Override + public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { + return false; + } + + @Override + public void performBonemeal(net.minecraft.server.level.ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java index c1be1778..48818b6a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BedBugEggBlock.java @@ -96,7 +96,7 @@ public class BedBugEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + if (!this.shouldUpdateHatchLevel(level)) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java index 9eb0af46..0d21a0fa 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -87,7 +87,7 @@ public class CreepingHorrorEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + if (!this.shouldUpdateHatchLevel(level)) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java index 67e7c2b6..a3f16236 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -87,7 +87,7 @@ public class LurkingTerrorEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level) || !hasHatchSupport(level, pos)) { + if (!this.shouldUpdateHatchLevel(level)) { return; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java new file mode 100644 index 00000000..dfc62024 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/StinkBugModel.java @@ -0,0 +1,23 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class StinkBugModel extends GeoModel { + @Override + public ResourceLocation getModelResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/stink_bug.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/stink_bug.png"); + } + + @Override + public ResourceLocation getAnimationResource(StinkBugEntity animatable) { + return ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/stink_bug.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java index 6a34b3c4..086b326b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CreepingHorrorRenderer.java @@ -15,6 +15,7 @@ public class CreepingHorrorRenderer extends GeoEntityRenderer { + private static final float ADULT_SCALE = 0.75F; + private static final float BABY_SCALE = 0.50F; + private static final float ADULT_SHADOW_RADIUS = 0.6F; + + public StinkBugRenderer(EntityRendererProvider.Context context) { + super(context, new StinkBugModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + this.withScale(ADULT_SCALE); + } + + @Override + public void preRender(PoseStack poseStack, StinkBugEntity 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.isBaby()) { + poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java new file mode 100644 index 00000000..e8580494 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java @@ -0,0 +1,10 @@ +package com.craisinlord.antarchy.content.effect; + +import net.minecraft.world.effect.MobEffect; +import net.minecraft.world.effect.MobEffectCategory; + +public final class StinkyMobEffect extends MobEffect { + public StinkyMobEffect() { + super(MobEffectCategory.HARMFUL, 0x66773A); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java index 4c6b4e77..e6b15149 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -57,7 +57,7 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.creepingHorrorHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.30D) + .add(Attributes.MOVEMENT_SPEED, 0.38D) .add(Attributes.ATTACK_DAMAGE, AntarchySettings.creepingHorrorAttackDamage()) .add(Attributes.FOLLOW_RANGE, 16.0D); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java index 81b61163..166dadb6 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DrTrayaurusEntity.java @@ -3,6 +3,9 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.entity.trades.DrTrayaurusTradeManager; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.AgeableMob; @@ -80,6 +83,21 @@ public class DrTrayaurusEntity extends AbstractVillager { this.overrideXp(1); } + @Override + protected SoundEvent getAmbientSound() { + return SoundEvents.VILLAGER_AMBIENT; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return SoundEvents.VILLAGER_HURT; + } + + @Override + protected SoundEvent getDeathSound() { + return SoundEvents.VILLAGER_DEATH; + } + @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java index 68efc88e..bc0c1c79 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/JumpyBugEntity.java @@ -58,31 +58,23 @@ public class JumpyBugEntity extends Monster implements GeoEntity { SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor CLINGING_TO_CEILING = SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.BOOLEAN); - private static final EntityDataAccessor LATCHED_TARGET_ID = - SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(JumpyBugEntity.class, EntityDataSerializers.INT); private static final String POUNCE_COOLDOWN_KEY = "PounceCooldown"; - private static final String LATCH_COOLDOWN_KEY = "LatchCooldown"; - private static final String LATCH_TICKS_KEY = "LatchTicksRemaining"; - private static final String BITE_COOLDOWN_KEY = "BiteCooldown"; private static final String RECOVERY_TICKS_KEY = "RecoveryTicks"; private static final String POUNCE_TICKS_KEY = "PounceTicks"; private static final double DEFAULT_MOVEMENT_SPEED = 0.25D; private static final double DEFAULT_FOLLOW_RANGE = 16.0D; - private static final double DEFAULT_POUNCE_RANGE = 8.0D; - private static final int DEFAULT_LATCH_DURATION = 80; - private static final int DEFAULT_BITE_INTERVAL = 15; + private static final double MELEE_WALK_RANGE = 4.0D; private static final int DEFAULT_POUNCE_COOLDOWN = 60; - private static final int DEFAULT_LATCH_COOLDOWN = 80; private static final int DEFAULT_RECOVERY_TICKS = 20; private static final double POUNCE_HORIZONTAL_SPEED = 0.92D; - private static final double POUNCE_UPWARD_SPEED = 0.45D; + private static final double POUNCE_UPWARD_SPEED = 0.75D; private static final double QUICK_MOVE_SQR = 0.14D * 0.14D; private static final double CLING_SEARCH_RANGE = 1.5D; - private static final double LATCH_CHECK_RANGE = 0.85D; + private static final double POUNCE_LAND_DAMAGE_RANGE = 5.0D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); @@ -92,9 +84,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); private int pounceCooldownTicks; - private int latchCooldownTicks; - private int latchTicksRemaining; - private int biteCooldownTicks; private int recoveryTicks; private int pounceTicks; private float visualAlpha = 1.0F; @@ -127,20 +116,18 @@ public class JumpyBugEntity extends Monster implements GeoEntity { super.defineSynchedData(builder); builder.define(CAMOUFLAGED, false); builder.define(CLINGING_TO_CEILING, false); - builder.define(LATCHED_TARGET_ID, -1); builder.define(ATTACK_STATE, AttackState.GROUND.id()); } @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); - this.goalSelector.addGoal(1, new LatchedGoal()); - this.goalSelector.addGoal(2, new PounceAttackGoal()); - this.goalSelector.addGoal(3, new CeilingClingGoal()); - this.goalSelector.addGoal(4, new ChaseTargetGoal()); - this.goalSelector.addGoal(5, new WanderGoal()); - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 10.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(1, new PounceAttackGoal()); + this.goalSelector.addGoal(2, new CeilingClingGoal()); + this.goalSelector.addGoal(3, new ChaseTargetGoal()); + this.goalSelector.addGoal(4, new WanderGoal()); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 10.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } @@ -159,9 +146,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); tag.putInt(POUNCE_COOLDOWN_KEY, this.pounceCooldownTicks); - tag.putInt(LATCH_COOLDOWN_KEY, this.latchCooldownTicks); - tag.putInt(LATCH_TICKS_KEY, this.latchTicksRemaining); - tag.putInt(BITE_COOLDOWN_KEY, this.biteCooldownTicks); tag.putInt(RECOVERY_TICKS_KEY, this.recoveryTicks); tag.putInt(POUNCE_TICKS_KEY, this.pounceTicks); } @@ -170,9 +154,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); this.pounceCooldownTicks = tag.getInt(POUNCE_COOLDOWN_KEY); - this.latchCooldownTicks = tag.getInt(LATCH_COOLDOWN_KEY); - this.latchTicksRemaining = tag.getInt(LATCH_TICKS_KEY); - this.biteCooldownTicks = tag.getInt(BITE_COOLDOWN_KEY); this.recoveryTicks = tag.getInt(RECOVERY_TICKS_KEY); this.pounceTicks = tag.getInt(POUNCE_TICKS_KEY); } @@ -198,19 +179,11 @@ public class JumpyBugEntity extends Monster implements GeoEntity { if (this.pounceCooldownTicks > 0) { this.pounceCooldownTicks--; } - if (this.latchCooldownTicks > 0) { - this.latchCooldownTicks--; - } - if (this.biteCooldownTicks > 0) { - this.biteCooldownTicks--; - } if (this.recoveryTicks > 0) { this.recoveryTicks--; } - if (this.isLatched()) { - this.tickLatched(); - } else if (this.isClingingToCeiling()) { + if (this.isClingingToCeiling()) { this.tickClinging(); } else if (this.isPouncing()) { this.tickPouncing(); @@ -227,7 +200,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity { @Override public void travel(Vec3 travelVector) { - if (this.isLatched() || this.isClingingToCeiling()) { + if (this.isClingingToCeiling()) { this.setDeltaMovement(Vec3.ZERO); return; } @@ -243,9 +216,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { this.setCamouflaged(false); this.recoveryTicks = Math.max(this.recoveryTicks, DEFAULT_RECOVERY_TICKS); - if (this.isLatched()) { - this.detachFromTarget(true); - } if (this.isClingingToCeiling()) { this.stopClinging(); } @@ -288,14 +258,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { return this.entityData.get(CLINGING_TO_CEILING); } - public boolean isLatched() { - return this.entityData.get(LATCHED_TARGET_ID) != -1; - } - - public boolean isLatchedTo(LivingEntity entity) { - return this.entityData.get(LATCHED_TARGET_ID) == entity.getId(); - } - public boolean isPouncing() { return this.getAttackState() == AttackState.POUNCING; } @@ -326,7 +288,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity { private PlayState mainAnimController(AnimationState state) { AttackState attackState = this.getAttackState(); - if (attackState == AttackState.POUNCING || attackState == AttackState.LATCHED || attackState == AttackState.CLINGING) { + if (attackState == AttackState.POUNCING || attackState == AttackState.CLINGING) { return state.setAndContinue(JUMP_ANIM); } if (attackState == AttackState.RECOVERING) { @@ -356,54 +318,18 @@ public class JumpyBugEntity extends Monster implements GeoEntity { this.setAttackState(AttackState.POUNCING); this.setCamouflaged(false); this.pounceTicks++; - LivingEntity target = this.getTarget(); - if (target != null && target.isAlive() && this.distanceToSqr(target) <= (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE) * (this.getBbWidth() + target.getBbWidth() + LATCH_CHECK_RANGE)) { - if (this.tryLatch(target)) { - return; - } - } - if (this.onGround() && this.pounceTicks > 4) { + if (this.onGround() && this.pounceTicks > 8) { + LivingEntity target = this.getTarget(); + if (target != null && target.isAlive() && this.distanceToSqr(target) <= POUNCE_LAND_DAMAGE_RANGE * POUNCE_LAND_DAMAGE_RANGE) { + target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage()); + } this.finishPounce(false); } } - private void tickLatched() { - LivingEntity target = this.getLatchedTarget(); - if (target == null || !target.isAlive() || target.level() != this.level() || target.isRemoved() || target.isInWater()) { - this.detachFromTarget(false); - return; - } - - this.setAttackState(AttackState.LATCHED); - this.setCamouflaged(false); - this.setNoGravity(true); - this.noPhysics = true; - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - - Vec3 latchPos = this.getLatchPosition(target); - this.setPos(latchPos.x, latchPos.y, latchPos.z); - this.yRotO = this.getYRot(); - this.setYRot(target.getYHeadRot()); - this.setYBodyRot(target.getYHeadRot()); - this.setYHeadRot(target.getYHeadRot()); - this.setXRot(-20.0F); - - if (--this.latchTicksRemaining <= 0) { - this.detachFromTarget(true); - return; - } - - if (this.biteCooldownTicks <= 0) { - target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugLatchDamage()); - this.biteCooldownTicks = DEFAULT_BITE_INTERVAL; - this.playSound(SoundEvents.SPIDER_HURT, 0.35F, 1.5F + this.random.nextFloat() * 0.2F); - } - } - private void updateCamouflage() { - if (this.isLatched() || this.isPouncing()) { + if (this.isPouncing()) { this.setCamouflaged(false); return; } @@ -415,63 +341,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { this.setCamouflaged(shouldCamouflage); } - private boolean tryLatch(LivingEntity target) { - if (!(target instanceof Player) || this.latchCooldownTicks > 0 || this.isLatched()) { - return false; - } - if (this.level().getEntitiesOfClass(JumpyBugEntity.class, target.getBoundingBox().inflate(0.75D), - bug -> bug != this && bug.isLatchedTo(target)).isEmpty()) { - this.entityData.set(LATCHED_TARGET_ID, target.getId()); - this.latchTicksRemaining = DEFAULT_LATCH_DURATION; - this.biteCooldownTicks = 0; - this.pounceTicks = 0; - this.setAttackState(AttackState.LATCHED); - this.setTarget(target); - target.hurt(this.damageSources().mobAttack(this), (float) AntarchySettings.jumpyBugPounceDamage()); - return true; - } - return false; - } - - private void detachFromTarget(boolean knockAway) { - LivingEntity target = this.getLatchedTarget(); - this.entityData.set(LATCHED_TARGET_ID, -1); - this.latchTicksRemaining = 0; - this.biteCooldownTicks = DEFAULT_BITE_INTERVAL; - this.latchCooldownTicks = DEFAULT_LATCH_COOLDOWN; - this.setAttackState(AttackState.RECOVERING); - this.recoveryTicks = DEFAULT_RECOVERY_TICKS; - this.setNoGravity(false); - this.noPhysics = false; - - if (knockAway && target != null) { - Vec3 away = this.position().subtract(target.position()); - if (away.lengthSqr() < 1.0E-4D) { - away = target.getLookAngle().scale(-1.0D); - } - away = away.normalize(); - this.setDeltaMovement(away.x * 0.35D, 0.25D, away.z * 0.35D); - this.hasImpulse = true; - } - } - - @Nullable - private LivingEntity getLatchedTarget() { - int entityId = this.entityData.get(LATCHED_TARGET_ID); - if (entityId == -1) { - return null; - } - - Entity entity = this.level().getEntity(entityId); - return entity instanceof LivingEntity livingEntity ? livingEntity : null; - } - - private Vec3 getLatchPosition(LivingEntity target) { - Vec3 eyePos = target.position().add(0.0D, target.getEyeHeight() - 0.15D, 0.0D); - Vec3 backOffset = target.getLookAngle().normalize().scale(-0.16D); - return eyePos.add(backOffset).add(0.0D, -0.18D, 0.0D); - } - @Nullable private BlockPos findClingBlockPos() { BlockPos origin = this.blockPosition(); @@ -537,18 +406,15 @@ public class JumpyBugEntity extends Monster implements GeoEntity { } private boolean canUseAmbush() { - return !this.isLatched() - && !this.isPouncing() - && this.recoveryTicks <= 0 - && this.latchCooldownTicks <= 0; + return !this.isPouncing() + && this.recoveryTicks <= 0; } private enum AttackState implements StringRepresentable { GROUND(0, "ground"), CLINGING(1, "clinging"), POUNCING(2, "pouncing"), - LATCHED(3, "latched"), - RECOVERING(4, "recovering"); + RECOVERING(3, "recovering"); private static final IntFunction BY_ID = ByIdMap.continuous(AttackState::id, values(), ByIdMap.OutOfBoundsStrategy.ZERO); public static final Codec CODEC = StringRepresentable.fromEnum(AttackState::values); @@ -571,27 +437,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { } } - private final class LatchedGoal extends Goal { - private LatchedGoal() { - this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); - } - - @Override - public boolean canUse() { - return JumpyBugEntity.this.isLatched(); - } - - @Override - public boolean canContinueToUse() { - return JumpyBugEntity.this.isLatched(); - } - - @Override - public void tick() { - JumpyBugEntity.this.getNavigation().stop(); - } - } - private final class PounceAttackGoal extends Goal { private PounceAttackGoal() { this.setFlags(EnumSet.of(Flag.MOVE, Flag.LOOK, Flag.JUMP)); @@ -604,7 +449,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { && target.isAlive() && JumpyBugEntity.this.canUseAmbush() && JumpyBugEntity.this.pounceCooldownTicks <= 0 - && JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 9.0D); } @@ -638,7 +482,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity { return JumpyBugEntity.this.random.nextInt(40) == 0 && JumpyBugEntity.this.canClingHere(); } - return JumpyBugEntity.this.distanceToSqr(target) <= (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE) * (DEFAULT_POUNCE_RANGE + CLING_SEARCH_RANGE) + return JumpyBugEntity.this.distanceToSqr(target) <= (DEFAULT_FOLLOW_RANGE + CLING_SEARCH_RANGE) * (DEFAULT_FOLLOW_RANGE + CLING_SEARCH_RANGE) && JumpyBugEntity.this.canClingHere(); } @@ -668,7 +512,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); if (JumpyBugEntity.this.pounceCooldownTicks <= 0 - && JumpyBugEntity.this.distanceToSqr(target) <= DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE && (JumpyBugEntity.this.hasLineOfSight(target) || JumpyBugEntity.this.distanceToSqr(target) <= 4.0D)) { JumpyBugEntity.this.stopClinging(); JumpyBugEntity.this.beginPounce(target); @@ -686,7 +529,6 @@ public class JumpyBugEntity extends Monster implements GeoEntity { LivingEntity target = JumpyBugEntity.this.getTarget(); return target != null && target.isAlive() - && !JumpyBugEntity.this.isLatched() && !JumpyBugEntity.this.isClingingToCeiling() && !JumpyBugEntity.this.isPouncing() && JumpyBugEntity.this.recoveryTicks <= 0; @@ -705,7 +547,8 @@ public class JumpyBugEntity extends Monster implements GeoEntity { } JumpyBugEntity.this.getLookControl().setLookAt(target, 30.0F, 30.0F); - if (JumpyBugEntity.this.distanceToSqr(target) > DEFAULT_POUNCE_RANGE * DEFAULT_POUNCE_RANGE) { + // Only walk when close; at range, pounce is the primary approach + if (JumpyBugEntity.this.distanceToSqr(target) <= MELEE_WALK_RANGE * MELEE_WALK_RANGE) { JumpyBugEntity.this.getNavigation().moveTo(target, 1.05D); } else { JumpyBugEntity.this.getNavigation().stop(); @@ -720,8 +563,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - return !JumpyBugEntity.this.isLatched() - && !JumpyBugEntity.this.isClingingToCeiling() + return !JumpyBugEntity.this.isClingingToCeiling() && !JumpyBugEntity.this.isPouncing() && JumpyBugEntity.this.getTarget() == null && super.canUse(); @@ -729,8 +571,7 @@ public class JumpyBugEntity extends Monster implements GeoEntity { @Override public boolean canContinueToUse() { - return !JumpyBugEntity.this.isLatched() - && !JumpyBugEntity.this.isClingingToCeiling() + return !JumpyBugEntity.this.isClingingToCeiling() && !JumpyBugEntity.this.isPouncing() && super.canContinueToUse(); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index 64ceb98f..9feaf00f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -30,6 +30,7 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class LurkingTerrorEntity extends Monster implements GeoEntity { private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FLY_ANIM = RawAnimation.begin().thenLoop("fly"); private static final RawAnimation ATTACK_LAND_ANIM = RawAnimation.begin().thenLoop("attackland"); private static final RawAnimation ATTACK_AIR_ANIM = RawAnimation.begin().thenLoop("attackair"); private static final byte ATTACK_ANIM_EVENT = 5; @@ -45,10 +46,10 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() .add(Attributes.MAX_HEALTH, AntarchySettings.lurkingTerrorHealth()) - .add(Attributes.MOVEMENT_SPEED, 0.25D) + .add(Attributes.MOVEMENT_SPEED, 0.35D) .add(Attributes.ATTACK_DAMAGE, AntarchySettings.lurkingTerrorAttackDamage()) .add(Attributes.FOLLOW_RANGE, 16.0D) - .add(Attributes.FLYING_SPEED, 0.4D); + .add(Attributes.FLYING_SPEED, 0.55D); } @Override @@ -84,7 +85,7 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { return state.setAndContinue(ATTACK_LAND_ANIM); } if (state.isMoving()) { - return state.setAndContinue(WALK_ANIM); + return state.setAndContinue(this.onGround() ? WALK_ANIM : FLY_ANIM); } return state.setAndContinue(IDLE_ANIM); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java index 4f0f88f4..ca60ec8b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/MissileSquidEntity.java @@ -62,6 +62,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { private static final String LAUNCH_OWNER_KEY = "LaunchOwner"; private static final String ARMED_AFTER_LANDING_KEY = "ArmedAfterLanding"; private static final String ACTION_ANIM_TICKS_KEY = "ActionAnimTicks"; + private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken"; private static final double AGGRO_SPEED = 0.5D; private static final double PATROL_SPEED = 0.28D; private static final double ATTACH_RANGE_SQR = 2.25D; @@ -86,6 +87,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { private int attachedTargetId = -1; private boolean launchedFromSquidzooka; private boolean armedAfterLanding; + private boolean spawnedByKraken; @Nullable private UUID launchOwnerUuid; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -298,6 +300,7 @@ public class MissileSquidEntity extends Monster implements GeoEntity { tag.putBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY, this.launchedFromSquidzooka); tag.putBoolean(ARMED_AFTER_LANDING_KEY, this.armedAfterLanding); tag.putInt(ACTION_ANIM_TICKS_KEY, this.actionAnimationTicks); + tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken); if (this.launchOwnerUuid != null) { tag.putUUID(LAUNCH_OWNER_KEY, this.launchOwnerUuid); } @@ -311,10 +314,19 @@ public class MissileSquidEntity extends Monster implements GeoEntity { this.launchedFromSquidzooka = tag.getBoolean(LAUNCHED_FROM_SQUIDZOOKA_KEY); this.armedAfterLanding = tag.getBoolean(ARMED_AFTER_LANDING_KEY); this.actionAnimationTicks = Math.max(0, tag.getInt(ACTION_ANIM_TICKS_KEY)); + this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY); this.launchOwnerUuid = tag.hasUUID(LAUNCH_OWNER_KEY) ? tag.getUUID(LAUNCH_OWNER_KEY) : null; this.updateAnimationState(); } + public boolean isSpawnedByKraken() { + return this.spawnedByKraken; + } + + public void setSpawnedByKraken(boolean spawnedByKraken) { + this.spawnedByKraken = spawnedByKraken; + } + private void tickAggroMovement(LivingEntity target) { this.patrolTarget = null; this.getLookControl().setLookAt(target, 30.0F, 30.0F); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java new file mode 100644 index 00000000..791186f4 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -0,0 +1,125 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.StinkyBehavior; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.entity.AgeableMob; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.goal.FloatGoal; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.WaterAvoidingRandomStrollGoal; +import net.minecraft.world.entity.animal.Animal; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.animation.AnimationController; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.PlayState; +import software.bernie.geckolib.animation.RawAnimation; +import software.bernie.geckolib.util.GeckoLibUtil; + +public class StinkBugEntity extends Animal implements GeoEntity { + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final int STINK_BURST_PARTICLES = 32; + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + public StinkBugEntity(EntityType entityType, Level level) { + super(entityType, level); + this.xpReward = 2; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 6.0D) + .add(Attributes.MOVEMENT_SPEED, 0.24D) + .add(Attributes.FOLLOW_RANGE, 8.0D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + return level.getDifficulty() != Difficulty.PEACEFUL + && Animal.checkAnimalSpawnRules(entityType, level, spawnReason, pos, random); + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(1, new WaterAvoidingRandomStrollGoal(this, 0.9D)); + this.goalSelector.addGoal(2, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(3, new RandomLookAroundGoal(this)); + } + + @Override + public void tick() { + super.tick(); + + if (this.level().isClientSide || this.tickCount % 10 != 0) { + return; + } + + for (var target : this.level().getEntitiesOfClass( + net.minecraft.world.entity.LivingEntity.class, + this.getBoundingBox().inflate(StinkyBehavior.STINK_BUG_AURA_RADIUS), + entity -> entity != this + && entity.isAlive() + && !entity.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS) + )) { + target.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), StinkyBehavior.STINKY_EFFECT_DURATION_TICKS, 0, false, true, true)); + } + } + + @Override + public boolean hurt(DamageSource source, float amount) { + boolean hurt = super.hurt(source, amount); + if (hurt) { + StinkyBehavior.emitBurst(this, STINK_BURST_PARTICLES); + } + return hurt; + } + + @Override + public boolean isFood(ItemStack stack) { + return false; + } + + @Override + @Nullable + public AgeableMob getBreedOffspring(ServerLevel level, AgeableMob otherParent) { + return AntarchyObjects.STINK_BUG.get().create(level); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 2, this::mainAnimController)); + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + private PlayState mainAnimController(AnimationState animationState) { + animationState.setAnimation(animationState.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.CONTINUE; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java index f0345c08..9c179dc9 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/WaterBombEntity.java @@ -12,6 +12,8 @@ import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.ThrowableProjectile; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseFireBlock; +import net.minecraft.world.level.block.CampfireBlock; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.material.Fluids; @@ -98,21 +100,32 @@ public class WaterBombEntity extends ThrowableProjectile { living.push(knockDir.x * knockback, 0.3D, knockDir.z * knockback); living.hurtMarked = true; } + living.clearFire(); } @Override protected void onHitBlock(BlockHitResult result) { - BlockPos hitPos = result.getBlockPos().relative(result.getDirection()); + BlockPos blockPos = result.getBlockPos(); + BlockPos hitPos = blockPos.relative(result.getDirection()); Level level = this.level(); + if (level.getBlockState(blockPos).getBlock() instanceof CampfireBlock campfire && level.getBlockState(blockPos).getValue(CampfireBlock.LIT)) { + level.setBlock(blockPos, level.getBlockState(blockPos).setValue(CampfireBlock.LIT, false), 3); + this.discard(); + return; + } if (this.isHuge()) { for (BlockPos pos : BlockPos.betweenClosed(hitPos.offset(-1, 0, -1), hitPos.offset(1, 0, 1))) { - if (level.isEmptyBlock(pos)) { + if (level.getBlockState(pos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(pos, false); + } else if (level.isEmptyBlock(pos)) { level.setBlock(pos, Blocks.WATER.defaultBlockState(), 3); level.scheduleTick(pos, Fluids.WATER, 2); } } } else { - if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { + if (level.getBlockState(hitPos).getBlock() instanceof BaseFireBlock) { + level.removeBlock(hitPos, false); + } else if (level.isEmptyBlock(hitPos) && level.getBlockState(hitPos.below()).isSolid()) { level.setBlock(hitPos, Blocks.WATER.defaultBlockState().setValue(LiquidBlock.LEVEL, 1), 3); level.scheduleTick(hitPos, Fluids.WATER, 2); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index b46c6853..90491c58 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -786,6 +786,7 @@ public class KrakenEntity extends Monster implements GeoEntity { } missileSquid.setCanFly(true); + missileSquid.setSpawnedByKraken(true); missileSquid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); serverLevel.addFreshEntity(missileSquid); if (launched) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java index 45d1a567..e907bdb1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/SquidzookaItem.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.client.model.ResourceBackedGeoItemModel; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; import java.util.function.Consumer; import java.util.function.Predicate; +import net.minecraft.core.component.DataComponents; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; @@ -21,7 +22,11 @@ import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ProjectileWeaponItem; import net.minecraft.world.item.UseAnim; +import net.minecraft.world.item.enchantment.Enchantments; +import net.minecraft.world.item.enchantment.ItemEnchantments; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.Vec2; +import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.client.GeoRenderProvider; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -55,17 +60,10 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { } if (!level.isClientSide()) { - MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level); - if (projectileSquid != null) { - projectileSquid.moveTo( - player.getX(), - player.getEyeY() - 0.2D, - player.getZ(), - player.getYRot(), - player.getXRot() - ); - projectileSquid.launchFromSquidzooka(player, (float) AntarchySettings.squidzookaLaunchVelocity()); - level.addFreshEntity(projectileSquid); + fireSquid(level, player, 0.0F); + if (hasMultishot(itemStack)) { + fireSquid(level, player, -10.0F); + fireSquid(level, player, 10.0F); } spawnFireParticles((ServerLevel) level, player); itemStack.hurtAndBreak(1, player, usedHand == InteractionHand.MAIN_HAND ? EquipmentSlot.MAINHAND : EquipmentSlot.OFFHAND); @@ -115,6 +113,16 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { projectile.shootFromRotation(livingEntity, livingEntity.getXRot(), livingEntity.getYRot(), angle, velocity, inaccuracy); } + @Override + public boolean isEnchantable(ItemStack stack) { + return stack.getCount() == 1; + } + + @Override + public int getEnchantmentValue() { + return 1; + } + @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { controllers.add(new AnimationController<>(this, FIRE_CONTROLLER, state -> PlayState.STOP) @@ -147,6 +155,32 @@ public class SquidzookaItem extends ProjectileWeaponItem implements GeoItem { triggerAnim(livingEntity, animatableId, FIRE_CONTROLLER, FIRE_ANIMATION); } + private static void fireSquid(Level level, Player player, float yawOffset) { + MissileSquidEntity projectileSquid = AntarchyObjects.MISSILE_SQUID.get().create(level); + if (projectileSquid == null) { + return; + } + + float yaw = player.getYRot() + yawOffset; + Vec3 direction = Vec3.directionFromRotation(new Vec2(player.getXRot(), yaw)); + projectileSquid.moveTo( + player.getX(), + player.getEyeY() - 0.2D, + player.getZ(), + yaw, + player.getXRot() + ); + projectileSquid.launchAsProjectile(player, direction.scale(AntarchySettings.squidzookaLaunchVelocity()).add(player.getDeltaMovement())); + level.addFreshEntity(projectileSquid); + } + + private static boolean hasMultishot(ItemStack stack) { + return stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY) + .keySet() + .stream() + .anyMatch(holder -> holder.is(Enchantments.MULTISHOT)); + } + private static void spawnFireParticles(ServerLevel level, Player player) { double lookX = player.getLookAngle().x; double lookY = player.getLookAngle().y; diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java b/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java new file mode 100644 index 00000000..99fd4fa0 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/AccessorRangedAttribute.java @@ -0,0 +1,18 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.world.entity.ai.attributes.RangedAttribute; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Mixin(RangedAttribute.class) +public interface AccessorRangedAttribute { + + @Accessor("minValue") + @Mutable + void antarchyAttributefix$setMinValue(double minValue); + + @Accessor("maxValue") + @Mutable + void antarchyAttributefix$setMaxValue(double maxValue); +} \ No newline at end of file diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java new file mode 100644 index 00000000..33d18b90 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/StinkyLivingEntityMixin.java @@ -0,0 +1,20 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.StinkyBehavior; +import net.minecraft.world.entity.LivingEntity; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LivingEntity.class) +public abstract class StinkyLivingEntityMixin { + @Inject(method = "tick", at = @At("TAIL")) + private void antarchy$tickStinkyTrail(CallbackInfo ci) { + LivingEntity livingEntity = (LivingEntity) (Object) this; + if (livingEntity.hasEffect(AntarchyObjects.STINKY_EFFECT.get())) { + StinkyBehavior.tickStinkyTrail(livingEntity); + } + } +} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index 3c4e6fa9..d2dbc9ae 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -4,17 +4,19 @@ "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", "compatibilityLevel": "JAVA_21", "mixins": [ + "AccessorRangedAttribute", "BloodglassMixin", - "DreamSandLowGravityMixin", "DreamFireBlockMixin", + "DreamSandLowGravityMixin", "FireVisualBaseFireBlockMixin", "FireVisualEntityMixin", "GlowVinesUnderLeavesMixin", - "multipart.EntityMultipartLifecycleMixin", "ServerPlayerGameModeMixin", + "StinkyLivingEntityMixin", "TorchflowerBlockStateMixin", "gravity.AbstractArrowGravityMixin", "gravity.BucketItemGravityMixin", + "gravity.ChunkMapAccessor", "gravity.CrossbowItemGravityMixin", "gravity.DirectionFacingMixin", "gravity.EntityCollisionContextMixin", @@ -27,31 +29,31 @@ "gravity.GroundPathNavigationMixin", "gravity.LivingEntityMixin", "gravity.MobHurtMixin", + "gravity.PathNavigationAccessor", + "gravity.PathNavigationDebugMixin", "gravity.PlayerAttackMixin", "gravity.PlayerGravityMixin", "gravity.PlayerPoseFitMixin", "gravity.PlayerSneakMixin", - "gravity.PathNavigationDebugMixin", - "gravity.PathNavigationAccessor", "gravity.ProjectileGravityMixin", + "gravity.ServerChunkCacheAccessor", + "gravity.ServerEntityAccessor", "gravity.ServerGamePacketListenerMixin", "gravity.ServerPlayerGravityMixin", "gravity.ThrowableProjectileGravityMixin", - "gravity.ChunkMapAccessor", - "gravity.ServerChunkCacheAccessor", - "gravity.ServerEntityAccessor", "gravity.TrackedEntityAccessor", + "multipart.EntityMultipartLifecycleMixin", "stellaris.DimensionOxygenManagerMixin" ], "client": [ + "client.ElythiaSkyMixin", "client.ElytraModelAccessor", "client.LightningBoltRendererMixin", "client.ParalyzedMouseTurnMixin", "client.ScreenEffectRendererFireVisualMixin", "client.SplashManagerMixin", - "client.WolfRendererGrimMixin", - "client.ElythiaSkyMixin", "client.ThoraxisFogMixin", + "client.WolfRendererGrimMixin", "gravity.client.CameraGravityMixin", "gravity.client.ClientPacketListenerGravityMixin", "gravity.client.EntityRenderDispatcherGravityMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 01241865..0a7dc29c 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -1,213 +1,117 @@ { "format_version": "1.8.0", "animations": { - "pose": { - "loop": true, - "bones": { - "Tentacle_1_Left": { - "rotation": { - "vector": [-30.4985, 19.4505, -51.4092] - }, - "position": { - "vector": [-2, 2, 0] - } - }, - "Tentacle_part_1_left": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "vector": [0, 0, 65] - }, - "position": { - "vector": [0, 4, 0] - } - }, - "Tentacle_1_Left2": { - "rotation": { - "vector": [-5.3981, 11.9127, -58.8139] - }, - "position": { - "vector": [0, 1.6, -3.4] - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [0, 4.2, 0] - } - }, - "Tentacle_1_Left3": { - "rotation": { - "vector": [12.2767, -21.7337, -37.5251] - }, - "position": { - "vector": [0, -1, -7] - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "vector": [0, 0, -80] - }, - "position": { - "vector": [-1, 2, 0] - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "vector": [0, 0, 72.5] - }, - "position": { - "vector": [1, 4, 0] - } - }, - "Tentacle_1_Left4": { - "rotation": { - "vector": [38.5673, -39.2521, -57.1302] - }, - "position": { - "vector": [-3, -3, -12] - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "vector": [0, 0, -72.5] - }, - "position": { - "vector": [-2, 2, 0] - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "vector": [0, 0, 75] - }, - "position": { - "vector": [1, 4, 0] - } - }, - "Tentacle_1_Right": { - "rotation": { - "vector": [-30.4985, -19.4505, 51.4092] - }, - "position": { - "vector": [2, 2, 0] - } - }, - "Tentacle_part_1_right": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "vector": [0, 0, -65] - }, - "position": { - "vector": [0, 4, 0] - } - }, - "Tentacle_1_Right2": { - "rotation": { - "vector": [-5.3981, -11.9127, 58.8139] - }, - "position": { - "vector": [0, 1.6, -3.4] - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "vector": [0, 0, 52.5] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "vector": [0, 0, -52.5] - }, - "position": { - "vector": [0, 4.2, 0] - } - }, - "Tentacle_1_Right3": { - "rotation": { - "vector": [12.2767, 21.7337, 37.5251] - }, - "position": { - "vector": [0, -1, -7] - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "vector": [0, 0, 80] - }, - "position": { - "vector": [1, 2, 0] - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "vector": [0, 0, -72.5] - }, - "position": { - "vector": [-1, 4, 0] - } - }, - "Tentacle_1_Right4": { - "rotation": { - "vector": [38.5673, 39.2521, 57.1302] - }, - "position": { - "vector": [3, -3, -12] - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "vector": [0, 0, 72.5] - }, - "position": { - "vector": [2, 2, 0] - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "vector": [0, 0, -75] - }, - "position": { - "vector": [-1, 4, 0] - } - } - } - }, "idle": { "loop": true, - "animation_length": 2.5, - "sound_effects": { - "0.0": { - "effect": "antarchy:kraken_flying_loop|0.45|1.0" - } - }, + "animation_length": 4, "bones": { - "bone": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { "rotation": { "0.0": { "post": { @@ -215,33 +119,19 @@ }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.0833": { "post": { - "vector": [0, 0, 0] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + }, + "3.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 7, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { + "4.0": { "post": { "vector": [0, 0, 0] }, @@ -249,787 +139,1376 @@ } } }, - "Tentacle_1_Left": { + "l_hand": { "rotation": { "0.0": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.972, 35.0689, -6.2022] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-37.4694, 63.0682, -47.9037] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-31.9019, 16.8589, -55.9098] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-45, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -20.16] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 45] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2, 1.9, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -44.3] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 47.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 25.1] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [1.4426, 29.9685, 2.8862] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-7.1228, 29.2189, -14.3587] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [-19.2127, 22.3844, -42.5154] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5833": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, 21.74] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, 32.78] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3.0505, -16.4853, -16.207] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5.0124, -9.0942, -22.6429] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.3538, 0.7361, -18.3913] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.7831, -0.0666, 47.4376] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.0877, -0.2452, 40.1682] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { "post": { "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "1.7917": { + "1.25": { "post": { - "vector": [0, 0, 33.47] + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, 2.0532, 6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [-4.33604, -2.0532, -6.91145] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, 45.05451, 3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, 52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, -2.38933, -19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, -3.35803, 20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, 52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, "2.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [26.56505, -52.23876, 39.23152] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [13.44102, -49.21053, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_back_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-85, -10, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-90, -15, -90] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-85, -10, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.9583": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0417": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.2083": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-2.61271, -47.32765, -14.82844] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2.49762, -45.05451, -3.53329] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-26.56505, -52.23876, -39.23152] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0833": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [2.37727, 2.38933, 19.24988] + }, + "lerp_mode": "catmullrom" + }, + "3.625": { + "post": { + "vector": [0.28409, 3.35803, -20.79138] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0.28, 3.36, -20.79] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { "post": { "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" } - }, - "position": { + } + }, + "center_tentacule_back": { + "rotation": { "0.0": { "post": { - "vector": [1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [1, 1.6, 0] + "vector": [90, 37.5, -90] }, "lerp_mode": "catmullrom" }, "2.5": { "post": { - "vector": [1, 2.6, 0] + "vector": [89.99992, 1.25, -89.99992] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [90, 37.5, -90] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left4": { + "center_tentacule_back2": { "rotation": { "0.0": { "post": { - "vector": [51.756, -12.0106, -86.2494] + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.125": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.875": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 214, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 254, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "death": { + "animation_length": 3, + "bones": { + "right_eye": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [12.6649, -51.6428, -21.5544] + "vector": [1, 0.9, 0.8] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [34.0517, -47.4021, -39.7338] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.5": { "post": { - "vector": [51.756, -12.0106, -86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] + "vector": [1, 0.9, 0.8] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.0": { "post": { - "vector": [-3, -3, -12] + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left4": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -65] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, 41.81] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.14] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.972, -35.0689, 6.2022] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-37.4694, -63.0682, 47.9037] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-31.9019, -16.8589, 55.9098] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 20.16] + "vector": [0, 0, -45] }, "lerp_mode": "catmullrom" }, @@ -1038,146 +1517,404 @@ "vector": [0, 0, -45] }, "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.2, 1.9, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "l_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 40] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 44.3] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -47.5] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [0, 0, -25.1] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_arm2": { "rotation": { "0.0": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.5": { "post": { - "vector": [1.4426, -29.9685, -2.8862] + "vector": [0, 0, -32.08] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-7.1228, -29.2189, 14.3587] + "vector": [0, 0, -32.08] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "2.0": { "post": { - "vector": [-19.2127, -22.3844, 42.5154] + "vector": [0, 0, -12.08] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.375": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -19.58] }, "lerp_mode": "catmullrom" }, - "2.5": { + "3.0": { "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -12.08] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 57.5] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-4.73087, -0.80647, -27.979] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-4.67998, 1.06319, -5.55576] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-4.42508, 1.85893, 4.41586] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.08] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 19.58] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 12.08] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { "post": { "vector": [0, 0, 15] }, @@ -1185,304 +1922,38 @@ }, "1.0": { "post": { - "vector": [0, 0, -25] + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "2.0": { "post": { - "vector": [0, 0, -21.74] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.375": { "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "1.7083": { + "3.0": { "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right2": { + "r_hand": { "rotation": { "0.0": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 0, -32.78] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7083": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1.3, 1, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [3.0505, 16.4853, 16.207] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [5.0124, 9.0942, 22.6429] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0.3538, -0.7361, 18.3913] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.7831, 0.0666, -47.4376] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0.0877, 0.2452, -40.1682] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { "post": { "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "1.7917": { - "post": { - "vector": [0, 0, -33.47] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [-1, 1.6, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2.6, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [12.6649, 51.6428, 21.5544] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.0517, 47.4021, 39.7338] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - }, "0.5": { "post": { "vector": [0, 0, 25] @@ -1491,2183 +1962,23 @@ }, "1.0": { "post": { - "vector": [0, 0, -37.5] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "1.7917": { - "post": { - "vector": [0, 0, -41.81] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.7917": { - "post": { - "vector": [-0.86, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.14] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "1.8333": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Swipe": { - "loop": "hold_on_last_frame", - "animation_length": 1.5, - "bones": { - "bone": { - "rotation": { - "0.0": { + "2.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-34.387, 6.9319, -69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-91.887, 6.9319, -69.6654] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0.4848, -62.5683, 25.0151] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-14.4729, -36.208, 16.5374] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.63, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [8.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [8.33, 15, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [23.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.33, 10, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.0104, -17.5, 0.003] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.01, 143.59, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [42.5, 0, -22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-44.6896, 0, -16.9359] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [45, 0, 19.55] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [34.3081, -4.2439, 40.5865] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [22.2694, -1.4146, 49.4325] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [35, 0, -15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-22.3771, 2.3004, -8.4118] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [31.8803, 6.6782, 11.6893] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [24.056, -2.6619, 33.1066] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [19.3379, -1.1346, 26.2811] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-16.717, 4.2814, -82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-56.717, 4.2814, -82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [20.0257, -49.8387, -16.1244] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-6.4668, -43.5968, 25.4296] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [65, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-31.9581, -7.9792, 5.0872] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [32.5, 0, 2.2] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [22.6478, -10.6998, 38.4965] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [23.8456, -3.5666, 35.4099] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, -28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-42.3853, 2.1984, -28.1145] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [25.2579, 11.253, -8.0809] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [17.3767, -13.6298, 65.8393] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [22.3568, -4.96, 46.4461] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0.61719, 3.98477, 0.70711] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [18.9012, 0.2882, -86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-16.0988, 0.2882, -86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [55.6218, -58.8306, -36.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [54.5769, -73.2357, -21.3745] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2647, -0.0241, -24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [45.2647, -0.0241, -24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-26.5249, 9.8299, -1.1177] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [29.5168, 12.0389, 10.1054] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [23.6314, -1.333, 42.9303] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [24.3473, -1.0661, 42.2036] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [30, 0, -13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-45.3023, 10.583, -40.596] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.2418, 12.9773, -42.7247] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [8.471, 3.6937, 25.096] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [20.2777, 0.7506, 32.2833] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.62802, 4.31086, 0.82571] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [52.0766, -6.9543, -86.6052] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [32.0766, -6.9543, -86.6052] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [155.5716, -28.3508, -115.3908] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [42.5, 0, -19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [33.9673, -15.7385, 22.0006] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [37.0773, 6.0681, 2.5067] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [23.1855, 1.2713, 40.7477] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, -22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-19.5169, 21.1528, 25.6157] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-39.8998, -14.6899, -41.6051] - }, - "lerp_mode": "catmullrom" - }, - "1.4167": { - "post": { - "vector": [11.1091, -2.8063, 28.3183] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-34.387, -6.9319, 69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1.887, -6.9319, 69.6654] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-28.8521, 2.4221, 65.9199] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-38.0082, -7.9924, 42.3701] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-27.5, 0, 22.95] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [10.5951, 2.844, -40.0347] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [16.5726, -11.6128, 30.036] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-32.5, 0, 15.22] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [5.8835, 19.3359, -38.2171] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [35.0705, 7.7922, 13.8451] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-16.717, -4.2814, 82.5286] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [8.283, -4.2814, 82.5286] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-27.8923, -5.38, 73.7252] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-27.5, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-0.362, -0.7761, -59.8325] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [2.5, 0, -2.2] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-12.5, 0, 28.11] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [15.3135, 23.3225, -18.2818] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [34.7658, 15.6999, 1.9348] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-0.61719, 3.98477, 0.70711] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [18.9012, -0.2882, 86.5243] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [46.4012, -0.2882, 86.5243] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [6.4185, 4.437, 77.6781] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2647, 0.0241, 24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-22.2353, 0.0241, 24.83] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-4.1109, -26.0011, -59.426] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-27.0398, -7.6047, -1.0063] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-20, 0, 13.26] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [20.8611, 24.5649, -27.6929] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [45.5761, -6.7071, 28.1123] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-1.62802, 4.31086, 0.82571] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [52.0766, 6.9543, 86.6052] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [92.0766, 6.9543, 86.6052] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [28.3776, 14.786, 80.268] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-32.5, 0, 19.53] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [-28.3319, -20.0094, -32.3747] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-37.5, 0, -10.47] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-17.5, 0, 22.88] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [1.7517, 22.0828, -41.7185] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [29.279, 14.6055, 4.1947] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -17.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 128.59, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, 135, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Death": { - "loop": "hold_on_last_frame", - "animation_length": 3, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 5.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 11.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 11.15, 9] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, -35.85, 9] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-18.1105, 30.4684, -22.4887] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-13.1217, 24.4444, -8.3184] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-13.1217, 24.4444, -8.3184] - }, - "lerp_mode": "catmullrom" }, "2.375": { "post": { - "vector": [-10.88, -52.86, -65.95] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, - "2.75": { - "post": { - "vector": [0.3142, -19.3642, -144.0989] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-15.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-15.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [6.87, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + "3.0": { "post": { "vector": [0, 0, 0] }, @@ -3675,6361 +1986,745 @@ } } }, - "cranium_2": { + "r_hand2": { "rotation": { "0.0": { "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-9.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-9.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [13.33, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-11.67, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-11.67, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [38.33, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-15.01, 0, 0] + "vector": [-4.34, -2.05, -6.91] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-15.01, 0, 0] + "vector": [-4.73087, 0.80647, 27.979] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-20.01, 0, 0] + "vector": [-4.73087, 0.80647, 27.979] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "2.0": { "post": { - "vector": [-20.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [57.49, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-65.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [49.35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [49.35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -7.95] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -12.95] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -12.95] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [5.379, -3.7668, 37.9263] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -42.95] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 39.78] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10.22] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -10.22] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 23.11] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -20.22] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-6.3156, 28.8772, -13.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [8.6844, -33.6228, -48.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [11.0451, -16.4772, -144.5351] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -12.8] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -17.8] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 29.7] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -37.8] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 44.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -15.61] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -15.61] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 81.89] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -28.11] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [4.5341, -18.3709, -9.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [38.5341, -58.3709, -59.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [21.9469, -4.3657, -125.2582] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2452, -0.1027, -7.33] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2593, -0.0585, -17.33] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0.2593, -0.0585, -17.33] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0.2593, -0.0585, 27.67] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0.2655, -0.0125, -27.33] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 36.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -23.26] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -23.26] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 51.74] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -38.26] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [17.1089, -50.3324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [17.1089, -62.8324, -23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [50.2054, -25.7109, -125.5789] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -2.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -14.53] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -14.53] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 20.47] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -47.03] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 69.62] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -20.38] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, -20.38] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, 27.12] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, -32.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-18.1105, -30.4684, 22.4887] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-13.1217, -24.4444, 8.3184] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-13.1217, -24.4444, 8.3184] + "vector": [-4.42508, -1.85893, -4.41586] }, "lerp_mode": "catmullrom" }, "2.375": { "post": { - "vector": [-10.88, 52.86, 65.95] + "vector": [-4.67998, -1.06319, 5.55576] }, "lerp_mode": "catmullrom" }, - "2.75": { + "3.0": { "post": { - "vector": [0.3142, 19.3642, 144.0989] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] + "vector": [-4.42508, -1.85893, -4.41586] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right": { + "r_hand_tip": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -52.05] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 7.95] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 12.95] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "1.3333": { + "2.0": { "post": { - "vector": [0, 0, 12.95] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, - "2.25": { + "2.375": { "post": { - "vector": [5.379, 3.7668, -37.9263] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, - "2.75": { + "3.0": { "post": { - "vector": [0, 0, 42.95] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "r_tentacule": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -22.28] + "vector": [-26.56505, 52.23876, 39.23152] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -39.78] + "vector": [-37.45372, 62.96598, 59.31794] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule5": { + "rotation": { + "0.0": { + "post": { + "vector": [0.28, -3.36, 20.79] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.00134, -3.21967, 8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, -3.06141, 0.76044] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_tentacule6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_back_tentacule": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, 49.21053, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.04258, 58.57824, -52.34365] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 10.22] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 10.22] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -23.11] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 20.22] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] + "vector": [34.04258, 58.57824, -52.34365] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_back_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [-20.47, -21.72, 45.38] + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-6.3156, -28.8772, 13.0398] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-6.3156, -28.8772, 13.0398] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-6.3156, -28.8772, 13.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [8.6844, 33.6228, 48.0398] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [11.0451, 16.4772, 144.5351] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "l_back_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -32.2] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 12.8] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 17.8] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -29.7] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 37.8] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -44.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 15.61] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 15.61] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -81.89] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 28.11] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [4.5341, 18.3709, 9.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [38.5341, 58.3709, 59.8058] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [21.9469, 4.3657, 125.2582] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.2452, 0.1027, 7.33] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.2593, 0.0585, 17.33] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0.2593, 0.0585, 17.33] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0.2593, 0.0585, -27.67] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0.2655, 0.0125, 27.33] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -36.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 23.26] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 23.26] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -51.74] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 38.26] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [17.1089, 50.3324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [17.1089, 62.8324, 23.7896] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [50.2054, 25.7109, 125.5789] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 2.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 14.53] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 14.53] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -20.47] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 47.03] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -69.62] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 20.38] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [0, 0, 20.38] - }, - "lerp_mode": "catmullrom" - }, - "2.25": { - "post": { - "vector": [0, 0, -27.12] - }, - "lerp_mode": "catmullrom" - }, - "2.75": { - "post": { - "vector": [0, 0, 32.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Hit": { - "loop": "hold_on_last_frame", - "animation_length": 1.1667, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [7.2195, -1.7113, -1.2114] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [7.2195, -1.7113, -1.2114] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 3.15, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 3.15, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.9167": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-16.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-16.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-39.42, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [4.37, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-3.79, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [13.33, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-4.17, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [20.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-10.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 0.4] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [0, 0, -1.6] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-45.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [34.35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.875": { - "post": { - "vector": [-24.95, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-26.5651, -14.4776, 25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-26.5651, -14.4776, 25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-20, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-20, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-12.4594, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [10.5473, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [10.5473, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-29.4527, 4.8627, -69.208] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-35, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-35, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-19.2707, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [43.0772, -23.9366, -75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [43.0772, -23.9366, -75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.6953, -12.2418, -54.0288] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-24.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-24.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [50.7096, -12.3788, 12.5062] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [20, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-32.1005, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [62.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [62.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.3229, -26.3671, -66.6121] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [37.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-15, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.5, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.7798, -0.3946, 54.6138] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-16.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-16.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-39.42, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-26.5651, 14.4776, -25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-26.5651, 14.4776, -25.4849] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [27.5, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-20, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-20, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-12.4594, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [10.5473, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [10.5473, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-29.4527, -4.8627, 69.208] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-35, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-35, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [17.5, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [22.5, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-19.2707, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [43.0772, 23.9366, 75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [43.0772, 23.9366, 75.9745] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [-15.6953, 12.2418, 54.0288] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-24.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-24.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [50.7096, 12.3788, -12.5062] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [20, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [-32.1005, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [62.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [62.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [23.3229, 26.3671, 66.6121] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-25, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-25, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [37.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-15, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { - "post": { - "vector": [-15, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.6667": { - "post": { - "vector": [12.5, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [1.7798, 0.3946, -54.6138] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.1667": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Attack": { - "loop": "hold_on_last_frame", - "animation_length": 2, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.51, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [2.26, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -0.00052, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0.12879, -0.99167] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, 54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-118.1977, -31.2126, 37.3757] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-12.0253, 12.8089, 68.4252] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.6145, -42.6621, -111.0226] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [43.8767, -58.8301, -144.2998] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-74.2354, -29.794, -21.0171] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.6196, 12.6219, 115.8661] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 72.2] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 54.39] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 104.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-30.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, -54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-118.1977, 31.2126, -37.3757] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-12.0253, -12.8089, -68.4252] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-6.6145, 42.6621, 111.0226] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [43.8767, 58.8301, 144.2998] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-86.4636, 33.1995, -2.147] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-8.6196, -12.6219, -115.8661] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -54.39] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -121.89] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "Grab": { - "loop": "hold_on_last_frame", - "animation_length": 2, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 3.15, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [24.9072, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [24.0533, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [24.9072, 17.0767, -41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, 15.17, -56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.63, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [5.83, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [7.49, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-7.51, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.7917": { - "post": { - "vector": [2.26, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-5.01, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.01, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, -0.00052, 3] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0.12879, -0.99167] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-5.65, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, 54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [9.9627, 0.8672, 49.6256] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [20.9749, -2.1054, 48.508] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [9.9627, 0.8672, 49.6256] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [22.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-26.0219, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [22.5, 0, 22.28] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-20.47, -75.78, -107.88] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-72.8595, -38.6597, -29.8465] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, 21.72, -45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -37.8] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -43.11] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, 74.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, -7.5254, -60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, -11.14, -50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, 11.0302, -21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, -0.25, 40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, 2.1109, 6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, -13.3032, -77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, -24.3, -71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, 47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, -7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, 42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, 2.2493, -10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, 42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-5.0928, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [24.9072, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [24.0533, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [24.9072, -17.0767, 41.388] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-31.92, -15.17, 56.88] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-17.5, 0, -54.55] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [9.9627, -0.8672, -49.6256] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [20.9749, 2.1054, -48.508] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [9.9627, -0.8672, -49.6256] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -52.05] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.5, 1.96, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-50, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [22.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-26.0219, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [22.5, 0, -22.28] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -22.28] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right2": { - "rotation": { - "0.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-20.47, 75.78, 107.88] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [-72.8595, 38.6597, 29.8465] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-20.47, -21.72, 45.38] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 37.8] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -69.7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -32.2] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.07, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 43.11] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [0, 0, -74.39] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -34.39] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.09, 1.93, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [20.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [29.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [34.4068, 7.5254, 60.0311] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [15.37, 11.14, 50.58] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-29.91, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [38.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [23.6128, -11.0302, 21.7116] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0.09, 0.25, -40.17] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.78, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -31.74] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-20.4663, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [19.5337, -2.1109, -6.8235] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -31.74] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2.33, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [60.48, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [57.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [62.5189, 13.3032, 77.9415] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [47.98, 24.3, 71.65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [3, -3, -12] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-22.5, 0, -47.97] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [30, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [20, 0, 7.03] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -47.97] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-0.83, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-25, 0, -42.12] - }, - "lerp_mode": "catmullrom" - }, - "0.625": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.6406, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.3594, -2.2493, 10.0365] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [0, 0, -42.12] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "2.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacles": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, "2.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "idle2": { - "loop": true, - "animation_length": 0.0083, - "bones": { - "bone": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left": { - "rotation": { - "0.0": { - "post": { - "vector": [-8.972, 35.0689, -6.2022] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-35.4398, 4.2669, -74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-2, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_2": { - "rotation": { - "0.0": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "cranium_3": { - "rotation": { - "0.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "mouth": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [22.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20.16] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -44.3] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 2.8, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left2": { - "rotation": { - "0.0": { - "post": { - "vector": [1.4426, 29.9685, 2.8862] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-22.2077, 20.7048, -49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left2": { - "rotation": { - "0.0": { "post": { "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "3.0": { "post": { - "vector": [0, 0, -57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] + "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left2": { + "l_back_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -60] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.3, 1, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1.3, 1, 0] + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left3": { + "l_back_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [3.0505, -16.4853, -16.207] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [20.8765, -13.7242, -65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] + "vector": [0, 0, -20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, -1, -7] + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left3": { + "l_back_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0.3538, 0.7361, -18.3913] + "vector": [0, 0, 30] }, "lerp_mode": "catmullrom" }, - "0.0083": { - "post": { - "vector": [0, 0, -55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [-1, 2, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left3": { - "rotation": { - "0.0": { + "0.5": { "post": { "vector": [0, 0, -27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 1.6, 0] + "vector": [0, 0, -27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [1, 2.6, 0] + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left4": { + "r_back_tentacule": { "rotation": { "0.0": { "post": { - "vector": [12.6649, -51.6428, -21.5544] + "vector": [20.94102, -49.21053, 30.36119] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [51.756, -12.0106, -86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-3, -3, -12] + "vector": [34.04258, -58.57824, 52.34365] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [-3, -3, -12] + "vector": [34.04258, -58.57824, 52.34365] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left4": { + "r_back_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -25] + "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 2, 0] + "vector": [0, 0, 35] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [-2, 2, 0] + "vector": [0, 0, 35] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left4": { + "r_back_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -37.14] + "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, -42.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 25] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 15] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right": { + "r_back_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [-8.972, -35.0689, 6.2022] + "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-35.4398, -4.2669, 74.9229] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2, 2, 0] + "vector": [0, 0, 30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [2, 2, 0] + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right": { + "r_back_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 20.16] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right": { + "r_back_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 44.3] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, 27.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "1.0": { "post": { - "vector": [0, 2.8, 0] + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "center_tentacule": { "rotation": { "0.0": { "post": { - "vector": [1.4426, -29.9685, -2.8862] + "vector": [-85, -10, -90] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-22.2077, -20.7048, 49.1065] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 1.6, -3.4] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, 1.6, -3.4] + "vector": [-88.86743, -49.96822, -94.19588] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right2": { + "center_tentacule2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule5": { "rotation": { "0.0": { "post": { @@ -10037,219 +2732,437 @@ }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 57.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [0, 0, -22.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right2": { + "center_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 60] + "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 60] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1.3, 1, 0] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [-1.3, 1, 0] + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right3": { + "l_tentacule": { "rotation": { "0.0": { "post": { - "vector": [3.0505, 16.4853, 16.207] + "vector": [-26.56505, -52.23876, -39.23152] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [20.8765, 13.7242, 65.1997] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -1, -7] - }, - "lerp_mode": "catmullrom" - }, - "0.0083": { - "post": { - "vector": [0, -1, -7] + "vector": [-37.45372, -62.96598, -59.31794] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right3": { + "l_tentacule2": { "rotation": { "0.0": { "post": { - "vector": [0.3538, -0.7361, 18.3913] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 55] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 2, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.375": { "post": { - "vector": [1, 2, 0] + "vector": [0, 0, -37.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right3": { + "l_tentacule3": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 27.5] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [0, 0, 32.5] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-1, 1.6, 0] + "vector": [0, 0, -30] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [-1, 2.6, 0] + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right4": { + "l_tentacule4": { "rotation": { "0.0": { "post": { - "vector": [12.6649, 51.6428, 21.5544] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [51.756, 12.0106, 86.2494] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3, -3, -12] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [3, -3, -12] + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_right4": { + "l_tentacule5": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 25] + "vector": [0.28, 3.36, -20.79] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [0, 0, 65] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1, 2, 0] + "vector": [1.41335, 3.06141, -0.76044] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.375": { "post": { - "vector": [2, 2, 0] + "vector": [1.00134, 3.21967, -8.27007] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1.41335, 3.06141, -0.76044] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_right4": { + "l_tentacule6": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 37.14] + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "2.0": { "post": { - "vector": [0, 0, 42.5] + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back": { + "rotation": { + "0.0": { + "post": { + "vector": [90, 37.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [90, 42.5, -90] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [90, 50, -90] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [90, 50, -90] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back5": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "center_tentacule_back6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [1.3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1.28919, 0.1664, -7.35346] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [1.2985, -0.05997, 2.64399] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1.3, 0, 0] }, "lerp_mode": "catmullrom" } @@ -10257,13 +3170,111 @@ "position": { "0.0": { "post": { - "vector": [-1, 2, 0] + "vector": [0, 218.48, 0] }, "lerp_mode": "catmullrom" }, - "0.0083": { + "0.5": { "post": { - "vector": [-1, 2, 0] + "vector": [0, 179.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 120.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 41.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -36.52, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -19.52, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1, 0.9, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 0.7, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } @@ -10271,783 +3282,1641 @@ } } }, - "swim": { + "swing_left": { "loop": true, - "animation_length": 1, - "sound_effects": { - "0.0": { - "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.0" - } - }, + "animation_length": 2, "bones": { - "bone": { - "rotation": { - "vector": [42.5, 0, 0] - } - }, - "Tentacle_1_Left": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [17.5366, 21.95, -21.3652] + "vector": [0, 0, -17.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.375": { "post": { - "vector": [26.7391, 11.3252, -6.8224] + "vector": [45.72113, 14.60559, -31.31465] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.8333": { "post": { - "vector": [27.4006, 8.1389, -2.9124] + "vector": [-63.96509, -9.93654, -27.61842] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [19.1774, 23.3701, -23.595] + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.4167": { "post": { - "vector": [17.5366, 21.95, -21.3652] + "vector": [22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -2.5] }, "lerp_mode": "catmullrom" } }, - "position": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "l_arm2": { + "rotation": { "0.0": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.4583": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [22.5, 0, 0.42] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [-3.06238, 17.96177, -14.99989] + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0.42] }, "lerp_mode": "catmullrom" } } }, - "cranium": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [-17.5628, -4.768, 1.507] + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-17.5628, 4.768, -1.507] + "vector": [27.5, 0, 5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [-17.5628, -4.768, 1.507] + "vector": [-40, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 5] }, "lerp_mode": "catmullrom" } } }, - "cranium_2": { + "l_arm4": { "rotation": { "0.0": { "post": { - "vector": [0, -12.5, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5417": { "post": { - "vector": [0, 12.5, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, -12.5, 0] + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "cranium_3": { + "l_hand": { "rotation": { "0.0": { "post": { - "vector": [0, -10, 0] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.5833": { "post": { - "vector": [0, 10, 0] + "vector": [20, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, -10, 0] + "vector": [-27.5, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" } } }, - "head": { + "l_hand2": { "rotation": { "0.0": { "post": { - "vector": [-35, 0, 0] + "vector": [-4.34, 2.05, 6.91] }, "lerp_mode": "catmullrom" }, - "0.5": { + "2.0": { "post": { - "vector": [-37.5, 0, 0] + "vector": [-4.34, 2.05, 6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.0": { "post": { - "vector": [-35, 0, 0] + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swing_right": { + "loop": true, + "animation_length": 2, + "bones": { + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [45.72113, -14.60559, 31.31465] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-63.96509, 9.93654, 27.61842] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [22.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [7.5, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 2.5] }, "lerp_mode": "catmullrom" } }, - "position": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.6667": { + "pre": { + "vector": [1, 1, 1] + }, + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "vector": [1, 1, 1] + } + } + }, + "r_arm2": { + "rotation": { "0.0": { "post": { - "vector": [0, 8.60365, -12.28728] + "vector": [0, 0, -0.42] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.4583": { "post": { - "vector": [0, 9.17341, -11.8885] + "vector": [22.5, 0, -0.42] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.8333": { "post": { - "vector": [0, 8.60365, -12.28728] + "vector": [-15, 0, -0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -0.42] }, "lerp_mode": "catmullrom" } } }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.5, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-40, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [20, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-27.5, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-4.34, -2.05, -6.91] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "grab": { + "animation_length": 3, + "bones": { + "l_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-38.70323, -17.28727, -18.81969] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [65.28208, 28.06275, -9.17543] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [65.28, 28.06, -9.18] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-64.46949, -11.31255, -22.85254] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-64.47, -11.31, -22.85] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [1, 1.2, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [55, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.5, 0, -2.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, -2.5] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-15, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [47.5, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-30, 0, 0.42] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-36.42321, 3.55705, 18.49778] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-35.81018, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [39.18982, 7.98198, 24.58578] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [39.19, 7.98, 24.59] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-25, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-10.59061, 6.6782, 31.88034] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-8.51814, 9.18229, 46.81472] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-8.52, 9.18, 46.81] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.81406, 8.27617, 59.61272] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-2.89833, 9.12028, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-2.9, 9.12, 72.23] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-4.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-14.60659, 14.2906, 71.92221] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [-14.61, 14.29, 71.92] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 62.5] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "cry": { + "animation_length": 3, + "bones": { "mouth": { "rotation": { "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { "post": { "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { - "post": { - "vector": [35, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { + "2.5": { "post": { "vector": [-27.5, 0, 0] }, "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" }, - "0.25": { + "3.0": { "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left": { + "jaw": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -32.5] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.5": { "post": { - "vector": [0, 0, -15] + "vector": [42.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left2": { + "l_shoulder": { "rotation": { "0.0": { "post": { - "vector": [55.0366, 21.95, -21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [56.7391, 11.3252, -6.8224] + "vector": [0, 0, -102.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [57.4006, 8.1389, -2.9124] + "vector": [0, 0, -55] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [56.6774, 23.3701, -23.595] + "vector": [0, 0, -102.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [55.0366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [3.48755, 15.39547, -10.20994] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left2": { + "l_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.2917": { "post": { - "vector": [0, 0, 12.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -17.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 37.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left2": { + "l_arm2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.375": { "post": { - "vector": [0, 0, 20] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -32.5] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, -15] + "vector": [0, 0, -35] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Left3": { + "l_arm3": { "rotation": { "0.0": { "post": { - "vector": [22.5366, 21.95, -21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.4583": { "post": { - "vector": [34.2391, 11.3252, -6.8224] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [34.9006, 8.1389, -2.9124] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [26.6774, 23.3701, -23.595] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [22.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [1.33386, 10.12204, -22.62896] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_part_1_left3": { + "l_arm4": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.5417": { "post": { - "vector": [0, 0, 20] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0417": { "post": { - "vector": [0, 0, -32.5] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "2.0": { "post": { - "vector": [0, 0, -15] + "vector": [0, 0, 22.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "3.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_hand_1_left3": { + "l_hand": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Left4": { - "rotation": { - "0.0": { - "post": { - "vector": [37.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [41.7391, 11.3252, -6.8224] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [44.9006, 8.1389, -2.9124] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [41.6774, 23.3701, -23.595] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [37.5366, 21.95, -21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_left4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, -32.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right": { - "rotation": { - "0.0": { - "post": { - "vector": [17.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [26.7391, -11.3252, 6.8224] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [27.4006, -8.1389, 2.9124] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [19.1774, -23.3701, 23.595] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [17.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [3.06238, 17.96177, -14.99989] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 17.5] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { + "0.625": { "post": { "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.0417": { "post": { - "vector": [0, 0, 15] + "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.0": { "post": { - "vector": [0, 0, -52.5] + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "Tentacle_1_Right2": { + "l_hand2": { "rotation": { "0.0": { "post": { - "vector": [55.0366, -21.95, 21.3652] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_shoulder": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [56.7391, -11.3252, 6.8224] + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 102.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_arm4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_hand_tip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Kraken": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [57.4006, -8.1389, 2.9124] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.7083": { "post": { - "vector": [56.6774, -23.3701, 23.595] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "2.5": { "post": { - "vector": [55.0366, -21.95, 21.3652] + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -11055,325 +4924,597 @@ "position": { "0.0": { "post": { - "vector": [-3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-3.48755, 15.39547, -10.20994] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -12.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 17.5] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [0, 0, -37.5] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.0417": { "post": { - "vector": [0, 0, -20] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0833": { "post": { - "vector": [0, 0, 32.5] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.125": { "post": { - "vector": [0, 0, 15] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.1667": { "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right3": { - "rotation": { - "0.0": { - "post": { - "vector": [22.5366, -21.95, 21.3652] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.2083": { "post": { - "vector": [34.2391, -11.3252, 6.8224] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.25": { "post": { - "vector": [34.9006, -8.1389, 2.9124] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.2917": { "post": { - "vector": [26.6774, -23.3701, 23.595] + "vector": [3, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.3333": { "post": { - "vector": [22.5366, -21.95, 21.3652] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.625": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [3, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } }, - "position": { + "scale": { "0.0": { "post": { - "vector": [-1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-1.33386, 10.12204, -22.62896] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 32.5] + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, "0.75": { "post": { - "vector": [0, 0, 15] + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.0417": { "post": { - "vector": [0, 0, -20] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0833": { "post": { - "vector": [0, 0, 32.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.125": { "post": { - "vector": [0, 0, 15] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.1667": { "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_1_Right4": { - "rotation": { - "0.0": { - "post": { - "vector": [37.5366, -21.95, 21.3652] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.2083": { "post": { - "vector": [41.7391, -11.3252, 6.8224] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.25": { "post": { - "vector": [44.9006, -8.1389, 2.9124] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.2917": { "post": { - "vector": [41.6774, -23.3701, 23.595] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.3333": { "post": { - "vector": [37.5366, -21.95, 21.3652] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-2.15186, 9.72533, -29.12308] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.375": { "post": { - "vector": [-2.15186, 9.72533, -29.12308] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.4167": { "post": { - "vector": [-2.15186, 9.72533, -29.12308] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_part_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.4583": { "post": { - "vector": [0, 0, -20] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.5": { "post": { - "vector": [0, 0, 32.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.5417": { "post": { - "vector": [0, 0, 15] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5833": { "post": { - "vector": [0, 0, -52.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Tentacle_hand_1_right4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -52.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.625": { "post": { - "vector": [0, 0, -20] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.6667": { "post": { - "vector": [0, 0, 32.5] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.7083": { "post": { - "vector": [0, 0, 15] + "vector": [1.1, 1.1, 1] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.75": { "post": { - "vector": [0, 0, -52.5] + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.875": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "1.9583": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.0833": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [1.1, 1.1, 1] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } @@ -11382,4 +5523,4 @@ } } } -} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json new file mode 100644 index 00000000..01241865 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json @@ -0,0 +1,11385 @@ +{ + "format_version": "1.8.0", + "animations": { + "pose": { + "loop": true, + "bones": { + "Tentacle_1_Left": { + "rotation": { + "vector": [-30.4985, 19.4505, -51.4092] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_part_1_left": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "vector": [0, 0, 65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Left2": { + "rotation": { + "vector": [-5.3981, 11.9127, -58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Left3": { + "rotation": { + "vector": [12.2767, -21.7337, -37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "vector": [0, 0, -80] + }, + "position": { + "vector": [-1, 2, 0] + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Left4": { + "rotation": { + "vector": [38.5673, -39.2521, -57.1302] + }, + "position": { + "vector": [-3, -3, -12] + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-2, 2, 0] + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "vector": [0, 0, 75] + }, + "position": { + "vector": [1, 4, 0] + } + }, + "Tentacle_1_Right": { + "rotation": { + "vector": [-30.4985, -19.4505, 51.4092] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_part_1_right": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "vector": [0, 0, -65] + }, + "position": { + "vector": [0, 4, 0] + } + }, + "Tentacle_1_Right2": { + "rotation": { + "vector": [-5.3981, -11.9127, 58.8139] + }, + "position": { + "vector": [0, 1.6, -3.4] + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "vector": [0, 0, 52.5] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "vector": [0, 0, -52.5] + }, + "position": { + "vector": [0, 4.2, 0] + } + }, + "Tentacle_1_Right3": { + "rotation": { + "vector": [12.2767, 21.7337, 37.5251] + }, + "position": { + "vector": [0, -1, -7] + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "vector": [0, 0, 80] + }, + "position": { + "vector": [1, 2, 0] + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "vector": [0, 0, -72.5] + }, + "position": { + "vector": [-1, 4, 0] + } + }, + "Tentacle_1_Right4": { + "rotation": { + "vector": [38.5673, 39.2521, 57.1302] + }, + "position": { + "vector": [3, -3, -12] + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "vector": [0, 0, 72.5] + }, + "position": { + "vector": [2, 2, 0] + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "vector": [0, 0, -75] + }, + "position": { + "vector": [-1, 4, 0] + } + } + } + }, + "idle": { + "loop": true, + "animation_length": 2.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_loop|0.45|1.0" + } + }, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 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" + }, + "0.5": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 7, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, 63.0682, -47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, 16.8589, -55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, 29.2189, -14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, 22.3844, -42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, -9.0942, -22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, -0.0666, 47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, -0.2452, 40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, -47.4021, -39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, 41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-37.4694, -63.0682, 47.9037] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-31.9019, -16.8589, 55.9098] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.2, 1.9, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -25.1] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1228, -29.2189, 14.3587] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-19.2127, -22.3844, 42.5154] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -21.74] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, -32.78] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5.0124, 9.0942, 22.6429] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.7831, 0.0666, -47.4376] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0.0877, 0.2452, -40.1682] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -33.47] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.0517, 47.4021, 39.7338] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, 0, -41.81] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [-0.86, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Swipe": { + "loop": "hold_on_last_frame", + "animation_length": 1.5, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-91.887, 6.9319, -69.6654] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.4848, -62.5683, 25.0151] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-14.4729, -36.208, 16.5374] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.63, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [8.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.33, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [23.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.33, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.0104, -17.5, 0.003] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.01, 143.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-44.6896, 0, -16.9359] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45, 0, 19.55] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [34.3081, -4.2439, 40.5865] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.2694, -1.4146, 49.4325] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 0, -15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-22.3771, 2.3004, -8.4118] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [31.8803, 6.6782, 11.6893] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [24.056, -2.6619, 33.1066] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [19.3379, -1.1346, 26.2811] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-56.717, 4.2814, -82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.0257, -49.8387, -16.1244] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-6.4668, -43.5968, 25.4296] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [65, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-31.9581, -7.9792, 5.0872] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [32.5, 0, 2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [22.6478, -10.6998, 38.4965] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.8456, -3.5666, 35.4099] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-42.3853, 2.1984, -28.1145] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [25.2579, 11.253, -8.0809] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [17.3767, -13.6298, 65.8393] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [22.3568, -4.96, 46.4461] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-16.0988, 0.2882, -86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [55.6218, -58.8306, -36.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [54.5769, -73.2357, -21.3745] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [45.2647, -0.0241, -24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-26.5249, 9.8299, -1.1177] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.5168, 12.0389, 10.1054] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [23.6314, -1.333, 42.9303] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [24.3473, -1.0661, 42.2036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [30, 0, -13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-45.3023, 10.583, -40.596] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.2418, 12.9773, -42.7247] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [8.471, 3.6937, 25.096] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [20.2777, 0.7506, 32.2833] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [32.0766, -6.9543, -86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [155.5716, -28.3508, -115.3908] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [42.5, 0, -19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [33.9673, -15.7385, 22.0006] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [37.0773, 6.0681, 2.5067] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [23.1855, 1.2713, 40.7477] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-19.5169, 21.1528, 25.6157] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-39.8998, -14.6899, -41.6051] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [11.1091, -2.8063, 28.3183] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-34.387, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1.887, -6.9319, 69.6654] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.8521, 2.4221, 65.9199] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-38.0082, -7.9924, 42.3701] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 22.95] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [10.5951, 2.844, -40.0347] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [16.5726, -11.6128, 30.036] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 15.22] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [5.8835, 19.3359, -38.2171] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [35.0705, 7.7922, 13.8451] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-16.717, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [8.283, -4.2814, 82.5286] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.8923, -5.38, 73.7252] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-27.5, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-0.362, -0.7761, -59.8325] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [2.5, 0, -2.2] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-12.5, 0, 28.11] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [15.3135, 23.3225, -18.2818] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [34.7658, 15.6999, 1.9348] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-0.61719, 3.98477, 0.70711] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [18.9012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [46.4012, -0.2882, 86.5243] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [6.4185, 4.437, 77.6781] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2647, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-22.2353, 0.0241, 24.83] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-4.1109, -26.0011, -59.426] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-27.0398, -7.6047, -1.0063] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-20, 0, 13.26] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [20.8611, 24.5649, -27.6929] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [45.5761, -6.7071, 28.1123] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-1.62802, 4.31086, 0.82571] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [52.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [92.0766, 6.9543, 86.6052] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [28.3776, 14.786, 80.268] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-32.5, 0, 19.53] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [-28.3319, -20.0094, -32.3747] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-37.5, 0, -10.47] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-17.5, 0, 22.88] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [1.7517, 22.0828, -41.7185] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [29.279, 14.6055, 4.1947] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -17.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 128.59, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 135, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Death": { + "loop": "hold_on_last_frame", + "animation_length": 3, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [-10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 5.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 11.15, 9] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -35.85, 9] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, 30.4684, -22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, 24.4444, -8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, -52.86, -65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, -19.3642, -144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-15.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [6.87, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-9.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-11.67, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [38.33, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-20.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [57.49, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-65.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [49.35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, -3.7668, 37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, 28.8772, -13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, -33.6228, -48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, -16.4772, -144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, -18.3709, -9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, -58.3709, -59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, -4.3657, -125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, -0.1027, -7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, -0.0585, -17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, -0.0585, 27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, -0.0125, -27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, -50.3324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, -62.8324, -23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, -25.7109, -125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, -20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-18.1105, -30.4684, 22.4887] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-13.1217, -24.4444, 8.3184] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [-10.88, 52.86, 65.95] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.3142, 19.3642, 144.0989] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.95] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 12.95] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5.379, 3.7668, -37.9263] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 42.95] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -39.78] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 10.22] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -23.11] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 20.22] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-6.3156, -28.8772, 13.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [8.6844, 33.6228, 48.0398] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [11.0451, 16.4772, 144.5351] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 12.8] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 17.8] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -29.7] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -44.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 15.61] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -81.89] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 28.11] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [4.5341, 18.3709, 9.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [38.5341, 58.3709, 59.8058] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [21.9469, 4.3657, 125.2582] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.2452, 0.1027, 7.33] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0.2593, 0.0585, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0.2593, 0.0585, -27.67] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0.2655, 0.0125, 27.33] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -36.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 23.26] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -51.74] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 38.26] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [17.1089, 50.3324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [17.1089, 62.8324, 23.7896] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [50.2054, 25.7109, 125.5789] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 2.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 14.53] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -20.47] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 47.03] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -69.62] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [0, 0, 20.38] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -27.12] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 32.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Hit": { + "loop": "hold_on_last_frame", + "animation_length": 1.1667, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [7.2195, -1.7113, -1.2114] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 3.15, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [4.37, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-3.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [13.33, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-4.17, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [20.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-10.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 0.4] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -1.6] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-45.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [34.35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [-24.95, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, -14.4776, 25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, 4.8627, -69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, -23.9366, -75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, -12.2418, -54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, -12.3788, 12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, -26.3671, -66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, -0.3946, 54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-16.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-39.42, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-26.5651, 14.4776, -25.4849] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [27.5, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-20, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-12.4594, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [10.5473, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-29.4527, -4.8627, 69.208] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-35, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [17.5, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [22.5, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-19.2707, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [43.0772, 23.9366, 75.9745] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-15.6953, 12.2418, 54.0288] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-24.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [50.7096, 12.3788, -12.5062] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [20, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [-32.1005, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [62.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [23.3229, 26.3671, 66.6121] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-25, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [37.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-15, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [12.5, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [1.7798, 0.3946, -54.6138] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Attack": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, -31.2126, 37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, 12.8089, 68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, -42.6621, -111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, -58.8301, -144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-74.2354, -29.794, -21.0171] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, 12.6219, 115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 72.2] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 104.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-118.1977, 31.2126, -37.3757] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-12.0253, -12.8089, -68.4252] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-6.6145, 42.6621, 111.0226] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [43.8767, 58.8301, 144.2998] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-86.4636, 33.1995, -2.147] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-8.6196, -12.6219, -115.8661] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -54.39] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -121.89] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "Grab": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 3.15, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, 17.0767, -41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, 15.17, -56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.63, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5.83, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.49, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.51, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.26, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-5.01, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.01, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -0.00052, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0.12879, -0.99167] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-5.65, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, 54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, -2.1054, 48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, 0.8672, 49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, 22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, -75.78, -107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, -38.6597, -29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, 21.72, -45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, -7.5254, -60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, -11.14, -50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, 11.0302, -21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, -0.25, 40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, 2.1109, 6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, -13.3032, -77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, -24.3, -71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, 47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, -7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, 42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, 2.2493, -10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.0928, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [24.0533, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [24.9072, -17.0767, 41.388] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-31.92, -15.17, 56.88] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5, 0, -54.55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [20.9749, 2.1054, -48.508] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9627, -0.8672, -49.6256] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -52.05] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.5, 1.96, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-50, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-26.0219, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5, 0, -22.28] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -22.28] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.47, 75.78, 107.88] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-72.8595, 38.6597, 29.8465] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-20.47, -21.72, 45.38] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 37.8] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -69.7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -32.2] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.07, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 43.11] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -74.39] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -34.39] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.09, 1.93, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [29.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [34.4068, 7.5254, 60.0311] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [15.37, 11.14, 50.58] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-29.91, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [38.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [23.6128, -11.0302, 21.7116] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.09, 0.25, -40.17] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.78, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -31.74] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20.4663, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [19.5337, -2.1109, -6.8235] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -31.74] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2.33, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [60.48, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [57.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [62.5189, 13.3032, 77.9415] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [47.98, 24.3, 71.65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-22.5, 0, -47.97] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [30, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [20, 0, 7.03] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -47.97] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-0.83, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-25, 0, -42.12] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-7.6406, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.3594, -2.2493, 10.0365] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -42.12] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacles": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "idle2": { + "loop": true, + "animation_length": 0.0083, + "bones": { + "bone": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, 35.0689, -6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, 4.2669, -74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [22.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, 29.9685, 2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, 20.7048, -49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, -16.4853, -16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, -13.7242, -65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, 0.7361, -18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, -51.6428, -21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, -12.0106, -86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [-8.972, -35.0689, 6.2022] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-35.4398, -4.2669, 74.9229] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 20.16] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 44.3] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 40] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 2.8, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [1.4426, -29.9685, -2.8862] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-22.2077, -20.7048, 49.1065] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 1.6, -3.4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 60] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1.3, 1, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [3.0505, 16.4853, 16.207] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [20.8765, 13.7242, 65.1997] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, -1, -7] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0.3538, -0.7361, 18.3913] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 1.6, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2.6, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [12.6649, 51.6428, 21.5544] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [51.756, 12.0106, 86.2494] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [3, -3, -12] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [2, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.14] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0083": { + "post": { + "vector": [-1, 2, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "swim": { + "loop": true, + "animation_length": 1, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.0" + } + }, + "bones": { + "bone": { + "rotation": { + "vector": [42.5, 0, 0] + } + }, + "Tentacle_1_Left": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-17.5628, 4.768, -1.507] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-17.5628, -4.768, 1.507] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -12.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "cranium_3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 9.17341, -11.8885] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 8.60365, -12.28728] + }, + "lerp_mode": "catmullrom" + } + } + }, + "mouth": { + "rotation": { + "0.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Left4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, 11.3252, -6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, 8.1389, -2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, 23.3701, -23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, 21.95, -21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_left4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [26.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [27.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [19.1774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [17.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [3.06238, 17.96177, -14.99989] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right2": { + "rotation": { + "0.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [56.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [57.4006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [56.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [55.0366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-3.48755, 15.39547, -10.20994] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right3": { + "rotation": { + "0.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [34.2391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [34.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [26.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [22.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-1.33386, 10.12204, -22.62896] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right3": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_1_Right4": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [41.7391, -11.3252, 6.8224] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [44.9006, -8.1389, 2.9124] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [41.6774, -23.3701, 23.595] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [37.5366, -21.95, 21.3652] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-2.15186, 9.72533, -29.12308] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_part_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Tentacle_hand_1_right4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} diff --git a/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json new file mode 100644 index 00000000..fb501241 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/spit_bug.animation.json @@ -0,0 +1,2264 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2.25, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-0.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -15, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, 55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [0, -55, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-35, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.25": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.6667, + "bones": { + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-14.7966, -19.965, 19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-12.2252, -29.0774, 13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [13.6745, 58.6061, 23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0.9, 25.37, 22.42] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-4.9811, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [5.0189, -0.4352, -4.9811] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [4.9196, -1.0858, 2.4914] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [4.8066, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-5.1934, -1.5099, 7.4746] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [6, -15.47, -4] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [6, -13.8, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [4, -11.81, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -12.1, 8] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-6, -14.96, 4] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6, -14.55, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [-6, -12.99, -6] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -13.1, -4] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-36.5714, -35.9552, 34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-23.5556, -44.8303, 14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [5.1528, -57.991, 18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 30, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -30, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.3498, 1.8604, -13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [35, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -50, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, -70, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [35, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-5.3498, -1.8604, 13.9961] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-52.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-62.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.87, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [55, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-36.5714, 35.9552, -34.1778] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-23.5556, 44.8303, -14.2689] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [5.1528, 57.991, -18.9213] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.2252, 29.0774, -13.585] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [13.6745, -58.6061, -23.203] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.9, -25.37, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [-14.7966, 19.965, -19.6746] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spit": { + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [2.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.25": { + "post": { + "vector": [0, 1, 2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, 29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, 25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, -20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -11.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, -29.2189, 14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftEye": { + "rotation": { + "0.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-25, -25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftGrip": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 20, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, -0.9366, -25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, 17.5, -5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 17.5, -5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "rightClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftAntenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -60, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftArm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-25.3744, 0.9366, 25.6212] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [41.8878, -17.5, 5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -17.5, 5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftElbow": { + "rotation": { + "0.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-60, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "leftClaw": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [59.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -1] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.1226, 29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftThigh": { + "rotation": { + "0.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.1226, -29.2189, -14.3589] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftKnee": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftFoot": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json new file mode 100644 index 00000000..064d2985 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json @@ -0,0 +1,611 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 2.5, + "bones": { + "body": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "middleLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "middleRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1, + "bones": { + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, -5, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [9.9108, -44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.9108, 44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 18.36] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9108, -44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "middleLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-9.9108, 44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 18.36] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [9.9108, -44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backLeftLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.9108, 44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 18.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.9108, -44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.9108, 44.4038, -14.137] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "frontRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.9108, -44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -18.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.9108, 44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-9.9108, -44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "middleRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -18.36] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.9108, 44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-9.9108, -44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -18.36] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "backRightLeg": { + "rotation": { + "0.0": { + "post": { + "vector": [9.9108, 44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-9.9108, -44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -18.36] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [9.9108, 44.4038, 14.137] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.75, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json b/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json new file mode 100644 index 00000000..c265ce00 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_lichen.json @@ -0,0 +1,150 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen" + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 180 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "y": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 270 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_lichen", + "uvlock": true, + "x": 90 + }, + "when": { + "down": "false", + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json new file mode 100644 index 00000000..7e867f05 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_block.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/amber_moss_block" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json new file mode 100644 index 00000000..e059b29b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/amber_moss_carpet.json @@ -0,0 +1,154 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "true" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "north": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small" + }, + "when": { + "north": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall" + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 90 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 180 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "tall" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_small", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "low" + } + }, + { + "apply": { + "model": "antarchy:block/amber_moss_carpet_side_tall", + "uvlock": true, + "y": 270 + }, + "when": { + "bottom": "false", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json b/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json new file mode 100644 index 00000000..651df798 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/chiten_block.json @@ -0,0 +1,16 @@ +{ + "variants": { + "axis=x": { + "model": "antarchy:block/chiten_block", + "x": 90, + "y": 90 + }, + "axis=y": { + "model": "antarchy:block/chiten_block" + }, + "axis=z": { + "model": "antarchy:block/chiten_block", + "x": 90 + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/creepvine.json b/common/src/main/resources/assets/antarchy/blockstates/creepvine.json new file mode 100644 index 00000000..630f81c1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/creepvine.json @@ -0,0 +1,120 @@ +{ + "multipart": [ + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "north": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine" + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 90 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "south": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 180 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "west": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "y": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "up": "true" + } + }, + { + "apply": { + "model": "antarchy:block/creepvine", + "uvlock": true, + "x": 270 + }, + "when": { + "east": "false", + "north": "false", + "south": "false", + "up": "false", + "west": "false" + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/myrmite.json b/common/src/main/resources/assets/antarchy/blockstates/myrmite.json new file mode 100644 index 00000000..55bfe4a1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/myrmite.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/myrmite" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json index 5d60c348..eba7b341 100644 --- a/common/src/main/resources/assets/antarchy/geo/kraken.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/kraken.geo.json @@ -4,312 +4,491 @@ { "description": { "identifier": "geometry.unknown", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 8, - "visible_bounds_height": 7, - "visible_bounds_offset": [0, 1.5, 0] + "texture_width": 1024, + "texture_height": 1024, + "visible_bounds_width": 15, + "visible_bounds_height": 34, + "visible_bounds_offset": [0, 0, 0] }, "bones": [ { - "name": "bone", - "pivot": [0, 46.50635, 20.87778] + "name": "Kraken", + "pivot": [0, 51, -8] }, { "name": "head", - "parent": "bone", - "pivot": [0, 48.23333, 11.63333], + "parent": "Kraken", + "pivot": [0, 51, -8], "cubes": [ - {"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]}, - {"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]}, - {"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]}, - {"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]}, - {"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]}, - {"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]}, - {"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true}, - {"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true}, - {"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true}, - {"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]}, - {"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]}, - {"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]} + {"origin": [-46.5, 57, -57], "size": [93, 32, 32], "uv": [286, 184]}, + {"origin": [-33, 51, -49], "size": [66, 35, 77], "uv": [0, 184]} ] }, { "name": "mouth", "parent": "head", - "pivot": [0, 35.1, -6], + "pivot": [0, 51, -23.9], "cubes": [ - {"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, - {"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]} + {"origin": [-6.5, 20, -44.4], "size": [13, 33, 24], "uv": [169, 296]} ] }, { - "name": "cranium", + "name": "jaw", + "parent": "mouth", + "pivot": [0, 51, -22.4], + "cubes": [ + {"origin": [-6.5, 22, -22.4], "size": [13, 31, 16], "inflate": -0.1, "uv": [340, 0]}, + {"origin": [-5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6]}, + {"origin": [5.5, 22, -29.65], "size": [0, 31, 8], "inflate": -0.1, "uv": [323, -6], "mirror": true} + ] + }, + { + "name": "head_top", "parent": "head", - "pivot": [0, 47.5, 12], + "pivot": [0, 79.25, -6.25], "cubes": [ - {"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]}, - {"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]}, - {"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true} + {"origin": [-42.5, 79, -49], "size": [85, 99, 85], "uv": [0, 0]}, + {"origin": [5.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0]}, + {"origin": [-108.5, 79, 13], "size": [103, 172, 0], "uv": [399, 0], "mirror": true}, + {"origin": [-24, 172, -30], "size": [48, 48, 48], "uv": [286, 248]} ] }, { - "name": "cranium_2", - "parent": "cranium", - "pivot": [0, 53.55, 32.5], + "name": "right_eye", + "parent": "head", + "pivot": [-53, 73, -41], "cubes": [ - {"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]} + {"origin": [-59.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296]} ] }, { - "name": "cranium_3", - "parent": "cranium_2", - "pivot": [0, 49.1, 41.5], + "name": "left_eye", + "parent": "head", + "pivot": [53, 73, -41], "cubes": [ - {"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]} + {"origin": [46.5, 58, -56], "size": [13, 30, 30], "uv": [0, 296], "mirror": true} ] }, { - "name": "Tentacles", - "parent": "bone", - "pivot": [0, 45.64286, 8.5] - }, - { - "name": "Tentacles_Left", - "parent": "Tentacles", - "pivot": [6.78571, 45.64286, 25.5] - }, - { - "name": "Tentacle_1_Left", - "parent": "Tentacles_Left", - "pivot": [6.78571, 38.64286, 1.5], + "name": "l_shoulder", + "parent": "head", + "pivot": [31.1875, 61.375, -12.5], "cubes": [ - {"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, 14, -29], "size": [17, 47, 33], "uv": [0, 356]} ] }, { - "name": "Tentacle_part_1_left", - "parent": "Tentacle_1_Left", - "pivot": [6.9, 11, 1.5], + "name": "l_arm", + "parent": "l_shoulder", + "pivot": [30.85714, 13.92857, -12.5], "cubes": [ - {"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -34, -26], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_hand_1_left", - "parent": "Tentacle_part_1_left", - "pivot": [5, -21, -1], + "name": "l_arm2", + "parent": "l_arm", + "pivot": [30.66667, -34.00833, -12.5], "cubes": [ - {"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [25, -82, -23], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_1_Left2", - "parent": "Tentacles_Left", - "pivot": [6.78571, 39.64286, 9.5], + "name": "l_arm3", + "parent": "l_arm2", + "pivot": [30.4, -82, -12.5], "cubes": [ - {"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, -130, -23], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacle_part_1_left2", - "parent": "Tentacle_1_Left2", - "pivot": [6.9, 12, 9.5], + "name": "l_arm4", + "parent": "l_arm3", + "pivot": [30, -129.975, -12.5], "cubes": [ - {"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -178, -21], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_hand_1_left2", - "parent": "Tentacle_part_1_left2", - "pivot": [5, -20, 7], + "name": "l_hand", + "parent": "l_arm4", + "pivot": [29.66667, -177.99167, -12.5], "cubes": [ - {"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [25, -203, -19], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_1_Left3", - "parent": "Tentacles_Left", - "pivot": [6.78571, 41.64286, 17.5], + "name": "l_hand2", + "parent": "l_hand", + "pivot": [29.75, -203, -12.5], "cubes": [ - {"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [25, -244, -33], "size": [11, 41, 41], "uv": [310, 409]} ] }, { - "name": "Tentacle_part_1_left3", - "parent": "Tentacle_1_Left3", - "pivot": [6.9, 14, 17.5], + "name": "l_hand_tip", + "parent": "l_hand2", + "pivot": [29, -244, -12.5], "cubes": [ - {"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [25, -265, -26], "size": [8, 21, 27], "uv": [172, 468]} ] }, { - "name": "Tentacle_hand_1_left3", - "parent": "Tentacle_part_1_left3", - "pivot": [5, -18, 15], + "name": "center_tentacule", + "parent": "head", + "pivot": [0, 58.375, -52.5], + "rotation": [0, 90, 0], "cubes": [ - {"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [-6.1875, 11, -69], "size": [17, 47, 33], "uv": [0, 436]} ] }, { - "name": "Tentacle_1_Left4", - "parent": "Tentacles_Left", - "pivot": [6.78571, 43.64286, 25.5], + "name": "center_tentacule2", + "parent": "center_tentacule", + "pivot": [1.48214, 10.92857, -52.5], "cubes": [ - {"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]}, - {"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]} + {"origin": [-6.1875, -37, -66], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_left4", - "parent": "Tentacle_1_Left4", - "pivot": [6.9, 16, 25.5], + "name": "center_tentacule3", + "parent": "center_tentacule2", + "pivot": [1.29167, -37.00833, -52.5], "cubes": [ - {"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]}, - {"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]} + {"origin": [-6.1875, -85, -63], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_left4", - "parent": "Tentacle_part_1_left4", - "pivot": [5, -16, 23], + "name": "center_tentacule4", + "parent": "center_tentacule3", + "pivot": [1.025, -85, -52.5], "cubes": [ - {"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]}, - {"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]}, - {"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]} + {"origin": [-6.1875, -133, -63], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacles_Right", - "parent": "Tentacles", - "pivot": [-6.78571, 45.64286, 25.5] - }, - { - "name": "Tentacle_1_Right", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 38.64286, 1.5], + "name": "center_tentacule5", + "parent": "center_tentacule4", + "pivot": [-0.375, -132.975, -52.5], "cubes": [ - {"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -181, -61], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_part_1_right", - "parent": "Tentacle_1_Right", - "pivot": [-6.9, 11, 1.5], + "name": "center_tentacule6", + "parent": "center_tentacule5", + "pivot": [-0.70833, -180.99167, -52.5], "cubes": [ - {"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -206, -59], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_hand_1_right", - "parent": "Tentacle_part_1_right", - "pivot": [-5, -21, -1], + "name": "center_tentacule_back", + "parent": "head", + "pivot": [0, 58.375, 24.5], + "rotation": [0, -90, 0], "cubes": [ - {"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [-6.1875, 11, 8], "size": [17, 47, 33], "uv": [0, 436]} ] }, { - "name": "Tentacle_1_Right2", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 39.64286, 9.5], + "name": "center_tentacule_back2", + "parent": "center_tentacule_back", + "pivot": [1.48214, 10.92857, 24.5], "cubes": [ - {"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -37, 11], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_right2", - "parent": "Tentacle_1_Right2", - "pivot": [-6.9, 12, 9.5], + "name": "center_tentacule_back3", + "parent": "center_tentacule_back2", + "pivot": [1.29167, -37.00833, 24.5], "cubes": [ - {"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -85, 14], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_right2", - "parent": "Tentacle_part_1_right2", - "pivot": [-5, -20, 7], + "name": "center_tentacule_back4", + "parent": "center_tentacule_back3", + "pivot": [1.025, -85, 24.5], "cubes": [ - {"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [-6.1875, -133, 14], "size": [14, 48, 21], "uv": [170, 371]} ] }, { - "name": "Tentacle_1_Right3", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 41.64286, 17.5], + "name": "center_tentacule_back5", + "parent": "center_tentacule_back4", + "pivot": [-0.375, -132.975, 24.5], "cubes": [ - {"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [-6.1875, -181, 16], "size": [12, 48, 17], "uv": [243, 330]} ] }, { - "name": "Tentacle_part_1_right3", - "parent": "Tentacle_1_Right3", - "pivot": [-6.9, 14, 17.5], + "name": "center_tentacule_back6", + "parent": "center_tentacule_back5", + "pivot": [-0.70833, -180.99167, 24.5], "cubes": [ - {"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [-6.1875, -206, 18], "size": [9, 25, 13], "uv": [242, 398]} ] }, { - "name": "Tentacle_hand_1_right3", - "parent": "Tentacle_part_1_right3", - "pivot": [-5, -18, 15], + "name": "l_back_tentacule", + "parent": "head", + "pivot": [22.1875, 58.375, 14.5], + "rotation": [0, -90, 0], "cubes": [ - {"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [16, 11, -2], "size": [17, 47, 33], "uv": [0, 356]} ] }, { - "name": "Tentacle_1_Right4", - "parent": "Tentacles_Right", - "pivot": [-6.78571, 43.64286, 25.5], + "name": "l_back_tentacule2", + "parent": "l_back_tentacule", + "pivot": [21.85714, 10.92857, 14.5], "cubes": [ - {"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, - {"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + {"origin": [16, -37, 1], "size": [14, 48, 27], "uv": [86, 296]} ] }, { - "name": "Tentacle_part_1_right4", - "parent": "Tentacle_1_Right4", - "pivot": [-6.9, 16, 25.5], + "name": "l_back_tentacule3", + "parent": "l_back_tentacule2", + "pivot": [21.66667, -37.00833, 14.5], "cubes": [ - {"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, - {"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + {"origin": [16, -85, 4], "size": [14, 48, 21], "uv": [100, 371]} ] }, { - "name": "Tentacle_hand_1_right4", - "parent": "Tentacle_part_1_right4", - "pivot": [-5, -16, 23], + "name": "l_back_tentacule4", + "parent": "l_back_tentacule3", + "pivot": [21.4, -85, 14.5], "cubes": [ - {"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, - {"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, - {"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + {"origin": [16, -133, 4], "size": [14, 48, 21], "uv": [170, 371]} + ] + }, + { + "name": "l_back_tentacule5", + "parent": "l_back_tentacule4", + "pivot": [21, -132.975, 14.5], + "cubes": [ + {"origin": [16, -181, 6], "size": [12, 48, 17], "uv": [243, 330]} + ] + }, + { + "name": "l_back_tentacule6", + "parent": "l_back_tentacule5", + "pivot": [20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [16, -206, 8], "size": [9, 25, 13], "uv": [242, 398]} + ] + }, + { + "name": "r_back_tentacule", + "parent": "head", + "pivot": [-22.1875, 58.375, 14.5], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [-33, 11, -2], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_back_tentacule2", + "parent": "r_back_tentacule", + "pivot": [-21.85714, 10.92857, 14.5], + "cubes": [ + {"origin": [-30, -37, 1], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_back_tentacule3", + "parent": "r_back_tentacule2", + "pivot": [-21.66667, -37.00833, 14.5], + "cubes": [ + {"origin": [-30, -85, 4], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule4", + "parent": "r_back_tentacule3", + "pivot": [-21.4, -85, 14.5], + "cubes": [ + {"origin": [-30, -133, 4], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_back_tentacule5", + "parent": "r_back_tentacule4", + "pivot": [-21, -132.975, 14.5], + "cubes": [ + {"origin": [-28, -181, 6], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_back_tentacule6", + "parent": "r_back_tentacule5", + "pivot": [-20.66667, -180.99167, 14.5], + "cubes": [ + {"origin": [-25, -206, 8], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_tentacule", + "parent": "head", + "pivot": [-28.1875, 58.375, -42.5], + "rotation": [0, -90, 0], + "cubes": [ + {"origin": [-39, 11, -59], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_tentacule2", + "parent": "r_tentacule", + "pivot": [-27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [-36, -37, -56], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_tentacule3", + "parent": "r_tentacule2", + "pivot": [-27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [-36, -85, -53], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule4", + "parent": "r_tentacule3", + "pivot": [-27.4, -85, -42.5], + "cubes": [ + {"origin": [-36, -133, -53], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_tentacule5", + "parent": "r_tentacule4", + "pivot": [-27, -132.975, -42.5], + "cubes": [ + {"origin": [-34, -181, -51], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_tentacule6", + "parent": "r_tentacule5", + "pivot": [-26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [-31, -206, -49], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "l_tentacule", + "parent": "head", + "pivot": [28.1875, 58.375, -42.5], + "rotation": [0, 90, 0], + "cubes": [ + {"origin": [22, 11, -59], "size": [17, 47, 33], "uv": [0, 356]} + ] + }, + { + "name": "l_tentacule2", + "parent": "l_tentacule", + "pivot": [27.85714, 10.92857, -42.5], + "cubes": [ + {"origin": [22, -37, -56], "size": [14, 48, 27], "uv": [86, 296]} + ] + }, + { + "name": "l_tentacule3", + "parent": "l_tentacule2", + "pivot": [27.66667, -37.00833, -42.5], + "cubes": [ + {"origin": [22, -85, -53], "size": [14, 48, 21], "uv": [100, 371]} + ] + }, + { + "name": "l_tentacule4", + "parent": "l_tentacule3", + "pivot": [27.4, -85, -42.5], + "cubes": [ + {"origin": [22, -133, -53], "size": [14, 48, 21], "uv": [170, 371]} + ] + }, + { + "name": "l_tentacule5", + "parent": "l_tentacule4", + "pivot": [27, -132.975, -42.5], + "cubes": [ + {"origin": [22, -181, -51], "size": [12, 48, 17], "uv": [243, 330]} + ] + }, + { + "name": "l_tentacule6", + "parent": "l_tentacule5", + "pivot": [26.66667, -180.99167, -42.5], + "cubes": [ + {"origin": [22, -206, -49], "size": [9, 25, 13], "uv": [242, 398]} + ] + }, + { + "name": "r_shoulder", + "parent": "head", + "pivot": [-31.1875, 61.375, -12.5], + "cubes": [ + {"origin": [-42, 14, -29], "size": [17, 47, 33], "uv": [0, 356], "mirror": true} + ] + }, + { + "name": "r_arm", + "parent": "r_shoulder", + "pivot": [-30.85714, 13.92857, -12.5], + "cubes": [ + {"origin": [-39, -34, -26], "size": [14, 48, 27], "uv": [86, 296], "mirror": true} + ] + }, + { + "name": "r_arm2", + "parent": "r_arm", + "pivot": [-30.66667, -34.00833, -12.5], + "cubes": [ + {"origin": [-39, -82, -23], "size": [14, 48, 21], "uv": [100, 371], "mirror": true} + ] + }, + { + "name": "r_arm3", + "parent": "r_arm2", + "pivot": [-30.4, -82, -12.5], + "cubes": [ + {"origin": [-39, -130, -23], "size": [14, 48, 21], "uv": [170, 371], "mirror": true} + ] + }, + { + "name": "r_arm4", + "parent": "r_arm3", + "pivot": [-30, -129.975, -12.5], + "cubes": [ + {"origin": [-37, -178, -21], "size": [12, 48, 17], "uv": [243, 330], "mirror": true} + ] + }, + { + "name": "r_hand", + "parent": "r_arm4", + "pivot": [-29.66667, -177.99167, -12.5], + "cubes": [ + {"origin": [-34, -203, -19], "size": [9, 25, 13], "uv": [242, 398], "mirror": true} + ] + }, + { + "name": "r_hand2", + "parent": "r_hand", + "pivot": [-29.75, -203, -12.5], + "cubes": [ + {"origin": [-36, -244, -33], "size": [11, 41, 41], "uv": [310, 409], "mirror": true} + ] + }, + { + "name": "r_hand_tip", + "parent": "r_hand2", + "pivot": [-29, -244, -12.5], + "cubes": [ + {"origin": [-33, -265, -26], "size": [8, 21, 27], "uv": [172, 468], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json b/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json new file mode 100644 index 00000000..5d60c348 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/octopus_bomb.geo.json @@ -0,0 +1,318 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.unknown", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 8, + "visible_bounds_height": 7, + "visible_bounds_offset": [0, 1.5, 0] + }, + "bones": [ + { + "name": "bone", + "pivot": [0, 46.50635, 20.87778] + }, + { + "name": "head", + "parent": "bone", + "pivot": [0, 48.23333, 11.63333], + "cubes": [ + {"origin": [-9, 48, -3], "size": [5, 5, 6], "uv": [20, 103]}, + {"origin": [-7, 39, -5], "size": [14, 8, 17], "uv": [54, 49]}, + {"origin": [-8, 47, -2], "size": [16, 8, 14], "uv": [96, 0]}, + {"origin": [-7, 55, -1], "size": [14, 2, 11], "uv": [0, 90]}, + {"origin": [-9, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93]}, + {"origin": [-9, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49]}, + {"origin": [4, 47, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [112, 93], "mirror": true}, + {"origin": [4, 48, -3], "size": [5, 5, 6], "uv": [20, 103], "mirror": true}, + {"origin": [4, 52, -3], "size": [5, 2, 6], "inflate": 0.1, "uv": [116, 49], "mirror": true}, + {"origin": [-5.5, 35, -8], "size": [11, 5, 6], "uv": [96, 38]}, + {"origin": [-4.5, 40, -7], "size": [9, 9, 2], "uv": [112, 74]}, + {"origin": [-4.5, 47, -5], "size": [9, 5, 3], "uv": [112, 85]} + ] + }, + { + "name": "mouth", + "parent": "head", + "pivot": [0, 35.1, -6], + "cubes": [ + {"origin": [-5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [3, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [-1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [1, 30, -8], "size": [0, 5, 4], "uv": [42, 103]}, + {"origin": [5, 30, -8], "size": [0, 5, 4], "uv": [42, 103]} + ] + }, + { + "name": "cranium", + "parent": "head", + "pivot": [0, 47.5, 12], + "cubes": [ + {"origin": [-10, 38, 8], "size": [20, 21, 28], "pivot": [0, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 0]}, + {"origin": [-12, 40, 10], "size": [2, 16, 25], "pivot": [-2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49]}, + {"origin": [10, 40, 10], "size": [2, 16, 25], "pivot": [2, 47.5, 12], "rotation": [15, 0, 0], "uv": [0, 49], "mirror": true} + ] + }, + { + "name": "cranium_2", + "parent": "cranium", + "pivot": [0, 53.55, 32.5], + "cubes": [ + {"origin": [-9, 46, 32], "size": [18, 16, 11], "uv": [54, 74]} + ] + }, + { + "name": "cranium_3", + "parent": "cranium_2", + "pivot": [0, 49.1, 41.5], + "cubes": [ + {"origin": [-5, 44.6, 40], "size": [10, 9, 7], "pivot": [0, 49.1, 43.5], "rotation": [-22.5, 0, 0], "uv": [96, 22]} + ] + }, + { + "name": "Tentacles", + "parent": "bone", + "pivot": [0, 45.64286, 8.5] + }, + { + "name": "Tentacles_Left", + "parent": "Tentacles", + "pivot": [6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Left", + "parent": "Tentacles_Left", + "pivot": [6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [4, 16, -2], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left", + "parent": "Tentacle_1_Left", + "pivot": [6.9, 11, 1.5], + "cubes": [ + {"origin": [4, -14, -2], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left", + "parent": "Tentacle_part_1_left", + "pivot": [5, -21, -1], + "cubes": [ + {"origin": [4, -25, -2], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -33, -2], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -34, -1], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left2", + "parent": "Tentacles_Left", + "pivot": [6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [4, 17, 6], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left2", + "parent": "Tentacle_1_Left2", + "pivot": [6.9, 12, 9.5], + "cubes": [ + {"origin": [4, -13, 6], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left2", + "parent": "Tentacle_part_1_left2", + "pivot": [5, -20, 7], + "cubes": [ + {"origin": [4, -24, 6], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -32, 6], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -33, 7], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left3", + "parent": "Tentacles_Left", + "pivot": [6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [4, 19, 14], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left3", + "parent": "Tentacle_1_Left3", + "pivot": [6.9, 14, 17.5], + "cubes": [ + {"origin": [4, -11, 14], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left3", + "parent": "Tentacle_part_1_left3", + "pivot": [5, -18, 15], + "cubes": [ + {"origin": [4, -22, 14], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -30, 14], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -31, 15], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacle_1_Left4", + "parent": "Tentacles_Left", + "pivot": [6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [4, 21, 22], "size": [5, 23, 7], "uv": [74, 101]}, + {"origin": [4.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114]} + ] + }, + { + "name": "Tentacle_part_1_left4", + "parent": "Tentacle_1_Left4", + "pivot": [6.9, 16, 25.5], + "cubes": [ + {"origin": [4, -9, 22], "size": [5, 25, 7], "uv": [50, 101]}, + {"origin": [4.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114]} + ] + }, + { + "name": "Tentacle_hand_1_left4", + "parent": "Tentacle_part_1_left4", + "pivot": [5, -16, 23], + "cubes": [ + {"origin": [4, -20, 22], "size": [5, 6, 7], "uv": [98, 101]}, + {"origin": [6, -28, 22], "size": [3, 8, 7], "uv": [0, 103]}, + {"origin": [6, -29, 23], "size": [3, 1, 5], "uv": [116, 57]} + ] + }, + { + "name": "Tentacles_Right", + "parent": "Tentacles", + "pivot": [-6.78571, 45.64286, 25.5] + }, + { + "name": "Tentacle_1_Right", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 38.64286, 1.5], + "cubes": [ + {"origin": [-9, 16, -2], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 11, -1.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right", + "parent": "Tentacle_1_Right", + "pivot": [-6.9, 11, 1.5], + "cubes": [ + {"origin": [-9, -14, -2], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -19, -1.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right", + "parent": "Tentacle_part_1_right", + "pivot": [-5, -21, -1], + "cubes": [ + {"origin": [-9, -25, -2], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -33, -2], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -34, -1], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right2", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 39.64286, 9.5], + "cubes": [ + {"origin": [-9, 17, 6], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 12, 6.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right2", + "parent": "Tentacle_1_Right2", + "pivot": [-6.9, 12, 9.5], + "cubes": [ + {"origin": [-9, -13, 6], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -18, 6.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right2", + "parent": "Tentacle_part_1_right2", + "pivot": [-5, -20, 7], + "cubes": [ + {"origin": [-9, -24, 6], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -32, 6], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -33, 7], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right3", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 41.64286, 17.5], + "cubes": [ + {"origin": [-9, 19, 14], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 14, 14.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right3", + "parent": "Tentacle_1_Right3", + "pivot": [-6.9, 14, 17.5], + "cubes": [ + {"origin": [-9, -11, 14], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -16, 14.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right3", + "parent": "Tentacle_part_1_right3", + "pivot": [-5, -18, 15], + "cubes": [ + {"origin": [-9, -22, 14], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -30, 14], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -31, 15], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + }, + { + "name": "Tentacle_1_Right4", + "parent": "Tentacles_Right", + "pivot": [-6.78571, 43.64286, 25.5], + "cubes": [ + {"origin": [-9, 21, 22], "size": [5, 23, 7], "uv": [74, 101], "mirror": true}, + {"origin": [-8.5, 16, 22.5], "size": [4, 5, 6], "uv": [98, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_part_1_right4", + "parent": "Tentacle_1_Right4", + "pivot": [-6.9, 16, 25.5], + "cubes": [ + {"origin": [-9, -9, 22], "size": [5, 25, 7], "uv": [50, 101], "mirror": true}, + {"origin": [-8.5, -14, 22.5], "size": [4, 5, 6], "uv": [20, 114], "mirror": true} + ] + }, + { + "name": "Tentacle_hand_1_right4", + "parent": "Tentacle_part_1_right4", + "pivot": [-5, -16, 23], + "cubes": [ + {"origin": [-9, -20, 22], "size": [5, 6, 7], "uv": [98, 101], "mirror": true}, + {"origin": [-9, -28, 22], "size": [3, 8, 7], "uv": [0, 103], "mirror": true}, + {"origin": [-9, -29, 23], "size": [3, 1, 5], "uv": [116, 57], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json new file mode 100644 index 00000000..11b4322d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/spit_bug.geo.json @@ -0,0 +1,232 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.spitbug", + "texture_width": 256, + "texture_height": 256, + "visible_bounds_width": 6, + "visible_bounds_height": 5.5, + "visible_bounds_offset": [0, 2.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 36, 0], + "cubes": [ + {"origin": [-9.5, 36, -18], "size": [19, 18, 37], "uv": [0, 124]}, + {"origin": [-9.5, 54, -39], "size": [19, 7, 63], "uv": [0, 0]}, + {"origin": [-9.5, 44, 19], "size": [19, 10, 5], "uv": [112, 175]}, + {"origin": [-3.5, 52, -52], "size": [7, 7, 13], "uv": [0, 179]}, + {"origin": [-1.5, 47, -51], "size": [3, 5, 0], "uv": [58, 207]}, + {"origin": [-5.5, 59, -45], "size": [11, 2, 6], "uv": [108, 190]}, + {"origin": [-12.5, 36, -16], "size": [3, 18, 33], "uv": [112, 124]}, + {"origin": [9.5, 36, -16], "size": [3, 18, 33], "uv": [146, 70]}, + {"origin": [-9.5, 36, -26], "size": [19, 4, 8], "uv": [164, 45]}, + {"origin": [-11.5, 36, -30], "size": [2, 6, 14], "uv": [76, 179]}, + {"origin": [-10.5, 36, -35], "size": [3, 7, 5], "uv": [168, 196]}, + {"origin": [-8.5, 38, -51], "size": [2, 5, 16], "uv": [40, 179]}, + {"origin": [6.5, 38, -51], "size": [2, 5, 16], "uv": [40, 179], "mirror": true}, + {"origin": [7.5, 36, -35], "size": [3, 7, 5], "uv": [168, 196], "mirror": true}, + {"origin": [9.5, 36, -30], "size": [2, 6, 14], "uv": [76, 179], "mirror": true}, + {"origin": [-9.5, 50, -35], "size": [3, 4, 17], "uv": [160, 175]}, + {"origin": [6.5, 50, -35], "size": [3, 4, 17], "uv": [160, 175], "mirror": true}, + {"origin": [-7.5, 49, -39], "size": [5, 5, 4], "uv": [184, 196]}, + {"origin": [-3.5, 49, -51], "size": [2, 3, 12], "uv": [184, 157]}, + {"origin": [1.5, 49, -51], "size": [2, 3, 12], "uv": [184, 157], "mirror": true}, + {"origin": [2.5, 49, -39], "size": [5, 5, 4], "uv": [184, 196], "mirror": true}, + {"origin": [-6, 36, -35], "size": [12, 1, 9], "uv": [184, 136]}, + {"origin": [-11.5, 32, -35], "size": [23, 4, 50], "uv": [0, 70]}, + {"origin": [-8.5, 34, -53], "size": [17, 4, 18], "uv": [164, 0]}, + {"origin": [-5.5, 38, -52], "size": [11, 5, 0], "uv": [227, 32]}, + {"origin": [-8.5, 29, -53], "size": [17, 5, 0], "uv": [189, 22]} + ] + }, + { + "name": "rightEye", + "parent": "body", + "pivot": [-11, 45.5, -17], + "cubes": [ + {"origin": [-12, 45.5, -19], "size": [3, 3, 3], "uv": [142, 190]} + ] + }, + { + "name": "leftEye", + "parent": "body", + "pivot": [11, 45.5, -17], + "cubes": [ + {"origin": [9, 45.5, -19], "size": [3, 3, 3], "uv": [142, 190], "mirror": true} + ] + }, + { + "name": "rightGrip", + "parent": "body", + "pivot": [-11.5, 54, -16], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-15.5, 53, -28], "size": [8, 3, 12], "uv": [184, 121]} + ] + }, + { + "name": "leftGrip", + "parent": "body", + "pivot": [11.5, 54, -16], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [7.5, 53, -28], "size": [8, 3, 12], "uv": [184, 121], "mirror": true} + ] + }, + { + "name": "backRightThigh", + "parent": "root", + "pivot": [-11.5, 37, 10], + "cubes": [ + {"origin": [-20.5, 33, 8], "size": [9, 4, 4], "uv": [142, 196]} + ] + }, + { + "name": "backRightKnee", + "parent": "backRightThigh", + "pivot": [-20.5, 37, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]} + ] + }, + { + "name": "backRightLeg", + "parent": "backRightKnee", + "pivot": [-34.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, 8], "size": [19, 4, 4], "uv": [164, 57]} + ] + }, + { + "name": "backRightFoot", + "parent": "backRightLeg", + "pivot": [-53.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]}, + {"origin": [-76.5, 30, 10], "size": [9, 2, 0], "uv": [146, 121]} + ] + }, + { + "name": "backLeftThigh", + "parent": "root", + "pivot": [11.5, 37, 10], + "cubes": [ + {"origin": [11.5, 33, 8], "size": [9, 4, 4], "uv": [142, 196]} + ] + }, + { + "name": "backLeftKnee", + "parent": "backLeftThigh", + "pivot": [20.5, 37, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, 7], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]} + ] + }, + { + "name": "backLeftLeg", + "parent": "backLeftKnee", + "pivot": [34.5, 32, 10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, 8], "size": [19, 4, 4], "uv": [164, 57]} + ] + }, + { + "name": "backLeftFoot", + "parent": "backLeftLeg", + "pivot": [53.5, 32, 10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, 9], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]}, + {"origin": [67.5, 30, 10], "size": [9, 2, 0], "uv": [146, 121], "mirror": true} + ] + }, + { + "name": "frontRightThigh", + "parent": "root", + "pivot": [-11.5, 37, -10], + "cubes": [ + {"origin": [-20.5, 33, -12], "size": [9, 4, 4], "uv": [142, 196]} + ] + }, + { + "name": "frontRightKnee", + "parent": "frontRightThigh", + "pivot": [-20.5, 37, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-34.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]} + ] + }, + { + "name": "frontRightLeg", + "parent": "frontRightKnee", + "pivot": [-34.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [-53.5, 32, -12], "size": [19, 4, 4], "uv": [164, 57]} + ] + }, + { + "name": "frontRightFoot", + "parent": "frontRightLeg", + "pivot": [-53.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [-67.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]}, + {"origin": [-76.5, 30, -10], "size": [9, 2, 0], "uv": [146, 121]} + ] + }, + { + "name": "frontLeftThigh", + "parent": "root", + "pivot": [11.5, 37, -10], + "cubes": [ + {"origin": [11.5, 33, -12], "size": [9, 4, 4], "uv": [142, 196]} + ] + }, + { + "name": "frontLeftKnee", + "parent": "frontLeftThigh", + "pivot": [20.5, 37, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [20.5, 32, -13], "size": [14, 5, 6], "inflate": 0.025, "uv": [184, 146]} + ] + }, + { + "name": "frontLeftLeg", + "parent": "frontLeftKnee", + "pivot": [34.5, 32, -10], + "rotation": [0, 0, -90], + "cubes": [ + {"origin": [34.5, 32, -12], "size": [19, 4, 4], "uv": [164, 57]} + ] + }, + { + "name": "frontLeftFoot", + "parent": "frontLeftLeg", + "pivot": [53.5, 32, -10], + "rotation": [0, 0, 90], + "cubes": [ + {"origin": [53.5, 30, -11], "size": [14, 2, 2], "inflate": 0.025, "uv": [164, 65]}, + {"origin": [67.5, 30, -10], "size": [9, 2, 0], "uv": [146, 121], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json new file mode 100644 index 00000000..d8bf299a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json @@ -0,0 +1,85 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.stinkbug", + "texture_width": 32, + "texture_height": 32, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "root", + "pivot": [0, 0, 0] + }, + { + "name": "body", + "parent": "root", + "pivot": [0, 2, 0], + "cubes": [ + {"origin": [-3, 0, -5], "size": [6, 4, 10], "uv": [0, 0]} + ] + }, + { + "name": "antenna", + "parent": "body", + "pivot": [0, 4, -4], + "cubes": [ + {"origin": [-2, 4, -5], "size": [4, 2, 1], "uv": [0, 14]} + ] + }, + { + "name": "frontLeftLeg", + "parent": "body", + "pivot": [-3, 0, -4], + "cubes": [ + {"origin": [-6, 0, -5], "size": [3, 0, 2], "uv": [10, 14]} + ] + }, + { + "name": "frontRightLeg", + "parent": "body", + "pivot": [3, 0, -4], + "cubes": [ + {"origin": [3, 0, -5], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + ] + }, + { + "name": "middleLeftLeg", + "parent": "body", + "pivot": [-3, 0, 0], + "cubes": [ + {"origin": [-6, 0, -1], "size": [3, 0, 2], "uv": [10, 14]} + ] + }, + { + "name": "middleRightLeg", + "parent": "body", + "pivot": [3, 0, 0], + "cubes": [ + {"origin": [3, 0, -1], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + ] + }, + { + "name": "backLeftLeg", + "parent": "body", + "pivot": [-3, 0, 4], + "cubes": [ + {"origin": [-6, 0, 3], "size": [3, 0, 2], "uv": [10, 14]} + ] + }, + { + "name": "backRightLeg", + "parent": "body", + "pivot": [3, 0, 4], + "cubes": [ + {"origin": [3, 0, 3], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index bfd0fb6b..79d939de 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -24,14 +24,20 @@ "block.antarchy.hushweed": "Hushweed", "block.antarchy.umbral_moss_block": "Umbral Moss Block", "block.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "block.antarchy.amber_moss_block": "Amber Moss Block", + "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", + "block.antarchy.amber_lichen": "Amber Lichen", "block.antarchy.duplicator_sapling": "Duplicator Sapling", + "block.antarchy.creepvine": "Creepvine", "block.antarchy.duct_tape": "Duct Tape", "block.antarchy.infested_rooted_dirt": "Infested Rooted Dirt", "block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", "block.antarchy.nyxite": "Nyxite", + "block.antarchy.myrmite": "Myrmite", "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", + "block.antarchy.chiten_block": "Chiten Block", "block.antarchy.shellstone": "Shellstone", "block.antarchy.polished_shellstone": "Polished Shellstone", "block.antarchy.shellstone_bricks": "Shellstone Bricks", @@ -146,6 +152,7 @@ "entity.antarchy.missile_squid": "Missile Squid", "entity.antarchy.nightmare": "Nightmare", "entity.antarchy.bed_bug": "Bed Bug", + "entity.antarchy.stink_bug": "Stink Bug", "entity.antarchy.jumpy_bug": "Jumpy Bug", "entity.antarchy.wasp": "Wasp", "entity.antarchy.bomber": "Bomber", @@ -163,6 +170,8 @@ "subtitles.antarchy.mantis_fly_loop": "Mantis wings buzz", "item.antarchy.big_bertha": "Big Bertha", "item.antarchy.wasp_nest": "Wasp Nest", + "item.antarchy.stink_bug": "Stink Bug", + "item.antarchy.stink_bug_spawn_egg": "Stink Bug Spawn Egg", "item.antarchy.wasp_spawn_egg": "Wasp Spawn Egg", "item.antarchy.bomber_spawn_egg": "Bomber Spawn Egg", "item.antarchy.jumpy_bug_spawn_egg": "Jumpy Bug Spawn Egg", @@ -257,6 +266,13 @@ "item.antarchy.hushweed": "Hushweed", "item.antarchy.umbral_moss_block": "Umbral Moss Block", "item.antarchy.umbral_moss_carpet": "Umbral Moss Carpet", + "item.antarchy.amber_moss_block": "Amber Moss Block", + "item.antarchy.amber_moss_carpet": "Amber Moss Carpet", + "item.antarchy.amber_lichen": "Amber Lichen", + "item.antarchy.creepvine": "Creepvine", + "item.antarchy.chiten": "Chiten", + "item.antarchy.chiten_block": "Chiten Block", + "item.antarchy.myrmite": "Myrmite", "item.antarchy.torchflower_bush": "Torchflower Bush", "block.antarchy.torchflower_bush": "Torchflower Bush", "item.antarchy.mud_pie": "Mud Pie", @@ -402,6 +418,7 @@ "effect.antarchy.dread": "Dread", "effect.antarchy.paralyzed": "Paralyzed", "effect.antarchy.inverted": "Inverted", + "effect.antarchy.stinky": "Stinky", "effect.antarchy.shrinking": "Shrinking", "effect.antarchy.growth": "Growth", "effect.antarchy.bloodglass_ward": "Bloodglass Ward", @@ -461,6 +478,8 @@ "advancements.antarchy.soups_up.description": "Eat Cloud Shark Fin Soup.", "advancements.antarchy.in_the_upside_down.title": "In the Upside Down", "advancements.antarchy.in_the_upside_down.description": "Become inverted for the first time.", + "advancements.antarchy.whoever_smelt_it_dealt_it.title": "Whoever smelt it, dealt it", + "advancements.antarchy.whoever_smelt_it_dealt_it.description": "Get Stinky for the first time.", "advancements.antarchy.ultimate_armor.title": "Ultimate Protection", "advancements.antarchy.ultimate_armor.description": "Collect the full set of Ultimate Armor.", "advancements.antarchy.ultimate_bow.title": "Bowhemian Rhapsody", @@ -665,6 +684,14 @@ "item.minecraft.lingering_potion.effect.long_dread": "Lingering Potion of Dread", "item.minecraft.tipped_arrow.effect.dread": "Arrow of Dread", "item.minecraft.tipped_arrow.effect.long_dread": "Arrow of Dread", + "item.minecraft.potion.effect.stinky": "Potion of Stink", + "item.minecraft.potion.effect.long_stinky": "Potion of Stink", + "item.minecraft.splash_potion.effect.stinky": "Splash Potion of Stink", + "item.minecraft.splash_potion.effect.long_stinky": "Splash Potion of Stink", + "item.minecraft.lingering_potion.effect.stinky": "Lingering Potion of Stink", + "item.minecraft.lingering_potion.effect.long_stinky": "Lingering Potion of Stink", + "item.minecraft.tipped_arrow.effect.stinky": "Arrow of Stink", + "item.minecraft.tipped_arrow.effect.long_stinky": "Arrow of Stink", "item.minecraft.potion.effect.haste": "Potion of Haste", "item.minecraft.potion.effect.strong_haste": "Potion of Haste II", "item.minecraft.splash_potion.effect.haste": "Splash Potion of Haste", diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json b/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json new file mode 100644 index 00000000..e6913b4a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_lichen.json @@ -0,0 +1,17 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/amber_moss/amber_lichen", + "glow_lichen": "antarchy:block/amber_moss/amber_lichen" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#glow_lichen" }, + "south": { "uv": [0, 0, 16, 16], "texture": "#glow_lichen" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json new file mode 100644 index 00000000..f3079b40 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_block.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/amber_moss/amber_moss_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json new file mode 100644 index 00000000..3058b1b5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/carpet", + "textures": { + "wool": "antarchy:block/amber_moss/amber_moss_carpet" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json new file mode 100644 index 00000000..279f1af9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_small.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/mossy_carpet_side", + "textures": { + "side": "antarchy:block/amber_moss/amber_moss_carpet" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json new file mode 100644 index 00000000..f4bcd957 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/amber_moss_carpet_side_tall.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": true, + "textures": { + "particle": "#side", + "side": "antarchy:block/amber_moss/amber_moss_carpet" + }, + "elements": [ + { + "from": [0, 0, 0.1], + "to": [16, 16, 0.1], + "shade": true, + "faces": { + "north": {"uv": [16, 0, 0, 16], "texture": "#side"}, + "south": {"uv": [0, 0, 16, 16], "texture": "#side"} + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_block.json b/common/src/main/resources/assets/antarchy/models/block/chiten_block.json new file mode 100644 index 00000000..c3d21bb3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_block.json @@ -0,0 +1,7 @@ +{ + "parent": "minecraft:block/cube_column", + "textures": { + "end": "antarchy:block/chiten_block", + "side": "antarchy:block/chiten_block" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creepvine.json b/common/src/main/resources/assets/antarchy/models/block/creepvine.json new file mode 100644 index 00000000..3ee3bc66 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/creepvine.json @@ -0,0 +1,18 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "antarchy:block/creepvine", + "vine": "antarchy:block/creepvine" + }, + "elements": [ + { + "from": [0, 0, 0.8], + "to": [16, 16, 0.8], + "shade": false, + "faces": { + "north": { "uv": [16, 0, 0, 16], "texture": "#vine", "tintindex": 0 }, + "south": { "uv": [0, 0, 16, 16], "texture": "#vine", "tintindex": 0 } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/myrmite.json b/common/src/main/resources/assets/antarchy/models/block/myrmite.json new file mode 100644 index 00000000..1c17e6da --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/myrmite.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/myrmite" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json b/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json new file mode 100644 index 00000000..809509a9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_lichen.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/amber_moss/amber_lichen" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json b/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json new file mode 100644 index 00000000..7507fc94 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_moss_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json b/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json new file mode 100644 index 00000000..900da03b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/amber_moss_carpet.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/amber_moss_carpet" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten.json b/common/src/main/resources/assets/antarchy/models/item/chiten.json new file mode 100644 index 00000000..20b2e019 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chiten" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten_block.json b/common/src/main/resources/assets/antarchy/models/item/chiten_block.json new file mode 100644 index 00000000..47e06517 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten_block.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/chiten_block" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/creepvine.json b/common/src/main/resources/assets/antarchy/models/item/creepvine.json new file mode 100644 index 00000000..bea911f8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/creepvine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/creepvine" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/myrmite.json b/common/src/main/resources/assets/antarchy/models/item/myrmite.json new file mode 100644 index 00000000..9da582d2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/myrmite.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/myrmite" +} diff --git a/common/src/main/resources/assets/antarchy/models/item/stink_bug.json b/common/src/main/resources/assets/antarchy/models/item/stink_bug.json new file mode 100644 index 00000000..c2cde591 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stink_bug.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/stink_bug" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/stink_bug_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/particles/stinky_gas.json b/common/src/main/resources/assets/antarchy/particles/stinky_gas.json new file mode 100644 index 00000000..67beb202 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/stinky_gas.json @@ -0,0 +1,12 @@ +{ + "textures": [ + "antarchy:stinky_gas/stinky_gas_01", + "antarchy:stinky_gas/stinky_gas_02", + "antarchy:stinky_gas/stinky_gas_03", + "antarchy:stinky_gas/stinky_gas_04", + "antarchy:stinky_gas/stinky_gas_05", + "antarchy:stinky_gas/stinky_gas_06", + "antarchy:stinky_gas/stinky_gas_07", + "antarchy:stinky_gas/stinky_gas_08" + ] +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs.png rename to common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg.png diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked.png rename to common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_slightly_cracked.png diff --git a/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_very_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/creeping_horror_eggs/creeping_horror_eggs_very_cracked.png rename to common/src/main/resources/assets/antarchy/textures/block/creeping_horror_egg/creeping_horror_egg_very_cracked.png diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg.png rename to common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg.png diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_slightly_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_slightly_cracked.png rename to common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_slightly_cracked.png diff --git a/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_very_cracked.png b/common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png similarity index 100% rename from common/src/main/resources/assets/antarchy/textures/block/lurking_terror_eggs/lurking_terror_egg_very_cracked.png rename to common/src/main/resources/assets/antarchy/textures/block/lurking_terror_egg/lurking_terror_egg_very_cracked.png diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken_blue.png deleted file mode 100644 index e8a7252ecd202d3205618954e6a04fb4c2ede70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10608 zcmZ8{XIN89)NW!RIYLNKYG^@GL6H_E^d>5LKmk!ex`d+Ai-aBm2dM&zH0h$Chb~

($^ZF50H@pJe@F_T)+z6|Lm+T94J)o(tXT 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

LXNrt5LxD%V;4}oKcfB51AuFscHlWmGm)L8* zWR09e*96xb*8~SOm_22KpV`f?N8{w@h<~Qe-1!z_zugCtDuLLXLj0OUxt)TmQIkhJc4 z_XO7ke*Yqu5N?_~`L!7OKuR*9L3azBMB0^sg-!$sc&E21AHw>!-xGRUq7f^8Z5vj# z0XfWjA|Cfhk&{4Y9k@&fx)`xCAQi^I^z&fk{#VxRe_zI=vkPU}ALWHcjomYsT+hPe z9}BvNU%IpS@NA1t8@Iwv%bw4u!QOE~Z}H=3D(Gf^wD77$fR>Gg5-aJ?%7hya;2!@V&zkU_X0| zpP;zPNgoGrWAdX$zy@xQYjw>}8PZRT{8t?n+MZdf8`WsBDOV>~z+WoA;pdWNeuedP$ zq<%1j!*4bEbj%m;f*)hQ>GSO(5?D{8x}r_Kz)f(_f^4wj_KfYS>T0(LYSg;kv?8S1 zwKw|he!aBW(XgI1z=W!4M~AAl#V*hsr6}3X>Y`+2A@k=mc*s>IVMZF(R0h-+sB_?_ z!S``Qw{}(O0Jp01Wlc$*nRIH%UJ_n z?T*Ok^tytNk#_N7O&}pUTBxTV@)-=0l+mW)XLArNU8%p+pd_I50*nH+4(U8i0pi> zo?R}SPY%Eml|p4Q2h4OV|1sAs!&44dbHOQx9RF@Vfkx2*XlOYG7r;||0FVDQn|VOR zp8?RtC$IhH5rt@U0Ne>(E^p9>ieCT*`mb4B0g~|T@Fgh0_4CWrIHHgh5b3#hMi)dO z3GaY`{%ZzU*QB$q`Q4~&po82*XWiwNsEIZ89X&Dc3iR{KFp@3+F0GVarix{_$uI!j zWSAp&TOWF*3&3(V_G#udNJ2c_xkvNM+Bo7_fFp|rEB!Clw$$@@a~A6PLZkdDjHE8z z%lkGaJyc~Az)NLQuD)FXTj|Tvpr@(Rr`1_D80DL*A z(lr-uLeIHLi#|R4 z0$+X$pz^ttZxWwMw4*a__x(dzLI*htV7v&|&{2bNen6ig4-86n9-%07J$q;wCP^qj z2Fn3b20iZBsl*Za>7;~M#l5hm4%729T=0A)2UA2xwH%X&G4+5J&}Ck*{_jBAHHZ*B z5mp~N@-WVC=)T_=l8l45<7z;3V?iqol{s0%>6Mg6)n0 z65xYA;_Y`GRsi2~biU_ujeTA1_6f#KXd(iilol_jqm<}qQ;WrK7dxg&T zib3TLP;t=THh!n49!Iq60a&xEYbdMhAk*ogyi4H$W@mg65Ts^hM_FqJnLgbpF^P{1 zpz$%lcmJ^hjA#x4{CzfA9JaN#cmSZzyZ`ssYYVLR)LPT*1e!ewCMXpYeRnywE!S!d9lT|qVLL*wbn)~uc?o9IxD z1s)$@!U3A&E9rP^{*=vkkc|OuY5Et#A4B8mD*TTXkhSI*-LKjHFy5N_0|?IZ#@X%D zIO6}v`ca|pN;QUN1B6kN^v}VmwXH=vKwQyGuDOr7FJQfX^4H@t@pO(gNe5-S&9;C> yr=rQ<*owBsP6@!@B~MRJ@2x2U4^Vnx1OX|@RQ+rl6F>kK(EU3PZx`IM2>d^r=xmPw diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken_dark.png deleted file mode 100644 index 54453c9c728c41896f8125caa7ff507fe63dae4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11564 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_03.png new file mode 100644 index 0000000000000000000000000000000000000000..7436c983070f72c3b6b855bff2631b8a4215d239 GIT binary patch literal 356 zcmV-q0h|7bP)U<)%ZA${2J347QIrROu>agK1rW zg%O~Kt*eZJ^(aHT01IM<<*A`Dndyj`)&&?CT!`Ki=n?vC-wR-{dAKN0#m4qP$;7## z7cl()&cqU0z=-nv4*&rF|D!qaIRF3v21!IgR09C%s>vartHCn>0000{`>(;xzya|gJ& z?vGB%)VzQaXg;FYF?ibSm=Pzq!S=AT3|I}&^a7|;uwWRX*7!HZQula uIMkf@1ONd4|A~bvQPgY@+DZ~JHZYJGbA zIsQPA@y=Q)0}IAy-f<^tY^%6AnO?;7uWssa=3@FaH?zevJn4vwk9$uOL)SjZ#eObl zW=?15>R{g1x4T)vI-JQsNuK}bge}`UX1$%(_@ac5!Fl3b){95qx%J8%`@*Q?#@E2I zD{beTZPiW(J8r!2T2sVOvPO+Jc(v-r3!STPJnDLO;PX=k1A~3DERElsJM&(p|HREA z29XAZBvH3@N8=igtYA@i$^D>WLs!J#Tj31%Q{KM^dj0?ZMGL3Y0U2zdFkoho)N5A! Tnts?FD8k_B>gTe~DWM4fac_co literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png b/common/src/main/resources/assets/antarchy/textures/particle/stinky_gas/stinky_gas_06.png new file mode 100644 index 0000000000000000000000000000000000000000..7e0a985206d6b4078cf36d11d2a440c0d3e0ac25 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`w>(`OLn;`TOjP7M7KQr()Jt?zW$lF4W2tPw4XkCuX)EhDMp7S5#8yWKe-P?rT%LRTq#ztFJE-k zE|*K^-8y5=GAFzbo>J8kqy9*(T{D{DUY9FNi%0Ne9R_EU`p-=Qs@w^0csDJ)H@QDe zV~6q19pXg58uzPZ<5SPb3o|c*EC-tN^f9PU* z|K-~GpMejGD%64*K76&e&JdZwSA2h}>CsM(4X4bjEwl|wZR>;%?e%5&F!T1`b6b4V zRgUo8l41yrlW=0@FrCJ*V}9M^V?SqWI5Ij2ccjgT6MWEWrqvLfSgabtT2OMyo?!)3 z2Ft=jXUECW4dbtj)Gqke#8Q#wE2Wa8{|2fah f4gnc#Ae)&PM3sc)*}8?afFcZ@u6{1-oD!M 3) )); + public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock AMBER_MOSS_BLOCK = BLOCKS.register("amber_moss_block", + () -> new AmberMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", + () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 0))); + public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", + () -> new VineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.VINE))); public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -651,6 +670,7 @@ public final class AntarchyFabricContent { public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); private static final DeferredHolder BLOODGLASS_MAX_HEARTS = ATTRIBUTES.register( "bloodglass_max_hearts", @@ -664,6 +684,10 @@ public final class AntarchyFabricContent { () -> new Potion(new MobEffectInstance(mobEffectHolder(INVERTED), 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", () -> new Potion("inversion", new MobEffectInstance(mobEffectHolder(INVERTED), 2400))); + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(mobEffectHolder(STINKY), 1200))); + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(mobEffectHolder(STINKY), 2400))); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", @@ -759,6 +783,11 @@ public final class AntarchyFabricContent { .sized(1.15F, 0.8F) .clientTrackingRange(8) .build("bed_bug")); + public static final DeferredHolder, EntityType> STINK_BUG = ENTITY_TYPES.register("stink_bug", + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) + .sized(0.35F, 0.2F) + .clientTrackingRange(8) + .build("stink_bug")); public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) .sized(0.8625F, 1.365F) @@ -1096,9 +1125,11 @@ public final class AntarchyFabricContent { public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_ROOTED_DIRT); public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(INFESTED_COARSE_DIRT); public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(NYXITE); + public static final DeferredItem MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(MYRMITE); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_BRICKS); + public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(CHITEN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_STAIRS); public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_SLAB); public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(NYXITE_WALL); @@ -1133,6 +1164,10 @@ public final class AntarchyFabricContent { public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(UMBRAL_MOSS_CARPET); + public static final DeferredItem AMBER_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AMBER_MOSS_BLOCK); + public static final DeferredItem AMBER_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AMBER_MOSS_CARPET); + public static final DeferredItem AMBER_LICHEN_ITEM = ITEMS.registerSimpleBlockItem(AMBER_LICHEN); + public static final DeferredItem CREEPVINE_ITEM = ITEMS.registerSimpleBlockItem(CREEPVINE); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(DREAM_LANTERN); @@ -1179,6 +1214,8 @@ public final class AntarchyFabricContent { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", () -> new ArmorMaterial( @@ -1562,7 +1599,7 @@ public final class AntarchyFabricContent { public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", () -> new DeferredSpawnEggItem(CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(BUTTERFLY, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", () -> new DeferredSpawnEggItem(REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", @@ -1594,7 +1631,9 @@ public final class AntarchyFabricContent { public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new DeferredSpawnEggItem(BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", - () -> new DeferredSpawnEggItem(JUMPY_BUG, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); + public static final DeferredItem STINK_BUG_SPAWN_EGG = ITEMS.register("stink_bug_spawn_egg", + () -> new DeferredSpawnEggItem(STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", () -> new DeferredSpawnEggItem(CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", @@ -1647,12 +1686,12 @@ public final class AntarchyFabricContent { .build("water_bomb")); public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) - .sized(0.7F, 0.5F) + .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("creeping_horror")); public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) - .sized(0.8F, 0.6F) + .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("lurking_terror")); public static final DeferredItem TORETERROR_SPAWN_EGG = ITEMS.register("toreterror_spawn_egg", @@ -1732,6 +1771,7 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(NIGHTMARE.get(), NightmareEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(STINK_BUG.get(), StinkBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(WASP.get(), WaspEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BOMBER.get(), BomberEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); @@ -1784,6 +1824,7 @@ public final class AntarchyFabricContent { SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); SpawnPlacements.register(MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn); SpawnPlacements.register(BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn); + SpawnPlacements.register(STINK_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn); SpawnPlacements.register(LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn); SpawnPlacements.register(SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn); SpawnPlacements.register(BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); @@ -1809,6 +1850,8 @@ public final class AntarchyFabricContent { acceptPotionFamily(output, LONG_DREAD); acceptPotionFamily(output, INVERSION); acceptPotionFamily(output, LONG_INVERSION); + acceptPotionFamily(output, STINKY_POTION); + acceptPotionFamily(output, LONG_STINKY); acceptPotionFamily(output, PARALYSIS); acceptPotionFamily(output, LONG_PARALYSIS); acceptPotionFamily(output, HASTE); @@ -1857,11 +1900,12 @@ public final class AntarchyFabricContent { "dream_sandstone_stairs", "dream_sandstone_slab", "dream_sandstone_wall", "smooth_dream_sandstone_stairs", "smooth_dream_sandstone_slab", "cut_dream_sandstone_slab" -> 4; - case "umbral_moss_block", "umbral_moss_carpet" -> 5; - case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed" -> 6; + case "umbral_moss_block", "umbral_moss_carpet" -> 4; + case "torchflower_bush", "hushweed", "orange_milkweed", "pink_milkweed", "amber_lichen", "creepvine" -> 6; case "blood_crystal_block", "budding_blood_crystal", "small_blood_crystal_bud", "medium_blood_crystal_bud", "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; + case "myrmite", "chiten_block", "amber_moss_block", "amber_moss_carpet" -> 8; case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", @@ -1878,10 +1922,11 @@ public final class AntarchyFabricContent { "moleworm_spawn_egg", "mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", "honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "jumpy_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; + case "stink_bug", "chiten" -> 22; case "water_cannon" -> 52; case "primordial_helmet", "primordial_chestplate", "primordial_leggings", "primordial_boots" -> 53; case "jumpy_boots" -> 54; @@ -2129,6 +2174,8 @@ public final class AntarchyFabricContent { FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(LUCID_EYE.get()), potionHolder(INVERSION)); builder.registerPotionRecipe(potionHolder(INVERSION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_INVERSION)); + builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(STINK_BUG_ITEM.get()), potionHolder(STINKY_POTION)); + builder.registerPotionRecipe(potionHolder(STINKY_POTION), Ingredient.of(Items.REDSTONE), potionHolder(LONG_STINKY)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(BASILISK_FANG.get()), potionHolder(PARALYSIS)); builder.registerPotionRecipe(potionHolder(PARALYSIS), Ingredient.of(Items.REDSTONE), potionHolder(LONG_PARALYSIS)); builder.registerPotionRecipe(net.minecraft.world.item.alchemy.Potions.AWKWARD, Ingredient.of(MOLEWORM_ITEM.get()), potionHolder(HASTE)); @@ -2299,6 +2346,7 @@ public final class AntarchyFabricContent { WATER_BOMB, CREEPING_HORROR, LURKING_TERROR, + STINK_BUG, () -> DUPLICATOR_LOG.get(), () -> DUPLICATOR_SAPLING.get(), () -> DUCT_TAPE.get(), @@ -2339,9 +2387,11 @@ public final class AntarchyFabricContent { KRAKEN_TOOTH, () -> MOGGLES.get(), () -> REVERIE_BOTTLE.get(), + () -> STINK_BUG_ITEM.get(), () -> mobEffectHolder(DREAD), () -> mobEffectHolder(PARALYZED), () -> mobEffectHolder(INVERTED), + () -> mobEffectHolder(STINKY), () -> OURANWOOD_ACORN_BLOCK.get(), () -> MOSSY_OURANWOOD_LOG.get(), () -> MOSSY_OURANWOOD_WOOD.get(), @@ -2358,6 +2408,7 @@ public final class AntarchyFabricContent { () -> DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> WASP_NEST_BLOCK_ENTITY.get(), () -> HUSHWEED_BLOCK_ENTITY.get(), + () -> STINKY_GAS.get(), () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), () -> attributeHolder(BLOODGLASS_MAX_HEARTS), () -> mobEffectHolder(BLOODGLASS_WARD) diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index 0dc57b6e..c4cb5790 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -51,6 +51,8 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.AMBER_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.AMBER_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f); @@ -58,7 +60,10 @@ public final class AntarchyFabricEvents { if (entity instanceof ServerPlayer sp) { BloodglassManager.handleDeath(sp); } - if (!(entity instanceof MissileSquidEntity)) { + if (!(entity instanceof MissileSquidEntity missileSquid)) { + return; + } + if (missileSquid.isSpawnedByKraken()) { return; } if (!(entity.level() instanceof ServerLevel serverLevel)) { 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 8132da99..921ba8e5 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 @@ -90,6 +90,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.STINK_BUG.get(), StinkBugRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.WASP.get(), WaspRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BOMBER.get(), BomberRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.JUMPY_BUG.get(), JumpyBugRenderer::new); @@ -166,6 +167,7 @@ public final class AntarchyFabricClientBootstrap { private static void registerParticles() { ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance(); registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -191,6 +193,9 @@ public final class AntarchyFabricClientBootstrap { 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.AMBER_MOSS_CARPET.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.AMBER_LICHEN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java index 5576664e..9a410f2b 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java @@ -58,6 +58,11 @@ public final class JumpyBootsClientHandler { wasCharging = true; } else if (wasCharging && chargeTicks > 0) { storedChargeTicks = chargeTicks; + if (jumpPressed) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; chargeTicks = 0; wasCharging = false; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java index a3fb4470..f51d4f26 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/network/AntarchyFabricNetworking.java @@ -292,6 +292,7 @@ public final class AntarchyFabricNetworking { } player.setDeltaMovement(newX, verticalBoost, newZ); + player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); player.hasImpulse = true; player.hurtMarked = true; player.resetFallDistance(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java index 133ecc2d..c8d6ddf0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java @@ -89,7 +89,7 @@ public final class AntarchyMiscConfig { b.push("infinityDimensions"); DISABLE_INFINITY_BOOK_PORTAL_CREATION = b .comment("If true, book and quills cannot be thrown into nether portals to create random dimensions.") - .define("disableInfinityBookPortalCreation", false); + .define("disableInfinityBookPortalCreation", true); RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS = b .comment( "Whether rainbow ants open randomly generated Infinity dimensions.", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 8584119e..7ce91fed 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -185,6 +185,7 @@ public class AntarchyNeoforge { AntarchyNeoforgeEntites.WATER_BOMB, AntarchyNeoforgeEntites.CREEPING_HORROR, AntarchyNeoforgeEntites.LURKING_TERROR, + AntarchyNeoforgeEntites.STINK_BUG, () -> AntarchyNeoforgeBlocks.DUPLICATOR_LOG.get(), () -> AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), () -> AntarchyNeoforgeBlocks.DUCT_TAPE.get(), @@ -225,9 +226,11 @@ public class AntarchyNeoforge { AntarchyNeoforgeItems.KRAKEN_TOOTH, () -> AntarchyNeoforgeItems.MOGGLES.get(), () -> AntarchyNeoforgeItems.REVERIE_BOTTLE.get(), + () -> AntarchyNeoforgeItems.STINK_BUG.get(), () -> AntarchyNeoforgeMisc.DREAD, () -> AntarchyNeoforgeMisc.PARALYZED, () -> AntarchyNeoforgeMisc.INVERTED, + () -> AntarchyNeoforgeMisc.STINKY, () -> AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_LOG.get(), () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), @@ -244,6 +247,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.DREAM_CAMPFIRE_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED_BLOCK_ENTITY.get(), + () -> AntarchyNeoforgeMisc.STINKY_GAS.get(), () -> AntarchyNeoforgeMisc.DOUBLE_DAMAGE_CHANCE, () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 9c98ffbe..e71ecf5d 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -104,6 +104,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.STINK_BUG.get(), context -> withParalyzedGeoLayer(new StinkBugRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.WASP.get(), context -> withParalyzedGeoLayer(new WaspRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BOMBER.get(), context -> withParalyzedGeoLayer(new BomberRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.JUMPY_BUG.get(), context -> withParalyzedGeoLayer(new JumpyBugRenderer(context))); @@ -194,6 +195,7 @@ public final class AntarchyNeoForgeClient { @SubscribeEvent public static void registerParticleProviders(RegisterParticleProvidersEvent event) { event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -356,6 +358,9 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CORNEA_STALK.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIMETAL_SCAFFOLDING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java index f2e9cf60..048f69a1 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java @@ -10,6 +10,8 @@ import net.neoforged.api.distmarker.Dist; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.client.event.ClientTickEvent; +import net.neoforged.neoforge.client.event.RenderGuiLayerEvent; +import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.network.PacketDistributor; @EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) @@ -65,6 +67,11 @@ public final class JumpyBootsClientHandler { wasCharging = true; } else if (wasCharging && chargeTicks > 0) { storedChargeTicks = chargeTicks; + if (jumpPressed) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(storedChargeTicks, player.isSprinting())); + reset(); + return; + } primeWindowTicks = JumpyBootsHelper.PRIME_WINDOW_TICKS; chargeTicks = 0; wasCharging = false; @@ -81,6 +88,17 @@ public final class JumpyBootsClientHandler { storedChargeTicks = 0; } + @SubscribeEvent + public static void onRenderGuiLayer(RenderGuiLayerEvent.Pre event) { + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null || !JumpyBootsItem.isWearingJumpyBoots(mc.player) || !isCharging()) { + return; + } + if (event.getName().equals(VanillaGuiLayers.EXPERIENCE_BAR) || event.getName().equals(VanillaGuiLayers.EXPERIENCE_LEVEL)) { + event.setCanceled(true); + } + } + public static boolean isCharging() { return chargeTicks > 0; } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java index a684b108..27e48599 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/network/JumpyBootsNetworking.java @@ -56,6 +56,7 @@ public final class JumpyBootsNetworking { } player.setDeltaMovement(newX, newY, newZ); + player.setPos(player.getX(), player.getY() + 0.001, player.getZ()); player.hasImpulse = true; player.hurtMarked = true; player.resetFallDistance(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index daeff25d..d11f817b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -115,7 +115,8 @@ public final class AntarchyNeoForgeEvents { } public static void onMissileSquidDeath(LivingDeathEvent event) { - if (!(event.getEntity() instanceof MissileSquidEntity)) return; + if (!(event.getEntity() instanceof MissileSquidEntity missileSquid)) return; + if (missileSquid.isSpawnedByKraken()) return; if (!(event.getEntity().level() instanceof ServerLevel serverLevel)) return; BlockPos deathPos = event.getEntity().blockPosition(); @@ -977,6 +978,8 @@ public final class AntarchyNeoForgeEvents { static void registerBrewingRecipes(RegisterBrewingRecipesEvent event) { event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.LUCID_EYE.get(), AntarchyNeoforgeMisc.INVERSION); event.getBuilder().addMix(AntarchyNeoforgeMisc.INVERSION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_INVERSION); + event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.STINK_BUG.get(), AntarchyNeoforgeMisc.STINKY_POTION); + event.getBuilder().addMix(AntarchyNeoforgeMisc.STINKY_POTION, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_STINKY); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.BASILISK_FANG.get(), AntarchyNeoforgeMisc.PARALYSIS); event.getBuilder().addMix(AntarchyNeoforgeMisc.PARALYSIS, Items.REDSTONE, AntarchyNeoforgeMisc.LONG_PARALYSIS); event.getBuilder().addMix(Potions.AWKWARD, AntarchyNeoforgeItems.MOLEWORM_ITEM.get(), AntarchyNeoforgeMisc.HASTE); @@ -1121,6 +1124,8 @@ public final class AntarchyNeoForgeEvents { ); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.AMBER_MOSS_BLOCK.get().asItem(), 0.65f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORNEA_EAR.get(), 0.65f); }); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index b3741c35..fc3d1ee7 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -178,10 +178,22 @@ public final class AntarchyNeoforgeBlocks { AntarchyNeoforgeItems::potentNyxiteBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK).lightLevel(state -> 3) )); + public static final DeferredBlock MYRMITE = BLOCKS.register("myrmite", + () -> new Block(nyxiteProperties())); + public static final DeferredBlock CHITEN_BLOCK = BLOCKS.register("chiten_block", + () -> new RotatedPillarBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.BONE_BLOCK).requiresCorrectToolForDrops())); public static final DeferredBlock UMBRAL_MOSS_BLOCK = BLOCKS.register("umbral_moss_block", () -> new UmbralMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); public static final DeferredBlock UMBRAL_MOSS_CARPET = BLOCKS.register("umbral_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock AMBER_MOSS_BLOCK = BLOCKS.register("amber_moss_block", + () -> new AmberMossBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_BLOCK))); + public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", + () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); + public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 0))); + public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", + () -> new VineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.VINE))); public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", () -> new DreamTorchBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.SOUL_TORCH))); public static final DeferredBlock DREAM_WALL_TORCH = BLOCKS.register("dream_wall_torch", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 589cf42a..cebd22a7 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -68,6 +68,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.WASP_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.BOMBER_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.JUMPY_BUG_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.STINK_BUG_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MISSILE_SQUID_SPAWN_EGG.get()); @@ -91,6 +92,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.PINK_MILKWEED_ITEM.get()); event.accept(AntarchyNeoforgeItems.TORCHFLOWER_BUSH_ITEM.get()); event.accept(AntarchyNeoforgeItems.HUSHWEED_ITEM.get()); + event.accept(AntarchyNeoforgeItems.AMBER_LICHEN_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CREEPVINE_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_ROOTED_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.INFESTED_COARSE_DIRT_ITEM.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO_BLOCK_ITEM.get()); @@ -142,6 +145,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.MANTIS_CLAW.get()); event.accept(AntarchyNeoforgeItems.KING_SCALE.get()); event.accept(AntarchyNeoforgeItems.QUEEN_SCALE.get()); + event.accept(AntarchyNeoforgeItems.CHITEN.get()); + event.accept(AntarchyNeoforgeItems.STINK_BUG.get()); event.accept(AntarchyNeoforgeItems.BRUTALFLY_WING.get()); event.accept(AntarchyNeoforgeItems.PRIMORDIAL_SCUTE.get()); event.accept(AntarchyNeoforgeItems.TRIFFID_GOO.get()); @@ -210,11 +215,11 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.PALE_NYXITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.NYXITE_SPIKE_ITEM.get()); event.accept(AntarchyNeoforgeItems.POTENT_NYXITE_ITEM.get()); - event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); - event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.ANTIMETAL_ITEM.get()); event.accept(AntarchyNeoforgeItems.POLISHED_ANTIMETAL_ITEM.get()); event.accept(AntarchyNeoforgeItems.ANTIMETAL_SCAFFOLDING_ITEM.get()); + event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.UMBRAL_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_TORCH_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_LANTERN_ITEM.get()); event.accept(AntarchyNeoforgeItems.DREAM_CAMPFIRE_ITEM.get()); @@ -235,6 +240,10 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.SMALL_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get()); + event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.AMBER_MOSS_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.AMBER_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.URANIUM_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.RAW_URANIUM_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.CUT_URANIUM_ITEM.get()); @@ -298,6 +307,8 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.EXTREME_SHRINKING)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.PARALYSIS)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.LONG_PARALYSIS)); + event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STINKY_POTION)); + event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.LONG_STINKY)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.HASTE)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.STRONG_HASTE)); event.accept(PotionContents.createItemStack(Items.POTION, AntarchyNeoforgeMisc.GROWING)); @@ -345,7 +356,7 @@ public class AntarchyNeoforgeCreativeModeTabs { "cut_dream_sandstone_slab" -> 4; // 5 - Umbral moss - case "umbral_moss_block", "umbral_moss_carpet" -> 5; + case "umbral_moss_block", "umbral_moss_carpet" -> 4; // 6 - All ores + metal storage/decorative blocks case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", @@ -362,7 +373,8 @@ public class AntarchyNeoforgeCreativeModeTabs { // 8 - Blood crystal blocks (not the shard ingredient) case "blood_crystal_block", "small_blood_crystal_bud", "medium_blood_crystal_bud", - "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster" -> 8; + "large_blood_crystal_bud", "budding_blood_crystal", "blood_crystal_cluster", + "myrmite", "chiten_block", "amber_moss_block", "amber_moss_carpet" -> 8; // 9 - Ouranwood leaves case "ouranwood_leaves" -> 9; @@ -371,7 +383,7 @@ public class AntarchyNeoforgeCreativeModeTabs { case "duplicator_sapling", "ouranwood_acorn" -> 10; // 11 - Plants and flowers - case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", + case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "amber_lichen", "creepvine", "triffid_goo_block", "wasp_nest", "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 11; @@ -424,7 +436,7 @@ public class AntarchyNeoforgeCreativeModeTabs { "uranium_ingot", "titanium_ingot", "lucid_eye", "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", "primordial_scute", "triffid_goo", "vortex_eye", - "king_scale", "queen_scale" -> 22; + "king_scale", "queen_scale", "chiten" -> 22; // 23 - Arrows (reserved for future arrow types) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 5fdc95c4..5e57e5cc 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -25,6 +25,7 @@ import com.craisinlord.antarchy.content.entity.OuranwoodChestBoatEntity; import com.craisinlord.antarchy.content.entity.ReverieEntity; import com.craisinlord.antarchy.content.entity.ScorpionEntity; import com.craisinlord.antarchy.content.entity.SizeRayProjectileEntity; +import com.craisinlord.antarchy.content.entity.StinkBugEntity; import com.craisinlord.antarchy.content.entity.TriffidEntity; import com.craisinlord.antarchy.content.entity.UpwardFallingBlockEntity; import com.craisinlord.antarchy.content.entity.WaspEntity; @@ -110,6 +111,11 @@ public final class AntarchyNeoforgeEntites { .sized(1.15F, 0.8F) .clientTrackingRange(8) .build("bed_bug")); + public static final DeferredHolder, EntityType> STINK_BUG = ENTITY_TYPES.register("stink_bug", + () -> EntityType.Builder.of(StinkBugEntity::new, MobCategory.CREATURE) + .sized(0.35F, 0.2F) + .clientTrackingRange(8) + .build("stink_bug")); public static final DeferredHolder, EntityType> WASP = ENTITY_TYPES.register("wasp", () -> EntityType.Builder.of(WaspEntity::new, MobCategory.MONSTER) .sized(0.8625F, 1.365F) @@ -263,12 +269,12 @@ public final class AntarchyNeoforgeEntites { .build("water_bomb")); public static final DeferredHolder, EntityType> CREEPING_HORROR = ENTITY_TYPES.register("creeping_horror", () -> EntityType.Builder.of(CreepingHorrorEntity::new, MobCategory.MONSTER) - .sized(0.7F, 0.5F) + .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("creeping_horror")); public static final DeferredHolder, EntityType> LURKING_TERROR = ENTITY_TYPES.register("lurking_terror", () -> EntityType.Builder.of(LurkingTerrorEntity::new, MobCategory.MONSTER) - .sized(0.8F, 0.6F) + .sized(1.3F, 1.5F) .clientTrackingRange(10) .build("lurking_terror")); public static final DeferredHolder, EntityType> UPWARD_FALLING_BLOCK = ENTITY_TYPES.register("upward_falling_block", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index e46ae002..6a91e498 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -46,6 +46,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.STINK_BUG.get(), StinkBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.WASP.get(), WaspEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BOMBER.get(), BomberEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.JUMPY_BUG.get(), JumpyBugEntity.createAttributes().build()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 0625e436..5d3d620e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -228,9 +228,11 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem INFESTED_ROOTED_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_ROOTED_DIRT); public static final DeferredItem INFESTED_COARSE_DIRT_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.INFESTED_COARSE_DIRT); public static final DeferredItem NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE); + public static final DeferredItem MYRMITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.MYRMITE); public static final DeferredItem POLISHED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POLISHED_NYXITE); public static final DeferredItem CHISELED_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHISELED_NYXITE); public static final DeferredItem NYXITE_BRICKS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_BRICKS); + public static final DeferredItem CHITEN_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_BLOCK); public static final DeferredItem NYXITE_STAIRS_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_STAIRS); public static final DeferredItem NYXITE_SLAB_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SLAB); public static final DeferredItem NYXITE_WALL_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_WALL); @@ -265,6 +267,10 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); + public static final DeferredItem AMBER_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_MOSS_BLOCK); + public static final DeferredItem AMBER_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET); + public static final DeferredItem AMBER_LICHEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_LICHEN); + public static final DeferredItem CREEPVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CREEPVINE); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), net.minecraft.core.Direction.UP)); public static final DeferredItem DREAM_LANTERN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DREAM_LANTERN); @@ -311,6 +317,8 @@ public final class AntarchyNeoforgeItems { () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); + public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem STINK_BUG = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BOOTS = ITEMS.register("jumpy_boots", () -> new JumpyBootsItem(JUMPY_BOOTS_ARMOR_MATERIAL, new Item.Properties().stacksTo(1).rarity(Rarity.UNCOMMON).fireResistant().durability(ArmorItem.Type.BOOTS.getDurability(37)))); @@ -482,7 +490,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem CATERPILLAR_SPAWN_EGG = ITEMS.register("caterpillar_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CATERPILLAR, 0xA8D96A, 0xF4E04D, new Item.Properties())); public static final DeferredItem BUTTERFLY_SPAWN_EGG = ITEMS.register("butterfly_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BUTTERFLY, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BUTTERFLY, 0x7A4A1E, 0xFF7A00, new Item.Properties())); public static final DeferredItem REVERIE_SPAWN_EGG = ITEMS.register("reverie_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.REVERIE, 0xF2F2F2, 0xBFC3C7, new Item.Properties())); public static final DeferredItem BRUTALFLY_SPAWN_EGG = ITEMS.register("brutalfly_spawn_egg", @@ -514,7 +522,9 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem BOMBER_SPAWN_EGG = ITEMS.register("bomber_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BOMBER, 0x7A7A7A, 0xB32020, new Item.Properties())); public static final DeferredItem JUMPY_BUG_SPAWN_EGG = ITEMS.register("jumpy_bug_spawn_egg", - () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.JUMPY_BUG, 0x111111, 0xFF7A00, new Item.Properties())); + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.JUMPY_BUG, 0x0A1636, 0x8A3E00, new Item.Properties())); + public static final DeferredItem STINK_BUG_SPAWN_EGG = ITEMS.register("stink_bug_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.STINK_BUG, 0x111111, 0xFF7A00, new Item.Properties())); public static final DeferredItem CLOUD_SHARK_SPAWN_EGG = ITEMS.register("cloud_shark_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.CLOUD_SHARK, 0xDDEAF4, 0x7F96A8, new Item.Properties())); public static final DeferredItem KRAKEN_SPAWN_EGG = ITEMS.register("kraken_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 8eb54663..3e39984c 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -8,6 +8,7 @@ import com.craisinlord.antarchy.content.effect.GrowthMobEffect; import com.craisinlord.antarchy.content.effect.InvertedMobEffect; import com.craisinlord.antarchy.content.effect.ParalyzedMobEffect; import com.craisinlord.antarchy.content.effect.ShrinkMobEffect; +import com.craisinlord.antarchy.content.effect.StinkyMobEffect; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; @@ -73,6 +74,7 @@ public final class AntarchyNeoforgeMisc { public static final DeferredHolder DREAD = MOB_EFFECTS.register("dread", DreadMobEffect::new); public static final DeferredHolder PARALYZED = MOB_EFFECTS.register("paralyzed", ParalyzedMobEffect::new); public static final DeferredHolder INVERTED = MOB_EFFECTS.register("inverted", InvertedMobEffect::new); + public static final DeferredHolder STINKY = MOB_EFFECTS.register("stinky", StinkyMobEffect::new); public static final DeferredHolder BLOODGLASS_WARD = MOB_EFFECTS.register("bloodglass_ward", com.craisinlord.antarchy.content.effect.BloodglassWardEffect::new); public static final DeferredHolder SHRINKING_EFFECT = MOB_EFFECTS.register("shrinking", ShrinkMobEffect::new); public static final DeferredHolder GROWTH_EFFECT = MOB_EFFECTS.register("growth", GrowthMobEffect::new); @@ -82,6 +84,10 @@ public final class AntarchyNeoforgeMisc { () -> new Potion(new MobEffectInstance(INVERTED, 600))); public static final DeferredHolder LONG_INVERSION = POTIONS.register("long_inversion", () -> new Potion("inversion", new MobEffectInstance(INVERTED, 2400))); + public static final DeferredHolder STINKY_POTION = POTIONS.register("stinky", + () -> new Potion(new MobEffectInstance(STINKY, 1200))); + public static final DeferredHolder LONG_STINKY = POTIONS.register("long_stinky", + () -> new Potion("stinky", new MobEffectInstance(STINKY, 2400))); public static final DeferredHolder PARALYSIS = POTIONS.register("paralysis", () -> new Potion(new MobEffectInstance(PARALYZED, 200))); public static final DeferredHolder LONG_PARALYSIS = POTIONS.register("long_paralysis", @@ -137,6 +143,8 @@ public final class AntarchyNeoforgeMisc { // Particle types public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", + () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 66c56cca..748f39bb 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -41,6 +41,7 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MOLEVORE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolevoreEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BED_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BedBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.STINK_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, StinkBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.LUCID.get(), SpawnPlacementTypes.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LucidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); From b00ee762ab2ff86ecd9ac15afe2e77564ddc0e64 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Thu, 25 Jun 2026 23:41:43 -0500 Subject: [PATCH 05/25] new stink bug, termites, started to fix new kraken --- .../antarchy/config/AntarchySettings.java | 14 + .../antarchy/content/AntarchyObjects.java | 7 + .../content/client/model/KrakenModel.java | 4 +- .../client/model/OctopusBombModel.java | 22 + .../content/client/model/TermiteModel.java | 27 + .../client/renderer/KrakenRenderer.java | 4 +- .../client/renderer/OctopusBombRenderer.java | 13 + .../client/renderer/StinkBugRenderer.java | 22 +- .../client/renderer/TermiteRenderer.java | 35 + .../content/entity/OctopusBombEntity.java | 684 ++++++ .../content/entity/StinkBugEntity.java | 28 +- .../content/entity/ToreterrorEntity.java | 286 ++- .../content/entity/kraken/KrakenEntity.java | 318 ++- .../worldgen/elythia/ElythiaBiomeSource.java | 51 +- .../mixins/SquidzookaEnchantMixin.java | 72 + .../resources/antarchy-common.mixins.json | 1 + .../antarchy/animations/kraken.animation.json | 5 + .../animations/octopus_bomb.animation.json | 4 +- .../animations/stink_bug.animation.json | 926 ++++++--- .../animations/termite.animation.json | 1836 +++++++++++++++++ .../animations/toreterror.animation.json | 1156 ++++++----- .../antarchy/blockstates/termite_nest.json | 4 +- .../assets/antarchy/geo/stink_bug.geo.json | 117 +- .../assets/antarchy/geo/termite.geo.json | 197 ++ .../assets/antarchy/geo/toreterror.geo.json | 6 +- .../resources/assets/antarchy/lang/en_us.json | 2 + .../antarchy/models/block/termite_nest.json | 12 +- .../models/item/octopus_bomb_spawn_egg.json | 3 + .../antarchy/textures/entity/kraken.png | Bin 0 -> 44419 bytes .../antarchy/textures/entity/moleworm.png | Bin 1468 -> 1123 bytes .../antarchy/textures/entity/stink_bug.png | Bin 674 -> 883 bytes .../antarchy/textures/entity/termite.png | Bin 0 -> 1713 bytes .../antarchy/textures/entity/toreterror.png | Bin 10190 -> 13769 bytes .../data/antarchy/dimension/elythia.json | 1 + .../data/minecraft/tags/block/climbable.json | 7 + .../tags/item/enchantable/crossbow.json | 3 +- .../fabric/AntarchyFabricContent.java | 34 +- .../antarchy/fabric/AntarchyFabricEvents.java | 1 + .../client/AntarchyFabricClientBootstrap.java | 2 + .../antarchy/neoforge/AntarchyNeoforge.java | 1 + .../client/AntarchyNeoForgeClient.java | 2 + .../registry/AntarchyNeoForgeEvents.java | 1 + .../registry/AntarchyNeoforgeBlocks.java | 5 +- .../AntarchyNeoforgeCreativeModeTabs.java | 5 +- .../registry/AntarchyNeoforgeEntites.java | 11 +- .../AntarchyNeoforgeEntityAttributes.java | 2 + .../registry/AntarchyNeoforgeItems.java | 5 + .../AntarchyNeoforgeSpawnPlacements.java | 2 + 48 files changed, 4786 insertions(+), 1152 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java create mode 100644 common/src/main/resources/assets/antarchy/animations/termite.animation.json create mode 100644 common/src/main/resources/assets/antarchy/geo/termite.geo.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/kraken.png create mode 100644 common/src/main/resources/assets/antarchy/textures/entity/termite.png create mode 100644 common/src/main/resources/data/minecraft/tags/block/climbable.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 8bb2de50..63a49f5f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -90,6 +90,8 @@ public final class AntarchySettings { private static ResourceKey rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia"); private static double krakenHealth = 1500.0D; private static double krakenAttackDamage = 45.0D; + private static double octopusBombHealth = 250.0D; + private static double octopusBombAttackDamage = 16.0D; private static double brutalflyHealth = 400.0D; private static double brutalflySwipeDamage = 15.0D; private static double brutalflySpitDamage = 5.0D; @@ -733,6 +735,18 @@ public final class AntarchySettings { return krakenAttackDamage; } + public static double octopusBombHealth() { + return octopusBombHealth; + } + + public static void setOctopusBombHealth(double value) { octopusBombHealth = value; } + + public static double octopusBombAttackDamage() { + return octopusBombAttackDamage; + } + + public static void setOctopusBombAttackDamage(double value) { octopusBombAttackDamage = value; } + public static double brutalflyHealth() { return brutalflyHealth; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index a5d0d49f..a9050d9d 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -18,6 +18,7 @@ import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.entity.flying_squirrel.FlyingSquirrelEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.kraken.KrakenEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; @@ -53,6 +54,8 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier> MISSILE_SQUID = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier> OCTOPUS_BOMB = (Supplier>) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier> MOLEWORM = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier> MANTIS = (Supplier>) UNBOUND; @@ -404,6 +407,10 @@ public final class AntarchyObjects { return state.is(DUPLICATOR_LOG.get()) || state.is(DUPLICATOR_SAPLING.get()); } + public static void setOctopusBomb(Supplier> supplier) { + OCTOPUS_BOMB = supplier; + } + public static BlockBehaviour.Properties shellstoneProperties() { return BlockBehaviour.Properties.ofFullCopy(Blocks.STONE).requiresCorrectToolForDrops(); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java index abed8910..c47a4fb4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/KrakenModel.java @@ -12,9 +12,7 @@ public class KrakenModel extends GeoModel { @Override public ResourceLocation getTextureResource(KrakenEntity animatable) { - return animatable.isPhaseTwo() - ? ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken_purple.png") - : ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken.png"); + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/kraken.png"); } @Override diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java new file mode 100644 index 00000000..8936dc67 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/OctopusBombModel.java @@ -0,0 +1,22 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class OctopusBombModel extends GeoModel { + @Override + public ResourceLocation getModelResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "geo/octopus_bomb.geo.json"); + } + + @Override + public ResourceLocation getTextureResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "textures/entity/octopus_bomb.png"); + } + + @Override + public ResourceLocation getAnimationResource(OctopusBombEntity animatable) { + return ResourceLocation.fromNamespaceAndPath("antarchy", "animations/octopus_bomb.animation.json"); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java new file mode 100644 index 00000000..b760aaf2 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/model/TermiteModel.java @@ -0,0 +1,27 @@ +package com.craisinlord.antarchy.content.client.model; + +import com.craisinlord.antarchy.Antarchy; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import net.minecraft.resources.ResourceLocation; +import software.bernie.geckolib.model.GeoModel; + +public class TermiteModel extends GeoModel { + private static final ResourceLocation MODEL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "geo/termite.geo.json"); + private static final ResourceLocation TEXTURE = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "textures/entity/termite.png"); + private static final ResourceLocation ANIMATIONS = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "animations/termite.animation.json"); + + @Override + public ResourceLocation getModelResource(TermiteEntity animatable) { + return MODEL; + } + + @Override + public ResourceLocation getTextureResource(TermiteEntity animatable) { + return TEXTURE; + } + + @Override + public ResourceLocation getAnimationResource(TermiteEntity animatable) { + return ANIMATIONS; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java index 153fd33f..83b72cc1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/KrakenRenderer.java @@ -8,7 +8,7 @@ import software.bernie.geckolib.renderer.GeoEntityRenderer; public class KrakenRenderer extends GeoEntityRenderer { public KrakenRenderer(EntityRendererProvider.Context context) { super(context, new KrakenModel()); - this.shadowRadius = 3.6F; - this.withScale(3.0F); + this.shadowRadius = 2.0F; + this.withScale(1.5F); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java new file mode 100644 index 00000000..5c557b9a --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/OctopusBombRenderer.java @@ -0,0 +1,13 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.OctopusBombModel; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; +import net.minecraft.client.renderer.entity.EntityRendererProvider; +import software.bernie.geckolib.renderer.GeoEntityRenderer; + +public class OctopusBombRenderer extends GeoEntityRenderer { + public OctopusBombRenderer(EntityRendererProvider.Context context) { + super(context, new OctopusBombModel()); + this.shadowRadius = 1.2F; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java index e7c6cc97..48cb9ada 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/StinkBugRenderer.java @@ -2,34 +2,16 @@ package com.craisinlord.antarchy.content.client.renderer; import com.craisinlord.antarchy.content.client.model.StinkBugModel; import com.craisinlord.antarchy.content.entity.StinkBugEntity; -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 StinkBugRenderer extends GeoEntityRenderer { - private static final float ADULT_SCALE = 0.75F; - private static final float BABY_SCALE = 0.50F; - private static final float ADULT_SHADOW_RADIUS = 0.6F; + private static final float ADULT_SCALE = 0.95F; + private static final float ADULT_SHADOW_RADIUS = 0.2F; public StinkBugRenderer(EntityRendererProvider.Context context) { super(context, new StinkBugModel()); this.shadowRadius = ADULT_SHADOW_RADIUS; this.withScale(ADULT_SCALE); } - - @Override - public void preRender(PoseStack poseStack, StinkBugEntity 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.isBaby()) { - poseStack.scale(BABY_SCALE, BABY_SCALE, BABY_SCALE); - this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; - } else { - this.shadowRadius = ADULT_SHADOW_RADIUS; - } - } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java new file mode 100644 index 00000000..9ccbad9b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/TermiteRenderer.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.content.client.model.TermiteModel; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +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 TermiteRenderer extends GeoEntityRenderer { + private static final float ADULT_SHADOW_RADIUS = 0.3F; + private static final float ADULT_SCALE = 0.85F; + private static final float BABY_SCALE = 0.5F; + + public TermiteRenderer(EntityRendererProvider.Context context) { + super(context, new TermiteModel()); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + + @Override + public void preRender(PoseStack poseStack, TermiteEntity 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.isBaby()) { + poseStack.scale(ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE, ADULT_SCALE * BABY_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS * BABY_SCALE; + } else { + poseStack.scale(ADULT_SCALE, ADULT_SCALE, ADULT_SCALE); + this.shadowRadius = ADULT_SHADOW_RADIUS; + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java new file mode 100644 index 00000000..b06d9949 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -0,0 +1,684 @@ +package com.craisinlord.antarchy.content.entity; + +import com.craisinlord.antarchy.content.AntarchySoundEvents; +import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; +import net.minecraft.core.BlockPos; +import net.minecraft.tags.FluidTags; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.syncher.EntityDataAccessor; +import net.minecraft.network.syncher.EntityDataSerializers; +import net.minecraft.network.syncher.SynchedEntityData; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.DifficultyInstance; +import net.minecraft.world.damagesource.DamageSource; +import net.minecraft.world.entity.*; +import net.minecraft.world.entity.ai.attributes.AttributeSupplier; +import net.minecraft.world.entity.ai.attributes.Attributes; +import net.minecraft.world.entity.ai.control.FlyingMoveControl; +import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; +import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; +import net.minecraft.world.entity.ai.goal.RandomLookAroundGoal; +import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; +import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; +import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; +import net.minecraft.world.entity.monster.Monster; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; +import software.bernie.geckolib.animatable.GeoEntity; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.*; +import software.bernie.geckolib.animation.AnimationState; +import software.bernie.geckolib.animation.keyframe.event.builtin.AutoPlayingSoundKeyframeHandler; +import software.bernie.geckolib.util.GeckoLibUtil; + +import java.util.List; +import java.util.Objects; + +public class OctopusBombEntity extends Monster implements GeoEntity { + private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); + private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor CAN_FLY = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); + + private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; + private static final String ACTION_TICKS_KEY = "ActionTicks"; + private static final String LAST_ATTACK_STATE_KEY = "LastAttackState"; + private static final String AGGRO_TRIGGERED_KEY = "AggroTriggered"; + private static final String GRAB_TARGET_KEY = "GrabTarget"; + private static final String CAN_FLY_KEY = "CanFly"; + private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken"; + + private static final int ATTACK_NONE = 0; + private static final int ATTACK_GRAB = 1; + private static final int ATTACK_SWIPE = 2; + private static final int ANIM_IDLE = 0; + private static final int ANIM_SWIM = 2; + private static final int ANIM_SWIPE = 3; + private static final int ANIM_GRAB = 4; + private static final int ANIM_DEATH = 5; + private static final int DEATH_ANIM_TICKS = 60; + private static final int INK_SPRAY_RANGE = 6; + private static final int INK_SPRAY_COOLDOWN = 80; + + private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); + private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("Swipe"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("Grab"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + + private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private float wanderDx, wanderDy, wanderDz; + private int wanderRetargetTicks; + private int attackCooldown; + private int actionTicks; + private int lastAttackState; + private boolean aggroTriggered; + private int grabbedTargetId = -1; + private int strafeRetargetTicks; + private int inkSprayCooldown; + private float orbitDirection = 1.0F; + private boolean spawnedByKraken; + + public OctopusBombEntity(EntityType entityType, Level level) { + super(entityType, level); + this.moveControl = new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.xpReward = 15; + } + + public static AttributeSupplier.Builder createAttributes() { + return Mob.createMobAttributes() + .add(Attributes.MAX_HEALTH, 250.0D) + .add(Attributes.ATTACK_DAMAGE, 16.0D) + .add(Attributes.MOVEMENT_SPEED, 0.28D) + .add(Attributes.FLYING_SPEED, 0.28D) + .add(Attributes.FOLLOW_RANGE, 32.0D) + .add(Attributes.KNOCKBACK_RESISTANCE, 0.4D); + } + + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + return level.getFluidState(pos).is(FluidTags.WATER) && level.getFluidState(pos.above()).is(FluidTags.WATER); + } + + @Override + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); + builder.define(ATTACK_STATE, ATTACK_NONE); + builder.define(ROARING, false); + builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(CAN_FLY, false); + } + + @Override + public void onSyncedDataUpdated(EntityDataAccessor key) { + super.onSyncedDataUpdated(key); + if (CAN_FLY.equals(key)) { + this.moveControl = this.canFly() + ? new FlyingMoveControl(this, 20, true) + : new SmoothSwimmingMoveControl(this, 80, 8, 0.06F, 0.12F, true); + this.navigation = this.canFly() + ? new FlyingPathNavigation(this, this.level()) + : new WaterBoundPathNavigation(this, this.level()); + } + } + + @Override + protected void registerGoals() { + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 20.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + + HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); + hurtByTargetGoal.setAlertOthers(MissileSquidEntity.class); + this.targetSelector.addGoal(1, hurtByTargetGoal); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { + controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + } + + private PlayState mainAnimController(AnimationState state) { + return switch (this.getAnimationState()) { + case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); + case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); + case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); + default -> state.setAndContinue(IDLE_ANIM); + }; + } + + @Override + public AnimatableInstanceCache getAnimatableInstanceCache() { + return this.geoCache; + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombAttackDamage()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); + } + + @Override + public void baseTick() { + int airSupply = this.getAirSupply(); + super.baseTick(); + if (!this.canFly()) { + this.handleAirSupply(airSupply); + } else { + this.setAirSupply(this.getMaxAirSupply()); + } + } + + @Override + public void tick() { + super.tick(); + this.setNoGravity(this.isInWater() || this.canFly()); + + if (this.level().isClientSide) { + this.updateSwimRotation(); + return; + } + + if (this.attackCooldown > 0) { + this.attackCooldown--; + } + if (this.inkSprayCooldown > 0) { + this.inkSprayCooldown--; + } + + LivingEntity target = this.getTarget(); + + this.tickDefensiveInkSpray(); + + if (target == null || !target.isAlive()) { + this.resetCombatState(); + if (this.isInWater()) { + this.tickWanderMovement(); + } + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (!this.aggroTriggered) { + this.startAggroRoar(); + } + + if (this.isRoaring()) { + this.tickRoarState(target); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + if (this.getAttackState() != ATTACK_NONE) { + this.tickCurrentAttack(target); + this.updateSwimRotation(); + this.updateAnimationState(); + return; + } + + this.tickPursuitMovement(target); + + if (this.attackCooldown <= 0) { + int nextAttack = this.chooseNextAttack(target); + if (nextAttack != ATTACK_NONE) { + this.startAttack(nextAttack); + } + } + + this.updateSwimRotation(); + this.updateAnimationState(); + } + + @Override + public void travel(Vec3 travelVector) { + if (this.isEffectiveAi() && (this.isInWater() || this.canFly())) { + this.moveRelative(this.getSpeed(), travelVector); + this.move(MoverType.SELF, this.getDeltaMovement()); + this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); + return; + } + + super.travel(travelVector); + } + + @Override + protected boolean shouldDespawnInPeaceful() { + return false; + } + + @Override + public boolean removeWhenFarAway(double distanceToClosestPlayer) { + return false; + } + + @Override + @Nullable + protected SoundEvent getAmbientSound() { + return null; + } + + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.KRAKEN_HURT.get(); + } + + @Override + protected SoundEvent getDeathSound() { + return AntarchySoundEvents.KRAKEN_DEATH.get(); + } + + @Override + protected float getSoundVolume() { + return 1.2F; + } + + @Override + public void addAdditionalSaveData(CompoundTag tag) { + super.addAdditionalSaveData(tag); + tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); + tag.putInt(ACTION_TICKS_KEY, this.actionTicks); + tag.putInt(LAST_ATTACK_STATE_KEY, this.lastAttackState); + tag.putBoolean(AGGRO_TRIGGERED_KEY, this.aggroTriggered); + tag.putBoolean(CAN_FLY_KEY, this.canFly()); + tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken); + if (this.grabbedTargetId >= 0) { + tag.putInt(GRAB_TARGET_KEY, this.grabbedTargetId); + } + tag.putBoolean("Roaring", this.isRoaring()); + tag.putInt("AttackState", this.getAttackState()); + tag.putInt("AnimationState", this.getAnimationState()); + } + + @Override + public void readAdditionalSaveData(CompoundTag tag) { + super.readAdditionalSaveData(tag); + this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); + this.actionTicks = tag.getInt(ACTION_TICKS_KEY); + this.lastAttackState = tag.contains(LAST_ATTACK_STATE_KEY) ? tag.getInt(LAST_ATTACK_STATE_KEY) : ATTACK_NONE; + this.aggroTriggered = tag.getBoolean(AGGRO_TRIGGERED_KEY); + this.setCanFly(tag.getBoolean(CAN_FLY_KEY)); + this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY); + this.grabbedTargetId = tag.contains(GRAB_TARGET_KEY) ? tag.getInt(GRAB_TARGET_KEY) : -1; + this.entityData.set(ROARING, tag.getBoolean("Roaring")); + this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.updateAnimationState(); + } + + public boolean isRoaring() { + return this.entityData.get(ROARING); + } + + public boolean canFly() { + return this.entityData.get(CAN_FLY); + } + + public int getAttackState() { + return this.entityData.get(ATTACK_STATE); + } + + public int getAnimationState() { + return this.entityData.get(ANIMATION_STATE); + } + + private void setRoaring(boolean roaring) { + this.entityData.set(ROARING, roaring); + } + + public void setCanFly(boolean canFly) { + this.entityData.set(CAN_FLY, canFly); + } + + public void launchAsProjectile(net.minecraft.world.entity.Entity owner, net.minecraft.world.phys.Vec3 velocity) { + this.spawnedByKraken = true; + this.setCanFly(true); + this.setDeltaMovement(velocity); + } + + private void setAttackState(int attackState) { + this.entityData.set(ATTACK_STATE, attackState); + } + + private void setAnimationState(int animationState) { + this.entityData.set(ANIMATION_STATE, animationState); + } + + private void startAggroRoar() { + this.aggroTriggered = true; + this.actionTicks = 30; + this.setRoaring(true); + this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 1.4F, 1.07F); + this.getNavigation().stop(); + this.setDeltaMovement(this.getDeltaMovement().scale(0.2D)); + this.updateAnimationState(); + } + + private void tickRoarState(LivingEntity target) { + this.getNavigation().stop(); + this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); + this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); + this.getLookControl().setLookAt(target, 25.0F, 20.0F); + + if (--this.actionTicks <= 0) { + this.actionTicks = 0; + this.setRoaring(false); + this.attackCooldown = 18; + } + } + + private void tickCurrentAttack(LivingEntity target) { + this.getNavigation().stop(); + this.getLookControl().setLookAt(target, 30.0F, 25.0F); + this.setDeltaMovement(this.getDeltaMovement().scale(0.8D)); + + switch (this.getAttackState()) { + case ATTACK_GRAB -> this.tickGrabAttack(target); + case ATTACK_SWIPE -> this.tickSwipeAttack(); + default -> this.finishAttack(); + } + } + + private void startAttack(int attackState) { + this.setAttackState(attackState); + this.grabbedTargetId = -1; + + if (attackState == ATTACK_GRAB) { + this.actionTicks = 55; + this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.2F, 1.07F); + } else if (attackState == ATTACK_SWIPE) { + this.actionTicks = 40; + this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.1F, 1.13F); + } + } + + private void tickGrabAttack(LivingEntity target) { + if (this.actionTicks == 48 && this.distanceToSqr(target) <= 42.25D) { + this.grabbedTargetId = target.getId(); + } + + LivingEntity grabbedTarget = this.getGrabbedTarget(); + if (grabbedTarget != null && grabbedTarget.isAlive()) { + this.holdGrabbedTarget(grabbedTarget); + if (this.actionTicks <= 45 && this.actionTicks > 10 && this.actionTicks % 10 == 0) { + if (this.level() instanceof ServerLevel serverLevel) { + grabbedTarget.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); + } + } + } + + if (--this.actionTicks <= 0) { + if (grabbedTarget != null && grabbedTarget.isAlive()) { + this.pullDown(grabbedTarget, 2.5D); + } + this.grabbedTargetId = -1; + this.finishAttack(); + } + } + + private void tickSwipeAttack() { + if (this.actionTicks == 10) { + this.performSwipe(); + } + + if (--this.actionTicks <= 0) { + this.finishAttack(); + } + } + + private void finishAttack() { + int finished = this.getAttackState(); + this.setAttackState(ATTACK_NONE); + this.actionTicks = 0; + this.attackCooldown = 18; + this.grabbedTargetId = -1; + this.lastAttackState = finished; + this.updateAnimationState(); + } + + private void tickPursuitMovement(LivingEntity target) { + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 10 + this.random.nextInt(12); + if (this.random.nextFloat() < 0.4F) { + this.orbitDirection *= -1.0F; + } + } + + Vec3 attackPoint = this.createCombatTarget(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, 1.1D); + } + + private void resetCombatState() { + this.setAttackState(ATTACK_NONE); + this.setRoaring(false); + this.setTarget(null); + this.actionTicks = 0; + this.grabbedTargetId = -1; + this.aggroTriggered = false; + this.updateAnimationState(); + } + + private void handleAirSupply(int previousAirSupply) { + if (this.isInWaterOrBubble()) { + this.setAirSupply(this.getMaxAirSupply()); + return; + } + + this.setAirSupply(previousAirSupply - 1); + if (this.getAirSupply() <= -20) { + this.setAirSupply(0); + this.hurt(this.damageSources().drown(), 2.0F); + } + } + + private void tickDefensiveInkSpray() { + if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) { + return; + } + + Player nearbyPlayer = this.level().getNearestPlayer(this, INK_SPRAY_RANGE); + if (nearbyPlayer == null || nearbyPlayer.isCreative() || nearbyPlayer.isSpectator()) { + return; + } + + this.inkSprayCooldown = INK_SPRAY_COOLDOWN; + this.playSound(AntarchySoundEvents.KRAKEN_HURT.get(), 1.0F, 1.49F); + + double centerY = this.getY() + this.getBbHeight() * 0.5D; + serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), centerY, this.getZ(), 55, 1.2D, 0.8D, 1.2D, 0.02D); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), centerY, this.getZ(), 35, 2.0D, 1.1D, 2.0D, 0.01D); + } + + private int chooseNextAttack(LivingEntity target) { + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 42.25D; + boolean canSwipe = distSqr <= 81.0D && this.isTargetInFront(target, -0.15D); + + if (!canGrab && !canSwipe) { + return ATTACK_NONE; + } + + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swipeWeight = canSwipe ? (this.lastAttackState == ATTACK_SWIPE ? 1 : 5) : 0; + int total = grabWeight + swipeWeight; + if (total == 0) return ATTACK_NONE; + + int roll = this.random.nextInt(total); + if (roll < grabWeight) return ATTACK_GRAB; + return ATTACK_SWIPE; + } + + private void performSwipe() { + AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, player -> player.isAlive() && this.isTargetInFront(player, -0.15D)); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + for (Player player : players) { + if (this.level() instanceof ServerLevel serverLevel) { + player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage); + Vec3 direction = player.position().subtract(this.position()); + Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z).normalize().scale(1.75D); + player.push(horizontal.x, 0.3D, horizontal.z); + player.hurtMarked = true; + } + } + } + + private void holdGrabbedTarget(LivingEntity target) { + Vec3 anchor = this.position().add(0.0D, -this.getBbHeight() * 0.4D, 0.0D); + target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); + target.resetFallDistance(); + if (target instanceof ServerPlayer serverPlayer) { + serverPlayer.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } else { + target.moveTo(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + } + target.hurtMarked = true; + } + + private void pullDown(LivingEntity target, double downwardStrength) { + target.push(0.0D, -downwardStrength, 0.0D); + target.hurtMarked = true; + } + + @Nullable + private LivingEntity getGrabbedTarget() { + if (this.grabbedTargetId < 0) { + return null; + } + net.minecraft.world.entity.Entity entity = this.level().getEntity(this.grabbedTargetId); + return entity instanceof LivingEntity livingEntity ? livingEntity : null; + } + + private boolean isTargetInFront(LivingEntity target, double minimumDot) { + Vec3 forward = this.getViewVector(1.0F); + Vec3 toTarget = target.position().subtract(this.position()).normalize(); + return forward.dot(toTarget) >= minimumDot; + } + + private Vec3 createCombatTarget(LivingEntity target) { + double radius = 9.0D; + double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = Mth.clamp( + target.getY() + 1.0D + Math.sin((this.tickCount + this.getId()) * 0.18D), + target.getY() - 3.0D, + target.getY() + 4.0D + ); + return new Vec3(x, y, z); + } + + private void updateSwimRotation() { + Vec3 velocity = this.getDeltaMovement(); + if (velocity.horizontalDistanceSqr() > 1.0E-4D) { + float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 6.0F)); + this.yBodyRot = this.getYRot(); + this.yHeadRot = this.getYRot(); + } + + if (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, 4.0F)); + } + } + + @Override + public void die(DamageSource damageSource) { + if (!this.level().isClientSide) { + this.setAnimationState(ANIM_DEATH); + this.actionTicks = 0; + this.attackCooldown = 0; + this.setAttackState(ATTACK_NONE); + this.setRoaring(false); + this.setDeltaMovement(Vec3.ZERO); + this.getNavigation().stop(); + } + super.die(damageSource); + } + + @Override + protected void tickDeath() { + this.deathTime++; + + if (this.deathTime == 1) { + this.setAnimationState(ANIM_DEATH); + } + + if (this.deathTime >= DEATH_ANIM_TICKS) { + this.remove(RemovalReason.KILLED); + this.dropExperience(this); + } + } + + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + + if (this.isRoaring()) { + this.setAnimationState(ANIM_IDLE); + return; + } + + switch (this.getAttackState()) { + case ATTACK_GRAB -> { + this.setAnimationState(ANIM_GRAB); + return; + } + case ATTACK_SWIPE -> { + this.setAnimationState(ANIM_SWIPE); + return; + } + default -> { + } + } + + if (!this.isInWater()) { + this.setAnimationState(ANIM_SWIM); + return; + } + + Vec3 velocity = this.getDeltaMovement(); + double horizontalSpeedSqr = velocity.horizontalDistanceSqr(); + double verticalSpeedSqr = velocity.y * velocity.y; + if (horizontalSpeedSqr > 0.03D && horizontalSpeedSqr > verticalSpeedSqr * 2.5D) { + this.setAnimationState(ANIM_SWIM); + return; + } + + this.setAnimationState(ANIM_IDLE); + } + + private void tickWanderMovement() { + if (--this.wanderRetargetTicks <= 0) { + this.wanderRetargetTicks = 40 + this.random.nextInt(40); + float angle = this.random.nextFloat() * (float) (Math.PI * 2); + this.wanderDx = Mth.cos(angle) * 0.1f; + this.wanderDy = -0.05f + this.random.nextFloat() * 0.1f; + this.wanderDz = Mth.sin(angle) * 0.1f; + } + this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, this.wanderDy, this.wanderDz)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java index 791186f4..5c46a8ca 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/StinkBugEntity.java @@ -7,8 +7,6 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.Difficulty; import net.minecraft.world.damagesource.DamageSource; -import net.minecraft.world.effect.MobEffectInstance; -import net.minecraft.tags.EntityTypeTags; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; @@ -37,9 +35,12 @@ import software.bernie.geckolib.util.GeckoLibUtil; public class StinkBugEntity extends Animal implements GeoEntity { private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); + private static final RawAnimation FART_ANIM = RawAnimation.begin().thenPlay("fart"); + private static final int FART_ANIMATION_TICKS = 30; private static final int STINK_BURST_PARTICLES = 32; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private int fartAnimationTicks; public StinkBugEntity(EntityType entityType, Level level) { super(entityType, level); @@ -73,18 +74,8 @@ public class StinkBugEntity extends Animal implements GeoEntity { public void tick() { super.tick(); - if (this.level().isClientSide || this.tickCount % 10 != 0) { - return; - } - - for (var target : this.level().getEntitiesOfClass( - net.minecraft.world.entity.LivingEntity.class, - this.getBoundingBox().inflate(StinkyBehavior.STINK_BUG_AURA_RADIUS), - entity -> entity != this - && entity.isAlive() - && !entity.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS) - )) { - target.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), StinkyBehavior.STINKY_EFFECT_DURATION_TICKS, 0, false, true, true)); + if (this.fartAnimationTicks > 0) { + this.fartAnimationTicks--; } } @@ -92,6 +83,7 @@ public class StinkBugEntity extends Animal implements GeoEntity { public boolean hurt(DamageSource source, float amount) { boolean hurt = super.hurt(source, amount); if (hurt) { + this.triggerFartAnimation(); StinkyBehavior.emitBurst(this, STINK_BURST_PARTICLES); } return hurt; @@ -119,7 +111,15 @@ public class StinkBugEntity extends Animal implements GeoEntity { } private PlayState mainAnimController(AnimationState animationState) { + if (this.fartAnimationTicks > 0) { + animationState.setAnimation(FART_ANIM); + return PlayState.CONTINUE; + } animationState.setAnimation(animationState.isMoving() ? WALK_ANIM : IDLE_ANIM); return PlayState.CONTINUE; } + + private void triggerFartAnimation() { + this.fartAnimationTicks = FART_ANIMATION_TICKS; + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java index fd5aedc9..541afda0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ToreterrorEntity.java @@ -63,9 +63,11 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private static final int ANIM_WALK = 1; private static final int ANIM_SHOOT = 2; private static final int ANIM_JUMP_ATTACK = 3; - private static final int ANIM_SPIN = 4; - private static final int ANIM_DEATH = 5; - private static final int ANIM_RAPID_SHOOT = 6; + private static final int ANIM_SPIN_START = 4; + private static final int ANIM_SPIN_LOOP = 5; + private static final int ANIM_SPIN_END = 6; + private static final int ANIM_DEATH = 7; + private static final int ANIM_RAPID_SHOOT = 8; private static final int ATTACK_RAPID_FIRE = 0; private static final int ATTACK_HUGE_BOMB = 1; @@ -81,15 +83,21 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private static final int JUMP_TOTAL_TICKS = 40; private static final int JUMP_LAUNCH_TICK = 10; private static final int JUMP_SHAKE_TICKS = 25; - private static final int SPIN_TOTAL_TICKS = 40; - private static final int SPIN_START_TICK = 3; - private static final int SPIN_END_TICK = 22; + private static final int SPIN_START_TOTAL_TICKS = 5; + private static final int SPIN_LOOP_MIN_TICKS = 200; + private static final int SPIN_LOOP_MAX_TICKS = 300; + private static final int SPIN_END_TOTAL_TICKS = 10; private static final int SPIN_HIT_INTERVAL = 5; + private static final int SPIN_STUCK_FAIL_LIMIT = 10; private static final double CLOSE_RANGE_SQR = 64.0D; private static final double JUMP_RANGE_SQR = 400.0D; private static final double RANGED_MAX_RANGE_SQR = 625.0D; + private static final double SPIN_TRIGGER_RANGE_SQR = 225.0D; + private static final double SPIN_LEASH_RANGE_SQR = 225.0D; private static final double SPIN_RADIUS = 4.5D; + private static final double SPIN_MOVE_SPEED = 1.7D; + private static final double SPIN_ANIMATION_SPEED = 0.7D; private static final double JUMP_SHOCKWAVE_RADIUS = 6.0D; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("Idle"); @@ -97,7 +105,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private static final RawAnimation SHOOT_ANIM = RawAnimation.begin().thenPlay("shoot").thenLoop("Idle"); private static final RawAnimation RAPID_SHOOT_ANIM = RawAnimation.begin().thenLoop("shoot"); private static final RawAnimation JUMP_ANIM = RawAnimation.begin().thenPlay("jump_attack").thenLoop("Idle"); - private static final RawAnimation SPIN_ANIM = RawAnimation.begin().thenPlay("spin_attack").thenLoop("Idle"); + private static final RawAnimation SPIN_START_ANIM = RawAnimation.begin().thenPlay("spin_attack_start"); + private static final RawAnimation SPIN_LOOP_ANIM = RawAnimation.begin().thenLoop("spin_attack"); + private static final RawAnimation SPIN_END_ANIM = RawAnimation.begin().thenPlay("spin_attack_end"); private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlayAndHold("death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -105,7 +115,10 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private int shootAnimTicks; private int jumpAnimTicks; - private int spinAnimTicks; + private int spinStartTicks; + private int spinLoopTicks; + private int spinEndTicks; + private int spinLoopTotalTicks; private int shootCooldown; private int jumpCooldown; private int spinCooldown; @@ -116,6 +129,9 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private boolean shootBomberFired; private boolean shootBomberFiredSecond; private int rapidFireNextTick; + private Vec3 spinDirection = Vec3.ZERO; + private int spinStrafeSign = 1; + private int spinStuckTicks; private final Map spinHitCooldowns = new HashMap<>(); public ToreterrorEntity(EntityType entityType, Level level) { @@ -166,12 +182,18 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private PlayState mainAnimController(AnimationState state) { int animState = this.getAnimationState(); + state.getController().setAnimationSpeed(1.0D); return switch (animState) { case ANIM_WALK -> state.setAndContinue(WALK_ANIM); case ANIM_SHOOT -> state.setAndContinue(SHOOT_ANIM); case ANIM_RAPID_SHOOT -> state.setAndContinue(RAPID_SHOOT_ANIM); case ANIM_JUMP_ATTACK -> state.setAndContinue(JUMP_ANIM); - case ANIM_SPIN -> state.setAndContinue(SPIN_ANIM); + case ANIM_SPIN_START -> state.setAndContinue(SPIN_START_ANIM); + case ANIM_SPIN_LOOP -> { + state.getController().setAnimationSpeed(SPIN_ANIMATION_SPEED); + yield state.setAndContinue(SPIN_LOOP_ANIM); + } + case ANIM_SPIN_END -> state.setAndContinue(SPIN_END_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); default -> state.setAndContinue(IDLE_ANIM); }; @@ -209,8 +231,8 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.tickShootAnimation(); } else if (this.jumpAnimTicks > 0) { this.tickJumpAnimation(); - } else if (this.spinAnimTicks > 0) { - this.tickSpinAnimation(); + } else if (this.isSpinSequenceActive()) { + this.tickSpinSequence(); } else { this.updateIdleAnimation(); } @@ -242,7 +264,6 @@ public class ToreterrorEntity extends Monster implements GeoEntity { private void enterPhase2() { this.entityData.set(PHASE_2, true); - this.bossEvent.setColor(BossEvent.BossBarColor.RED); } public boolean isPhase2() { @@ -303,7 +324,7 @@ public class ToreterrorEntity extends Monster implements GeoEntity { this.setAnimationState(ANIM_DEATH); this.shootAnimTicks = 0; this.jumpAnimTicks = 0; - this.spinAnimTicks = 0; + this.stopSpinSequence(); this.setDeltaMovement(Vec3.ZERO); this.getNavigation().stop(); } @@ -339,7 +360,11 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } private boolean isInAttackAnimation() { - return this.shootAnimTicks > 0 || this.jumpAnimTicks > 0 || this.spinAnimTicks > 0; + return this.shootAnimTicks > 0 || this.jumpAnimTicks > 0 || this.isSpinSequenceActive(); + } + + private boolean isSpinSequenceActive() { + return this.spinStartTicks > 0 || this.spinLoopTicks > 0 || this.spinEndTicks > 0; } private void tickShootAnimation() { @@ -405,21 +430,220 @@ public class ToreterrorEntity extends Monster implements GeoEntity { } } - private void tickSpinAnimation() { - this.setAnimationState(ANIM_SPIN); - int elapsed = SPIN_TOTAL_TICKS - this.spinAnimTicks; + private void tickSpinSequence() { this.getNavigation().stop(); - this.setDeltaMovement(this.getDeltaMovement().multiply(0.7D, 1.0D, 0.7D)); - if (elapsed >= SPIN_START_TICK && elapsed <= SPIN_END_TICK && elapsed % SPIN_HIT_INTERVAL == 0) { + if (this.spinStartTicks > 0) { + this.tickSpinStart(); + return; + } + if (this.spinLoopTicks > 0) { + this.tickSpinLoop(); + return; + } + this.tickSpinEnd(); + } + + private void tickSpinStart() { + this.setAnimationState(ANIM_SPIN_START); + this.setDeltaMovement(this.getDeltaMovement().scale(0.75D)); + LivingEntity target = this.getTarget(); + if (target != null) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() > 1.0E-4D) { + this.spinDirection = towardTarget; + this.lookInDirection(towardTarget); + } + } + this.spinStartTicks--; + } + + private void tickSpinLoop() { + this.setAnimationState(ANIM_SPIN_LOOP); + LivingEntity target = this.getTarget(); + if (target == null || !target.isAlive()) { + this.beginSpinEnd(); + return; + } + + this.updateSpinDirection(target); + if (!this.moveDuringSpin()) { + this.spinStuckTicks++; + if (this.spinStuckTicks >= SPIN_STUCK_FAIL_LIMIT) { + this.beginSpinEnd(); + return; + } + } else { + this.spinStuckTicks = 0; + } + + int elapsed = this.spinLoopTotalTicks - this.spinLoopTicks; + if (elapsed % SPIN_HIT_INTERVAL == 0) { this.applySpinDamage(); } - this.spinAnimTicks--; - if (this.spinAnimTicks <= 0) { - this.spinCooldown = 160 + this.random.nextInt(80); + + this.lookInDirection(this.spinDirection); + this.spinLoopTicks--; + if (this.spinLoopTicks <= 0) { + this.beginSpinEnd(); + } + } + + private void tickSpinEnd() { + this.setAnimationState(ANIM_SPIN_END); + this.setDeltaMovement(this.getDeltaMovement().multiply(0.7D, 1.0D, 0.7D)); + this.spinEndTicks--; + if (this.spinEndTicks <= 0) { + this.stopSpinSequence(); + this.spinCooldown = 260 + this.random.nextInt(80); this.spinHitCooldowns.clear(); } } + private void updateSpinDirection(LivingEntity target) { + Vec3 towardTarget = horizontalDirectionTo(target.position()); + if (towardTarget.lengthSqr() <= 1.0E-4D) { + return; + } + if (this.distanceToSqr(target) > SPIN_LEASH_RANGE_SQR) { + this.spinDirection = towardTarget; + return; + } + Vec3 forward = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : towardTarget; + Vec3 strafe = new Vec3(-towardTarget.z, 0.0D, towardTarget.x).scale(this.spinStrafeSign); + Vec3 combined = forward.scale(1.2D).add(towardTarget.scale(0.15D)).add(strafe.scale(1.35D)); + this.spinDirection = combined.lengthSqr() > 1.0E-4D ? combined.normalize() : towardTarget; + } + + private boolean moveDuringSpin() { + Vec3 direction = this.spinDirection.lengthSqr() > 1.0E-4D ? this.spinDirection.normalize() : Vec3.ZERO; + if (direction == Vec3.ZERO) { + return false; + } + + if (this.trySpinMoves(direction, false)) { + return true; + } + + this.spinStrafeSign *= -1; + Vec3 bounced = rotateHorizontal(direction, this.spinStrafeSign * 35.0D); + if (this.trySpinMoves(bounced, true)) { + return true; + } + + Vec3 reversed = direction.scale(-1.0D); + if (this.trySpinMoves(reversed, true)) { + return true; + } + + Vec3 reversedBounce = rotateHorizontal(reversed, this.spinStrafeSign * 25.0D); + return this.trySpinMoves(reversedBounce, true); + } + + private boolean trySpinMoves(Vec3 baseDirection, boolean bounced) { + Vec3[] attempts = new Vec3[]{ + baseDirection, + rotateHorizontal(baseDirection, 28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -28.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, 52.0D * this.spinStrafeSign), + rotateHorizontal(baseDirection, -52.0D * this.spinStrafeSign) + }; + for (Vec3 attempt : attempts) { + if (this.trySpinMove(attempt, 0.0D, 0.0D) || this.trySpinMove(attempt, 1.0D, 0.42D) || this.trySpinMove(attempt, -1.0D, -0.28D)) { + this.spinDirection = attempt.normalize(); + if (bounced) { + this.spinStrafeSign *= -1; + } + return true; + } + } + return false; + } + + private boolean trySpinMove(Vec3 direction, double yOffset, double verticalVelocity) { + Vec3 horizontalMove = new Vec3(direction.x * SPIN_MOVE_SPEED, 0.0D, direction.z * SPIN_MOVE_SPEED); + AABB movedBox = this.getBoundingBox().move(horizontalMove.x, yOffset, horizontalMove.z); + if (!this.level().noCollision(this, movedBox)) { + return false; + } + if (!this.hasSpinSupport(movedBox)) { + return false; + } + + this.setDeltaMovement(horizontalMove.x, verticalVelocity, horizontalMove.z); + this.hasImpulse = true; + return true; + } + + private boolean hasSpinSupport(AABB box) { + double probeY = box.minY - 0.2D; + double[][] probes = new double[][]{ + {box.getCenter().x, box.getCenter().z}, + {box.minX + 0.25D, box.minZ + 0.25D}, + {box.minX + 0.25D, box.maxZ - 0.25D}, + {box.maxX - 0.25D, box.minZ + 0.25D}, + {box.maxX - 0.25D, box.maxZ - 0.25D} + }; + + for (double[] probe : probes) { + BlockPos supportPos = BlockPos.containing(probe[0], probeY, probe[1]); + if (this.level().loadedAndEntityCanStandOnFace(supportPos, this, Direction.UP)) { + return true; + } + BlockPos lowerSupportPos = supportPos.below(); + if (this.level().loadedAndEntityCanStandOnFace(lowerSupportPos, this, Direction.UP)) { + return true; + } + } + return false; + } + + private Vec3 horizontalDirectionTo(Vec3 targetPos) { + Vec3 diff = targetPos.subtract(this.position()); + Vec3 horizontal = new Vec3(diff.x, 0.0D, diff.z); + return horizontal.lengthSqr() > 1.0E-4D ? horizontal.normalize() : Vec3.ZERO; + } + + private void lookInDirection(Vec3 direction) { + if (direction.lengthSqr() <= 1.0E-4D) { + return; + } + float yaw = (float) (net.minecraft.util.Mth.atan2(direction.z, direction.x) * (180.0D / Math.PI)) - 90.0F; + this.setYRot(yaw); + this.yBodyRot = yaw; + this.yHeadRot = yaw; + this.setYHeadRot(yaw); + } + + private static Vec3 rotateHorizontal(Vec3 direction, double degrees) { + if (direction.lengthSqr() <= 1.0E-4D) { + return Vec3.ZERO; + } + double radians = Math.toRadians(degrees); + double cos = Math.cos(radians); + double sin = Math.sin(radians); + double x = direction.x * cos - direction.z * sin; + double z = direction.x * sin + direction.z * cos; + return new Vec3(x, 0.0D, z).normalize(); + } + + private void beginSpinEnd() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + if (this.spinEndTicks <= 0) { + this.spinEndTicks = SPIN_END_TOTAL_TICKS; + } + } + + private void stopSpinSequence() { + this.spinStartTicks = 0; + this.spinLoopTicks = 0; + this.spinEndTicks = 0; + this.spinLoopTotalTicks = 0; + this.spinDirection = Vec3.ZERO; + this.spinStrafeSign = 1; + this.spinStuckTicks = 0; + } + private Vec3 calcLaunchVelocity(Vec3 from, Vec3 to, double minSpeed) { Vec3 diff = to.subtract(from); double dh = Math.sqrt(diff.x * diff.x + diff.z * diff.z); @@ -618,22 +842,32 @@ public class ToreterrorEntity extends Monster implements GeoEntity { LivingEntity target = ToreterrorEntity.this.getTarget(); if (target == null || ToreterrorEntity.this.isInAttackAnimation()) return false; if (ToreterrorEntity.this.spinCooldown > 0) return false; - return ToreterrorEntity.this.distanceToSqr(target) <= CLOSE_RANGE_SQR && ToreterrorEntity.this.onGround(); + return ToreterrorEntity.this.distanceToSqr(target) <= SPIN_TRIGGER_RANGE_SQR && ToreterrorEntity.this.onGround(); } @Override public void start() { - ToreterrorEntity.this.spinAnimTicks = SPIN_TOTAL_TICKS; + LivingEntity target = ToreterrorEntity.this.getTarget(); + ToreterrorEntity.this.spinStartTicks = SPIN_START_TOTAL_TICKS; + ToreterrorEntity.this.spinLoopTotalTicks = SPIN_LOOP_MIN_TICKS + ToreterrorEntity.this.random.nextInt(SPIN_LOOP_MAX_TICKS - SPIN_LOOP_MIN_TICKS + 1); + ToreterrorEntity.this.spinLoopTicks = ToreterrorEntity.this.spinLoopTotalTicks; + ToreterrorEntity.this.spinEndTicks = 0; + ToreterrorEntity.this.spinStuckTicks = 0; + ToreterrorEntity.this.spinStrafeSign = ToreterrorEntity.this.random.nextBoolean() ? 1 : -1; + ToreterrorEntity.this.spinHitCooldowns.clear(); + ToreterrorEntity.this.spinDirection = target == null + ? Vec3.ZERO + : ToreterrorEntity.this.horizontalDirectionTo(target.position()); } @Override public boolean canContinueToUse() { - return ToreterrorEntity.this.spinAnimTicks > 0; + return ToreterrorEntity.this.isSpinSequenceActive(); } @Override public void stop() { - ToreterrorEntity.this.spinAnimTicks = 0; + ToreterrorEntity.this.stopSpinSequence(); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java index 90491c58..229c946b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/kraken/KrakenEntity.java @@ -5,8 +5,9 @@ import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; - +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.damage.AntarchyDamageTypes; + import java.util.List; import java.util.Objects; import net.minecraft.core.BlockPos; @@ -68,24 +69,28 @@ public class KrakenEntity extends Monster implements GeoEntity { private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; private static final String ACTION_TICKS_KEY = "ActionTicks"; private static final String PHASE_TRANSITION_TICKS_KEY = "PhaseTransitionTicks"; - private static final String NEXT_ATTACK_INDEX_KEY = "NextAttackIndex"; - private static final String SLAM_COOLDOWN_KEY = "SlamCooldown"; private static final String PHASE_SUMMON_COOLDOWN_KEY = "PhaseSummonCooldown"; private static final String LAST_ATTACK_STATE_KEY = "LastAttackState"; private static final String AGGRO_TRIGGERED_KEY = "AggroTriggered"; private static final String GRAB_TARGET_KEY = "GrabTarget"; + private static final double BOSS_BAR_RANGE = 40.0D; + private static final int ATTACK_NONE = 0; private static final int ATTACK_GRAB = 1; - private static final int ATTACK_SWIPE = 2; - private static final int ATTACK_SLAM = 3; - private static final int ANIM_IDLE = 0; - private static final int ANIM_IDLE_TWO = 1; - private static final int ANIM_SWIM = 2; - private static final int ANIM_SWIPE = 3; - private static final int ANIM_GRAB = 4; + private static final int ATTACK_SWING_LEFT = 2; + private static final int ATTACK_SWING_RIGHT = 3; + + // Synced animation state values + private static final int ANIM_NONE = 0; + private static final int ANIM_CRY = 1; + private static final int ANIM_GRAB = 2; + private static final int ANIM_SWING_LEFT = 3; + private static final int ANIM_SWING_RIGHT = 4; private static final int ANIM_DEATH = 5; + private static final int DEATH_ANIM_TICKS = 60; + private static final ResourceLocation PHASE_TWO_SPEED_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_speed"); private static final ResourceLocation PHASE_TWO_FLYING_SPEED_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_flying_speed"); private static final ResourceLocation PHASE_TWO_DAMAGE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "kraken_phase_two_damage"); @@ -96,21 +101,21 @@ public class KrakenEntity extends Monster implements GeoEntity { private static final AttributeModifier PHASE_TWO_DAMAGE = new AttributeModifier(PHASE_TWO_DAMAGE_ID, PHASE_TWO_DAMAGE_BONUS, AttributeModifier.Operation.ADD_VALUE); private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); - private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); - private static final RawAnimation SWIPE_ANIM = RawAnimation.begin().thenPlay("Swipe"); - private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("Grab"); - private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); + private static final RawAnimation CRY_ANIM = RawAnimation.begin().thenPlay("cry"); + private static final RawAnimation GRAB_ANIM = RawAnimation.begin().thenPlay("grab"); + private static final RawAnimation SWING_LEFT_ANIM = RawAnimation.begin().thenPlay("swing_left"); + private static final RawAnimation SWING_RIGHT_ANIM = RawAnimation.begin().thenPlay("swing_right"); + private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("death"); private final ServerBossEvent bossEvent = new ServerBossEvent(Component.literal("The Kraken"), BossEvent.BossBarColor.BLUE, BossEvent.BossBarOverlay.PROGRESS); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + @Nullable private Vec3 patrolTarget; private int patrolRetargetTicks; private int attackCooldown; private int actionTicks; private int phaseTransitionTicks; - private int nextAttackIndex; - private int slamCooldown; private int phaseSummonCooldown; private int lastAttackState; private boolean aggroTriggered; @@ -121,6 +126,7 @@ public class KrakenEntity extends Monster implements GeoEntity { private int strafeRetargetTicks; private float orbitDirection = 1.0F; private boolean stormActive; + public KrakenEntity(EntityType entityType, Level level) { super(entityType, level); this.moveControl = new FlyingMoveControl(this, 20, true); @@ -149,7 +155,7 @@ public class KrakenEntity extends Monster implements GeoEntity { builder.define(ATTACK_STATE, ATTACK_NONE); builder.define(ROARING, false); builder.define(PHASE_TWO, false); - builder.define(ANIMATION_STATE, ANIM_IDLE); + builder.define(ANIMATION_STATE, ANIM_NONE); } @Override @@ -165,17 +171,26 @@ public class KrakenEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController) + // idle_controller always loops idle; action_controller layers on top when active + controllers.add(new AnimationController<>(this, "idle_controller", 0, state -> { + if (this.getAnimationState() == ANIM_DEATH) { + return PlayState.STOP; + } + state.setAndContinue(IDLE_ANIM); + return PlayState.CONTINUE; + }).setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + controllers.add(new AnimationController<>(this, "action_controller", 0, this::actionAnimController) .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); } - private PlayState mainAnimController(AnimationState state) { + private PlayState actionAnimController(AnimationState state) { return switch (this.getAnimationState()) { + case ANIM_CRY -> state.setAndContinue(CRY_ANIM); case ANIM_GRAB -> state.setAndContinue(GRAB_ANIM); - case ANIM_SWIPE -> state.setAndContinue(SWIPE_ANIM); - case ANIM_SWIM -> state.setAndContinue(SWIM_ANIM); + case ANIM_SWING_LEFT -> state.setAndContinue(SWING_LEFT_ANIM); + case ANIM_SWING_RIGHT -> state.setAndContinue(SWING_RIGHT_ANIM); case ANIM_DEATH -> state.setAndContinue(DEATH_ANIM); - default -> state.setAndContinue(IDLE_ANIM); + default -> PlayState.STOP; }; } @@ -221,9 +236,6 @@ public class KrakenEntity extends Monster implements GeoEntity { if (this.attackCooldown > 0) { this.attackCooldown--; } - if (this.slamCooldown > 0) { - this.slamCooldown--; - } if (this.phaseSummonCooldown > 0) { this.phaseSummonCooldown--; } @@ -307,7 +319,8 @@ public class KrakenEntity extends Monster implements GeoEntity { if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypes.LIGHTNING_BOLT) || source.is(AntarchyDamageTypes.KRAKEN_LIGHTNING) - || source.getEntity() instanceof MissileSquidEntity) { + || source.getEntity() instanceof MissileSquidEntity + || source.getEntity() instanceof OctopusBombEntity) { return false; } @@ -351,8 +364,6 @@ public class KrakenEntity extends Monster implements GeoEntity { tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); tag.putInt(ACTION_TICKS_KEY, this.actionTicks); tag.putInt(PHASE_TRANSITION_TICKS_KEY, this.phaseTransitionTicks); - tag.putInt(NEXT_ATTACK_INDEX_KEY, this.nextAttackIndex); - tag.putInt(SLAM_COOLDOWN_KEY, this.slamCooldown); tag.putInt(PHASE_SUMMON_COOLDOWN_KEY, this.phaseSummonCooldown); tag.putInt(LAST_ATTACK_STATE_KEY, this.lastAttackState); tag.putBoolean(AGGRO_TRIGGERED_KEY, this.aggroTriggered); @@ -374,8 +385,6 @@ public class KrakenEntity extends Monster implements GeoEntity { this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); this.actionTicks = tag.getInt(ACTION_TICKS_KEY); this.phaseTransitionTicks = tag.getInt(PHASE_TRANSITION_TICKS_KEY); - this.nextAttackIndex = tag.getInt(NEXT_ATTACK_INDEX_KEY); - this.slamCooldown = tag.getInt(SLAM_COOLDOWN_KEY); this.phaseSummonCooldown = tag.getInt(PHASE_SUMMON_COOLDOWN_KEY); this.lastAttackState = tag.contains(LAST_ATTACK_STATE_KEY) ? tag.getInt(LAST_ATTACK_STATE_KEY) : ATTACK_NONE; this.aggroTriggered = tag.getBoolean(AGGRO_TRIGGERED_KEY); @@ -384,7 +393,7 @@ public class KrakenEntity extends Monster implements GeoEntity { this.entityData.set(ROARING, tag.getBoolean("Roaring")); this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); this.entityData.set(PHASE_TWO, tag.getBoolean("PhaseTwo")); - this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); + this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_NONE); this.lightningStrikeCooldown = tag.getInt("LightningStrikeCooldown"); this.lightningAmbientCooldown = tag.getInt("LightningAmbientCooldown"); this.stormActive = false; @@ -475,7 +484,7 @@ public class KrakenEntity extends Monster implements GeoEntity { this.getLookControl().setLookAt(target, 25.0F, 20.0F); if (!this.spawnedPhaseMinions && this.phaseTransitionTicks <= 40) { - this.spawnPhaseMinions(1 + this.random.nextInt(2), true, target); + this.spawnMinions(1 + this.random.nextInt(2), target); this.spawnedPhaseMinions = true; } @@ -499,8 +508,8 @@ public class KrakenEntity extends Monster implements GeoEntity { switch (this.getAttackState()) { case ATTACK_GRAB -> this.tickGrabAttack(target); - case ATTACK_SWIPE -> this.tickSwipeAttack(); - case ATTACK_SLAM -> this.tickSlamAttack(); + case ATTACK_SWING_LEFT -> this.tickSwingAttack(false); + case ATTACK_SWING_RIGHT -> this.tickSwingAttack(true); default -> this.finishAttack(); } } @@ -512,12 +521,9 @@ public class KrakenEntity extends Monster implements GeoEntity { if (attackState == ATTACK_GRAB) { this.actionTicks = 55; this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.45F, 0.9F); - } else if (attackState == ATTACK_SWIPE) { + } else if (attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT) { this.actionTicks = 40; this.playSound(AntarchySoundEvents.KRAKEN_SPIN.get(), 1.3F, 0.95F); - } else if (attackState == ATTACK_SLAM) { - this.actionTicks = 34; - this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.5F, 0.82F); } } @@ -545,19 +551,10 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private void tickSwipeAttack() { + // swingRight=true means ATTACK_SWING_RIGHT, which knocks players to the Kraken's LEFT + private void tickSwingAttack(boolean swingRight) { if (this.actionTicks == 10) { - this.performSwipe(); - } - - if (--this.actionTicks <= 0) { - this.finishAttack(); - } - } - - private void tickSlamAttack() { - if (this.actionTicks == 8) { - this.performTentacleSlam(); + this.performSwing(swingRight); } if (--this.actionTicks <= 0) { @@ -566,15 +563,12 @@ public class KrakenEntity extends Monster implements GeoEntity { } private void finishAttack() { - int finishedAttack = this.getAttackState(); + int finished = this.getAttackState(); this.setAttackState(ATTACK_NONE); this.actionTicks = 0; this.attackCooldown = this.isPhaseTwo() ? 12 : 18; this.grabbedTargetId = -1; - this.lastAttackState = finishedAttack; - if (finishedAttack == ATTACK_SLAM) { - this.slamCooldown = this.isPhaseTwo() ? 110 : 150; - } + this.lastAttackState = finished; this.updateAnimationState(); } @@ -614,96 +608,57 @@ public class KrakenEntity extends Monster implements GeoEntity { } private int chooseNextAttack(LivingEntity target) { - int[] attackRotation = new int[] {ATTACK_GRAB, ATTACK_SWIPE, ATTACK_SLAM}; - int[] weightedAttacks = new int[attackRotation.length]; - int[] weights = new int[attackRotation.length]; - int eligibleCount = 0; - int totalWeight = 0; + double distSqr = this.distanceToSqr(target); + boolean canGrab = distSqr <= 64.0D; + boolean canSwing = distSqr <= 81.0D; - for (int attack : attackRotation) { - if (!this.canUseAttack(attack, target)) { - continue; - } - - int weight = this.getAttackWeight(attack); - if (attack == this.lastAttackState) { - weight = Math.max(1, weight / 3); - } - if (weight <= 0) { - continue; - } - - weightedAttacks[eligibleCount] = attack; - weights[eligibleCount] = weight; - totalWeight += weight; - eligibleCount++; - } - - if (eligibleCount == 0) { + if (!canGrab && !canSwing) { return ATTACK_NONE; } - int roll = this.random.nextInt(totalWeight); - for (int i = 0; i < eligibleCount; i++) { - roll -= weights[i]; - if (roll < 0) { - return weightedAttacks[i]; - } + int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; + int swingWeight = canSwing ? (this.isSwingAttack(this.lastAttackState) ? 1 : 5) : 0; + int total = grabWeight + swingWeight; + if (total == 0) { + return ATTACK_NONE; } - return weightedAttacks[eligibleCount - 1]; - } - - private int getAttackWeight(int attackState) { - return switch (attackState) { - case ATTACK_GRAB -> 4; - case ATTACK_SWIPE -> 5; - case ATTACK_SLAM -> this.isPhaseTwo() ? 1 : 0; - default -> 0; - }; - } - - private void tickPhaseTwoPressure(LivingEntity target) { - if (!this.isPhaseTwo() || this.phaseSummonCooldown > 0) { - return; + int roll = this.random.nextInt(total); + if (roll < grabWeight) { + return ATTACK_GRAB; } - if (this.countNearbyMissileSquids() >= 12) { - this.phaseSummonCooldown = 40; - return; - } - this.spawnPhaseMinions(1 + this.random.nextInt(2), true, target); - this.phaseSummonCooldown = 90 + this.random.nextInt(50); + return this.resolveSwingDirection(target); } - private int countNearbyMissileSquids() { - return this.level().getEntitiesOfClass( - MissileSquidEntity.class, - this.getBoundingBox().inflate(28.0D), - squid -> squid.isAlive() - ).size(); + private boolean isSwingAttack(int attackState) { + return attackState == ATTACK_SWING_LEFT || attackState == ATTACK_SWING_RIGHT; } - private boolean canUseAttack(int attackState, LivingEntity target) { - double distanceToTarget = this.distanceToSqr(target); - return switch (attackState) { - case ATTACK_GRAB -> distanceToTarget <= 64.0D; - case ATTACK_SWIPE -> distanceToTarget <= 81.0D && this.isTargetInFront(target, 0.1D); - case ATTACK_SLAM -> this.slamCooldown <= 0 && distanceToTarget <= 144.0D; - default -> false; - }; - } - - private boolean isTargetInFront(LivingEntity target, double minimumDot) { + // Determines left vs right based on which side the target is on relative to the Kraken. + // Kraken's right vector is forward x world-up. If target is on the Kraken's right side, + // use swing_right (which knocks them left). If on the left, use swing_left (knocks them right). + private int resolveSwingDirection(LivingEntity target) { Vec3 forward = this.getViewVector(1.0F); - Vec3 toTarget = target.position().subtract(this.position()).normalize(); - return forward.dot(toTarget) >= minimumDot; + Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); + Vec3 toTarget = target.position().subtract(this.position()); + return right.dot(toTarget) > 0 ? ATTACK_SWING_RIGHT : ATTACK_SWING_LEFT; } - private void performSwipe() { + private void performSwing(boolean swingRight) { AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); - List players = this.level().getEntitiesOfClass(Player.class, hitBox, player -> player.isAlive() && this.isTargetInFront(player, -0.15D)); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); + float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); + + Vec3 forward = this.getViewVector(1.0F); + // swingRight knocks to Kraken's left (-right), swingLeft knocks to Kraken's right (+right) + Vec3 right = forward.cross(new Vec3(0, 1, 0)).normalize(); + Vec3 knockDir = swingRight ? right.scale(-1) : right; + for (Player player : players) { - this.hurtAndKnockback(player, (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE), 1.75D, 0.45D); + if (!(this.level() instanceof ServerLevel serverLevel)) continue; + if (!player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) continue; + player.push(knockDir.x * 1.75D, 0.4D, knockDir.z * 1.75D); + player.hurtMarked = true; } if (this.level() instanceof ServerLevel serverLevel) { @@ -711,19 +666,6 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private void performTentacleSlam() { - AABB hitBox = this.getBoundingBox().inflate(8.5D, 2.5D, 8.5D); - List players = this.level().getEntitiesOfClass(Player.class, hitBox, LivingEntity::isAlive); - float damage = (float)this.getAttributeValue(Attributes.ATTACK_DAMAGE) * 0.75F; - for (Player player : players) { - this.hurtAndKnockback(player, damage, 1.35D, 0.62D); - } - - if (this.level() instanceof ServerLevel serverLevel) { - serverLevel.sendParticles(ParticleTypes.SPLASH, this.getX(), this.getY() + 0.5D, this.getZ(), 36, 1.8D, 0.5D, 1.8D, 0.12D); - } - } - private void holdGrabbedTarget(LivingEntity target) { Vec3 anchor = this.position() .add(this.getViewVector(1.0F).normalize().scale(this.getBbWidth() * 0.65D)) @@ -738,14 +680,6 @@ public class KrakenEntity extends Monster implements GeoEntity { target.hurtMarked = true; } - private void hurtAndKnockback(LivingEntity target, float damage, double horizontalStrength, double verticalStrength) { - if (!(this.level() instanceof ServerLevel serverLevel) || !target.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage)) { - return; - } - - this.knockAway(target, horizontalStrength, verticalStrength); - } - private void knockAway(LivingEntity target, double horizontalStrength, double verticalStrength) { Vec3 direction = target.position().subtract(this.position()); Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z); @@ -771,7 +705,25 @@ public class KrakenEntity extends Monster implements GeoEntity { return entity instanceof LivingEntity livingEntity ? livingEntity : null; } - private void spawnPhaseMinions(int desiredCount, boolean launched, @Nullable LivingEntity currentTarget) { + private void tickPhaseTwoPressure(LivingEntity target) { + if (!this.isPhaseTwo() || this.phaseSummonCooldown > 0) { + return; + } + if (this.countNearbyMinions() >= 12) { + this.phaseSummonCooldown = 40; + return; + } + this.spawnMinions(1 + this.random.nextInt(2), target); + this.phaseSummonCooldown = 90 + this.random.nextInt(50); + } + + private int countNearbyMinions() { + net.minecraft.world.phys.AABB range = this.getBoundingBox().inflate(28.0D); + return this.level().getEntitiesOfClass(OctopusBombEntity.class, range, OctopusBombEntity::isAlive).size() + + this.level().getEntitiesOfClass(MissileSquidEntity.class, range, MissileSquidEntity::isAlive).size(); + } + + private void spawnMinions(int desiredCount, @Nullable LivingEntity currentTarget) { if (!(this.level() instanceof ServerLevel serverLevel)) { return; } @@ -779,22 +731,23 @@ public class KrakenEntity extends Monster implements GeoEntity { int spawned = 0; for (int attempt = 0; attempt < desiredCount * 4 && spawned < desiredCount; attempt++) { - Vec3 spawnPos = this.findPhaseMinionSpawnPos(currentTarget); - MissileSquidEntity missileSquid = AntarchyObjects.MISSILE_SQUID.get().create(serverLevel); - if (missileSquid == null) { - continue; - } + Vec3 spawnPos = this.findBombSpawnPos(currentTarget); + boolean spawnBomb = this.random.nextBoolean(); - missileSquid.setCanFly(true); - missileSquid.setSpawnedByKraken(true); - missileSquid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); - serverLevel.addFreshEntity(missileSquid); - if (launched) { - missileSquid.launchAsProjectile(this, this.createPhaseMinionLaunchVelocity(spawnPos, currentTarget)); - } else if (currentTarget != null) { - missileSquid.setTarget(currentTarget); + if (spawnBomb) { + OctopusBombEntity bomb = AntarchyObjects.OCTOPUS_BOMB.get().create(serverLevel); + if (bomb == null) continue; + bomb.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(bomb); + bomb.launchAsProjectile(this, this.createBombLaunchVelocity(spawnPos, currentTarget)); + serverLevel.sendParticles(ParticleTypes.BUBBLE, bomb.getX(), bomb.getY() + 0.4D, bomb.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); + } else { + MissileSquidEntity squid = AntarchyObjects.MISSILE_SQUID.get().create(serverLevel); + if (squid == null) continue; + squid.moveTo(spawnPos.x, spawnPos.y, spawnPos.z, this.getYRot(), 0.0F); + serverLevel.addFreshEntity(squid); + serverLevel.sendParticles(ParticleTypes.BUBBLE, squid.getX(), squid.getY() + 0.4D, squid.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); } - serverLevel.sendParticles(ParticleTypes.BUBBLE, missileSquid.getX(), missileSquid.getY() + 0.4D, missileSquid.getZ(), 14, 0.3D, 0.25D, 0.3D, 0.03D); spawned++; } @@ -803,7 +756,7 @@ public class KrakenEntity extends Monster implements GeoEntity { } } - private Vec3 findPhaseMinionSpawnPos(@Nullable LivingEntity currentTarget) { + private Vec3 findBombSpawnPos(@Nullable LivingEntity currentTarget) { Vec3 anchor = currentTarget != null ? currentTarget.position() : this.position(); for (int attempt = 0; attempt < 18; attempt++) { double angle = this.random.nextDouble() * Mth.TWO_PI; @@ -822,7 +775,7 @@ public class KrakenEntity extends Monster implements GeoEntity { return this.position().add(0.0D, this.getBbHeight() * 0.6D, 0.0D); } - private Vec3 createPhaseMinionLaunchVelocity(Vec3 spawnPos, @Nullable LivingEntity currentTarget) { + private Vec3 createBombLaunchVelocity(Vec3 spawnPos, @Nullable LivingEntity currentTarget) { Vec3 aimPoint = currentTarget != null ? currentTarget.getEyePosition() : this.position().add(this.getViewVector(1.0F).scale(10.0D)); @@ -1043,14 +996,14 @@ public class KrakenEntity extends Monster implements GeoEntity { private void updateSwimRotation() { Vec3 velocity = this.getDeltaMovement(); if (velocity.horizontalDistanceSqr() > 1.0E-4D) { - float targetYaw = (float)(Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; + float targetYaw = (float) (Mth.atan2(velocity.z, velocity.x) * (180.0D / Math.PI)) - 90.0F; this.setYRot(Mth.approachDegrees(this.getYRot(), targetYaw, 6.0F)); this.yBodyRot = this.getYRot(); this.yHeadRot = this.getYRot(); } if (velocity.lengthSqr() > 1.0E-4D) { - float targetPitch = (float)(-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); + float targetPitch = (float) (-(Mth.atan2(velocity.y, velocity.horizontalDistance()) * (180.0D / Math.PI))); this.setXRot(Mth.approachDegrees(this.getXRot(), targetPitch, 4.0F)); } } @@ -1090,8 +1043,13 @@ public class KrakenEntity extends Monster implements GeoEntity { return; } - if (this.phaseTransitionTicks > 0 || this.isRoaring()) { - this.setAnimationState(ANIM_IDLE); + if (this.isRoaring()) { + this.setAnimationState(ANIM_CRY); + return; + } + + if (this.phaseTransitionTicks > 0) { + this.setAnimationState(ANIM_NONE); return; } @@ -1100,22 +1058,18 @@ public class KrakenEntity extends Monster implements GeoEntity { this.setAnimationState(ANIM_GRAB); return; } - case ATTACK_SWIPE, ATTACK_SLAM -> { - this.setAnimationState(ANIM_SWIPE); + case ATTACK_SWING_LEFT -> { + this.setAnimationState(ANIM_SWING_LEFT); + return; + } + case ATTACK_SWING_RIGHT -> { + this.setAnimationState(ANIM_SWING_RIGHT); return; } default -> { } } - Vec3 velocity = this.getDeltaMovement(); - double horizontalSpeedSqr = velocity.horizontalDistanceSqr(); - double verticalSpeedSqr = velocity.y * velocity.y; - if (horizontalSpeedSqr > 0.03D && horizontalSpeedSqr > verticalSpeedSqr * 2.5D) { - this.setAnimationState(ANIM_SWIM); - return; - } - - this.setAnimationState(this.isPhaseTwo() ? ANIM_IDLE_TWO : ANIM_IDLE); + this.setAnimationState(ANIM_NONE); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 99958d6a..d9155e5a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -20,28 +20,41 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moleworm_caves") ); + private static final ResourceKey ELYTHIA_OCEAN = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_ocean") + ); + private static final ResourceKey ELYTHIA_BEACH = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_beach") + ); private static final int[] SURFACE_FALLBACK_BLOCK_YS = new int[]{192, 160, 128, 96, 64, 32, 0}; public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), - Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY) + Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY), + Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY) ).apply(instance, ElythiaBiomeSource::new)); private final Climate.ParameterList> parameters; private final MultiNoiseBiomeSource delegate; private final int molewormCavesMaxY; private final int surfaceBiomeSampleY; + private final int oceanMaxY; private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; + private final int oceanMaxQuartY; - public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY) { + public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY) { this.parameters = parameters; this.delegate = MultiNoiseBiomeSource.createFromList(parameters); this.molewormCavesMaxY = molewormCavesMaxY; this.surfaceBiomeSampleY = surfaceBiomeSampleY; + this.oceanMaxY = oceanMaxY; this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); + this.oceanMaxQuartY = QuartPos.fromBlock(oceanMaxY); } private Climate.ParameterList> parameters() { @@ -56,6 +69,10 @@ public class ElythiaBiomeSource extends BiomeSource { return this.surfaceBiomeSampleY; } + private int oceanMaxY() { + return this.oceanMaxY; + } + @Override protected MapCodec codec() { return CODEC; @@ -69,18 +86,31 @@ public class ElythiaBiomeSource extends BiomeSource { @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { Holder biome = this.delegate.getNoiseBiome(x, y, z, sampler); - if (!biome.is(MOLEWORM_CAVES) || y <= this.molewormCavesMaxQuartY) { - return biome; + + // Cap moleworm caves below their max Y + if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { + return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES); } + // Cap ocean/beach biomes above sea level — if terrain noise puts these biomes + // too high, replace with whatever surface biome would naturally be there + if ((biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_BEACH)) && y > this.oceanMaxQuartY) { + return resolveSurfaceFallback(x, y, z, sampler, ELYTHIA_OCEAN, ELYTHIA_BEACH); + } + + return biome; + } + + @SafeVarargs + private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); - if (!fallback.is(MOLEWORM_CAVES)) { + if (!isExcluded(fallback, excluded)) { return fallback; } for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); - if (!candidate.is(MOLEWORM_CAVES)) { + if (!isExcluded(candidate, excluded)) { return candidate; } } @@ -88,9 +118,18 @@ public class ElythiaBiomeSource extends BiomeSource { return fallback; } + @SafeVarargs + private static boolean isExcluded(Holder biome, ResourceKey... excluded) { + for (ResourceKey key : excluded) { + if (biome.is(key)) return true; + } + return false; + } + @Override public void addDebugInfo(java.util.List debug, net.minecraft.core.BlockPos pos, Climate.Sampler sampler) { this.delegate.addDebugInfo(debug, pos, sampler); debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); + debug.add("Elythia ocean cap: y<=" + this.oceanMaxY); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java new file mode 100644 index 00000000..cecbfe67 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java @@ -0,0 +1,72 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.item.SquidzookaItem; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.Enchantments; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Enchantment.class) +public abstract class SquidzookaEnchantMixin { + private static final Registry ENCHANTMENT_REGISTRY = resolveEnchantmentRegistry(); + + @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) + private void antarchy$limitSquidzookaCrossbowEnchants(ItemStack stack, CallbackInfoReturnable cir) { + this.antarchy$applySquidzookaEnchantRules(stack, cir); + } + + @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) + private void antarchy$limitSquidzookaPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { + this.antarchy$applySquidzookaEnchantRules(stack, cir); + } + + @Inject(method = "isSupportedItem", at = @At("HEAD"), cancellable = true) + private void antarchy$limitSquidzookaSupportedItem(ItemStack stack, CallbackInfoReturnable cir) { + this.antarchy$applySquidzookaEnchantRules(stack, cir); + } + + private void antarchy$applySquidzookaEnchantRules(ItemStack stack, CallbackInfoReturnable cir) { + if (!(stack.getItem() instanceof SquidzookaItem)) { + return; + } + + if (ENCHANTMENT_REGISTRY == null) { + return; + } + + Enchantment enchantment = (Enchantment) (Object) this; + ResourceLocation enchantmentId = ENCHANTMENT_REGISTRY.getKey(enchantment); + if (enchantmentId == null) { + return; + } + + if (enchantmentId.equals(Enchantments.MULTISHOT.location())) { + cir.setReturnValue(true); + return; + } + + if (enchantmentId.equals(Enchantments.QUICK_CHARGE.location()) + || enchantmentId.equals(Enchantments.PIERCING.location())) { + cir.setReturnValue(false); + } + } + + @SuppressWarnings("unchecked") + private static Registry resolveEnchantmentRegistry() { + try { + return (Registry) BuiltInRegistries.class.getField("ENCHANTMENT").get(null); + } catch (ReflectiveOperationException primary) { + try { + return (Registry) BuiltInRegistries.class.getField("ENCHANTMENTS").get(null); + } catch (ReflectiveOperationException ignored) { + return null; + } + } + } +} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index d2dbc9ae..f597f485 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -12,6 +12,7 @@ "FireVisualEntityMixin", "GlowVinesUnderLeavesMixin", "ServerPlayerGameModeMixin", + "SquidzookaEnchantMixin", "StinkyLivingEntityMixin", "TorchflowerBlockStateMixin", "gravity.AbstractArrowGravityMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 0a7dc29c..4401a478 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -4,6 +4,11 @@ "idle": { "loop": true, "animation_length": 4, + "sound_effects": { + "0.0": { + "effect": "antarchy:kraken_flying_loop|0.45|1.0" + } + }, "bones": { "l_shoulder": { "rotation": { diff --git a/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json index 01241865..fe841375 100644 --- a/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/octopus_bomb.animation.json @@ -203,7 +203,7 @@ "animation_length": 2.5, "sound_effects": { "0.0": { - "effect": "antarchy:kraken_flying_loop|0.45|1.0" + "effect": "antarchy:kraken_flying_loop|0.45|1.19" } }, "bones": { @@ -10276,7 +10276,7 @@ "animation_length": 1, "sound_effects": { "0.0": { - "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.0" + "effect": "antarchy:kraken_flying_sideways_loop|0.45|1.19" } }, "bones": { diff --git a/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json index 064d2985..f75c3604 100644 --- a/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/stink_bug.animation.json @@ -3,137 +3,188 @@ "animations": { "idle": { "loop": true, - "animation_length": 2.5, + "animation_length": 2, "bones": { - "body": { + "root": { "position": { "0.0": { "post": { "vector": [0, 0.5, 0] }, "lerp_mode": "catmullrom" - }, - "2.5": { + } + } + }, + "body": { + "rotation": { + "0.0": { "post": { - "vector": [0, 0.5, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.5, 0] }, "lerp_mode": "catmullrom" } } }, - "antenna": { + "r_antenna": { "rotation": { "0.0": { "post": { - "vector": [40, 0, 0] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, - "1.25": { + "1.0": { "post": { - "vector": [50, 0, 0] + "vector": [0.66778, -2.51027, -22.28928] }, "lerp_mode": "catmullrom" }, - "2.5": { + "2.0": { "post": { - "vector": [40, 0, 0] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" } } }, - "frontLeftLeg": { + "r_antenna2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.2083": { "post": { - "vector": [0, 0, -10] + "vector": [1.12732, 1.85014, -147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" } } }, - "middleLeftLeg": { + "l_antenna": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.0": { "post": { - "vector": [0, 0, -10] + "vector": [0.66778, 2.51027, 22.28928] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" } } }, - "backLeftLeg": { + "l_antenna2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.2083": { "post": { - "vector": [0, 0, -10] + "vector": [1.12732, -1.85014, 147.29336] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" } } }, - "frontRightLeg": { + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 10] + "vector": [-9.00717, 20.70481, -24.14867] }, "lerp_mode": "catmullrom" } } }, - "middleRightLeg": { + "right_leg_front": { "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "2.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } + "vector": [9.00717, -20.70481, -24.14867] } }, - "backRightLeg": { + "left_leg_front": { + "rotation": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "head": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 10] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "2.5": { + "1.0": { "post": { - "vector": [0, 0, 10] + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -143,29 +194,9 @@ }, "walk": { "loop": true, - "animation_length": 1, + "animation_length": 0.5, "bones": { - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [0, -5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -5, 0] - }, - "lerp_mode": "catmullrom" - } - }, + "root": { "position": { "0.0": { "post": { @@ -175,69 +206,17 @@ } } }, - "antenna": { + "body": { "rotation": { "0.0": { "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [50, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [40, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "frontLeftLeg": { - "rotation": { - "0.0": { - "post": { - "vector": [9.9108, -44.4038, -14.137] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-9.9108, 44.4038, -14.137] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 18.36] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [9.9108, -44.4038, -14.137] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -245,65 +224,341 @@ "position": { "0.0": { "post": { - "vector": [0.75, 0, 0] + "vector": [0, -0.5, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, 0] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.75, 0, 0] + "vector": [0, -0.5, 0] }, "lerp_mode": "catmullrom" } } }, - "middleLeftLeg": { + "r_antenna": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [-9.9108, 44.4038, -14.137] + "vector": [0, 0, -25] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 18.36] + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.2917": { "post": { - "vector": [9.9108, -44.4038, -14.137] + "vector": [0, 0, -120] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.5": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 120] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, 40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20.94102, -40.78947, -30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 45, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [20.94102, 40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20.94102, -40.78947, 30.36119] + }, + "lerp_mode": "catmullrom" + } + } + }, + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "fart": { + "loop": true, + "animation_length": 1.5, + "bones": { + "root": { + "position": { + "0.0": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 2.5, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0.49, -1.99] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0.5, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-152.84, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } @@ -311,297 +566,380 @@ "position": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [0, -0.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -0.25, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0.75, 0, 0] + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0.25, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0.25, -0.25, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 0] + "vector": [0, 1.75, -1] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.2083": { "post": { - "vector": [0.75, 0, 0] + "vector": [-0.01, -0.97, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { - "vector": [0, 0, 0] + "vector": [0, -0.5, 0] }, "lerp_mode": "catmullrom" } } }, - "backLeftLeg": { + "r_antenna": { "rotation": { "0.0": { "post": { - "vector": [-9.9108, 44.4038, -14.137] + "vector": [0, 0, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, 18.36] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [9.9108, -44.4038, -14.137] + "vector": [0, 0, -42.5] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.5417": { "post": { "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { - "vector": [-9.9108, 44.4038, -14.137] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0.75, 0, 0] + "vector": [0, 0, -7.5] }, "lerp_mode": "catmullrom" } } }, - "frontRightLeg": { + "r_antenna2": { "rotation": { "0.0": { "post": { - "vector": [-9.9108, -44.4038, 14.137] + "vector": [0, 0, -135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, -18.36] + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [9.9108, 44.4038, 14.137] + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.5417": { "post": { "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { - "vector": [-9.9108, -44.4038, 14.137] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [-0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.75, 0, 0] + "vector": [0, 0, -135] }, "lerp_mode": "catmullrom" } } }, - "middleRightLeg": { + "l_antenna": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -18.36] + "vector": [0, 0, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [9.9108, 44.4038, 14.137] + "vector": [0, 0, 42.5] }, "lerp_mode": "catmullrom" }, "0.5": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { "post": { "vector": [0, 0, 10] }, "lerp_mode": "catmullrom" }, - "0.75": { + "1.5": { "post": { - "vector": [-9.9108, -44.4038, 14.137] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -18.36] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.75": { - "post": { - "vector": [-0.75, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 0] + "vector": [0, 0, 7.5] }, "lerp_mode": "catmullrom" } } }, - "backRightLeg": { + "l_antenna2": { "rotation": { "0.0": { "post": { - "vector": [9.9108, 44.4038, 14.137] + "vector": [0, 0, 135] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, 10] + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-9.9108, -44.4038, 14.137] + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.5417": { "post": { - "vector": [0, 0, -18.36] + "vector": [0, 0, -10] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.5": { "post": { - "vector": [9.9108, 44.4038, 14.137] + "vector": [0, 0, 135] }, "lerp_mode": "catmullrom" } + } + }, + "right_leg": { + "rotation": { + "vector": [0, 0, -22.5] + } + }, + "right_leg_back": { + "rotation": { + "0.0": { + "post": { + "vector": [-9.00717, 20.70481, -24.14867] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "0.25": { + "vector": [9.00717, -20.70481, -24.14867] + }, + "1.25": { + "vector": [9.00717, -20.70481, -24.14867] + } }, "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg_front": { + "rotation": { + "0.0": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "0.25": { + "vector": [9.00717, 20.70481, 24.14867] + }, + "1.25": { + "vector": [9.00717, 20.70481, 24.14867] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 1, 0] + }, + "1.25": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "vector": [0, 0, 22.5] + } + }, + "left_leg_back": { + "rotation": { + "vector": [-9.00717, -20.70481, 24.14867] + } + }, + "right_eye": { + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + }, + "1.5": { + "vector": [1, 1, 1] + } + } + }, + "left_eye": { + "scale": { + "0.1667": { + "vector": [1, 0.3, 1] + }, + "0.25": { + "vector": [1, 0.3, 1] + } + } + }, + "head": { + "rotation": { "0.0": { "post": { - "vector": [-0.75, 0, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, 0] + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-0.75, 0, 0] + "vector": [132.55, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.75": { + "0.5417": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [11.12, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.75, 0, 0] - }, - "lerp_mode": "catmullrom" } } } diff --git a/common/src/main/resources/assets/antarchy/animations/termite.animation.json b/common/src/main/resources/assets/antarchy/animations/termite.animation.json new file mode 100644 index 00000000..77ba7fc5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/animations/termite.animation.json @@ -0,0 +1,1836 @@ +{ + "format_version": "1.8.0", + "animations": { + "idle": { + "loop": true, + "animation_length": 4, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, 0.10358, 1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0.17875, -0.10358, -1.61888] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "dance": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-13.85813, -24.26239, 5.93679] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [-24.00312, 18.43745, -15.27944] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "vector": [0, -10, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, 0, 0] + }, + "1.5": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [9.72631, 0.45349, -2.99327] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [12.5, -12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, -7.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 12.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.61003, 22.29711, -3.09472] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-0.47532, -19.82169, 2.71994] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "walk": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-14.15251, -17.67415, 62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.74672, 4.98753, 33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.49325, 15.74419, 39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [29.82269, 35.55522, 45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-30.04912, -35.07869, 44.72041] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [5.74672, -4.98753, -33.20458] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-14.15251, 17.67415, -62.21128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.49325, -15.74419, -39.23412] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-30.04912, 35.07869, -44.72041] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [29.82269, -35.55522, -45.05671] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "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, -2] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + }, + "attack": { + "loop": true, + "animation_length": 1, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "thorax": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [10, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "abdomen": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [19.92514, 0.26438, -1.96682] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, -17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, -35.79744, 48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, -19.58991, 40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, 34.12398, 47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, 17.67415, 39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-14.15251, 17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, -37.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg3": { + "rotation": { + "0.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-33.59794, 35.79744, -48.63781] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-15.84766, 19.58991, -40.25298] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg4": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg5": { + "rotation": { + "0.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [31.33144, -34.12398, -47.33883] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [14.15251, -17.67415, -39.71128] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_leg6": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 115] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Termite": { + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 3] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -3] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "r_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, 52.98677, 1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, -39.58992, 6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.17995, -12.39135, 1.6575] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_mandibule": { + "rotation": { + "0.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-0.27472, -52.98677, -1.40178] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-2.2516, 39.58992, -6.25038] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + }, + "4.0": { + "post": { + "vector": [-0.06397, 7.43547, -0.98448] + }, + "lerp_mode": "catmullrom" + } + } + }, + "l_antenna": { + "rotation": { + "vector": [0, -22.5, 0] + } + }, + "r_antenna": { + "rotation": { + "vector": [0, 22.5, 0] + } + } + } + } + } +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json b/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json index 0f9ee2ff..d0a2525b 100644 --- a/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/toreterror.animation.json @@ -2134,297 +2134,52 @@ } }, "spin_attack": { - "animation_length": 2, + "loop": true, + "animation_length": 0.2917, "bones": { - "Jaw": { - "rotation": { - "0.0": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Head": { - "rotation": { - "0.0": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [12.40552, -0.42671, -3.86532] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-50, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "Torso": { - "rotation": { - "0.0": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, "R_arm": { "rotation": { "0.0": { - "post": { - "vector": [3.42896, -5.43394, -46.98263] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-40.03828, -6.42252, -14.31771] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-40.03828, -6.42252, -14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-40.03828, -6.42252, -14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3.42896, -5.43394, -46.98263] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [0, -8.42649, 7.07066] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -8.42649, 7.07066] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -8.42649, 7.07066] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" } } }, "R_arm2": { "rotation": { "0.0": { - "post": { - "vector": [-12.73916, -59.16159, 14.75144] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-7.46814, -29.5764, 7.46814] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-7.46814, -29.5764, 7.46814] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-7.46814, -29.5764, 7.46814] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-12.73916, -59.16159, 14.75144] - }, - "lerp_mode": "catmullrom" } } }, "Shell": { "rotation": { "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [30, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [39.04, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.375": { - "post": { - "vector": [29.9, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-27.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.625": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [0, -0.64279, -0.76604] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -0.64279, -0.76604] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -0.64279, -0.76604] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" } } }, @@ -2436,383 +2191,81 @@ }, "lerp_mode": "catmullrom" }, - "0.1667": { - "post": { - "vector": [37.5, 1.20877, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.2917": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.4167": { + "0.125": { "post": { "vector": [39.4, -452.04, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.2083": { "post": { "vector": [12.5, -720, 0] }, "lerp_mode": "catmullrom" }, - "0.5833": { + "0.2917": { "post": { "vector": [38.06, -725.19, 0] }, "lerp_mode": "catmullrom" - }, - "0.7083": { - "post": { - "vector": [12.5, -682.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [12.5, -682.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.9583": { - "post": { - "vector": [37.5, -345, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0417": { - "post": { - "vector": [38.33, -95, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [12.5, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [12.5, -7.5, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [37.5, 0, 0] - }, - "lerp_mode": "catmullrom" } }, "position": { "0.0": { - "post": { - "vector": [0, -1.25, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [0, -29.25, 15] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, -29.25, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.0833": { - "post": { - "vector": [0, -29.25, -48] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, -29.25, -48] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1.25, -28] - }, - "lerp_mode": "catmullrom" } } }, "L_arm": { "rotation": { "0.0": { - "post": { - "vector": [3.42896, 5.43394, 46.98263] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-40.03828, 6.42252, 14.31771] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-40.03828, 6.42252, 14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-40.03828, 6.42252, 14.31771] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [3.42896, 5.43394, 46.98263] - }, - "lerp_mode": "catmullrom" } } }, "L_arm2": { "rotation": { "0.0": { - "post": { - "vector": [-12.73916, 59.16159, -14.75144] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { "post": { "vector": [-6.91252, -20.07846, -1.38281] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-6.91252, -20.07846, -1.38281] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-6.91252, -20.07846, -1.38281] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-12.73916, 59.16159, -14.75144] - }, - "lerp_mode": "catmullrom" } } }, "R-Leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [6.05456, 12.07085, 4.02709] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } }, "L-Leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-37.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [-1, 7.14018, 5.47885] - }, - "lerp_mode": "catmullrom" - }, - "1.3333": { - "post": { - "vector": [-0.7, 11.60171, 6.24351] - }, - "lerp_mode": "catmullrom" - }, - "1.4583": { - "post": { - "vector": [-0.04547, -4.23409, 3.9696] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } }, "Torso_2": { "scale": { "0.0": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" - }, - "0.2083": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" - }, - "0.8333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [1, 1, 1] - }, - "lerp_mode": "catmullrom" } } } @@ -3303,6 +2756,605 @@ } } } + }, + "spin_attack_start": { + "animation_length": 0.25, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [37.5, 1.20877, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "spin_attack_end": { + "animation_length": 0.4583, + "bones": { + "Jaw": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Head": { + "rotation": { + "0.0": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [12.40552, -0.42671, -3.86532] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-50, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso": { + "rotation": { + "0.0": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, -6.42252, -14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, -5.43394, -46.98263] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -8.42649, 7.07066] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.46814, -29.5764, 7.46814] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, -59.16159, 14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Shell": { + "rotation": { + "0.0": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [29.9, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-27.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.64279, -0.76604] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Toreterror": { + "rotation": { + "0.0": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -29.25, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, -1.25, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-40.03828, 6.42252, 14.31771] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [3.42896, 5.43394, 46.98263] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L_arm2": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.91252, -20.07846, -1.38281] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-12.73916, 59.16159, -14.75144] + }, + "lerp_mode": "catmullrom" + } + } + }, + "R-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0833": { + "pre": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "post": { + "vector": [6.05456, 12.07085, 4.02709] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "L-Leg": { + "rotation": { + "0.25": { + "pre": { + "vector": [-37.5, 0, 0] + }, + "post": { + "vector": [-37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [-1, 7.14018, 5.47885] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-0.7, 11.60171, 6.24351] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-0.04547, -4.23409, 3.9696] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + }, + "Torso_2": { + "scale": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } } } } \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json b/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json index 70dd28f2..016df757 100644 --- a/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json +++ b/common/src/main/resources/assets/antarchy/blockstates/termite_nest.json @@ -1,8 +1,8 @@ { "variants": { "facing=north": {"model": "antarchy:block/termite_nest"}, - "facing=east": {"model": "antarchy:block/termite_nest", "y": 90}, + "facing=east": {"model": "antarchy:block/termite_nest", "y": 90}, "facing=south": {"model": "antarchy:block/termite_nest", "y": 180}, - "facing=west": {"model": "antarchy:block/termite_nest", "y": 270} + "facing=west": {"model": "antarchy:block/termite_nest", "y": 270} } } diff --git a/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json index d8bf299a..07b58cbc 100644 --- a/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/stink_bug.geo.json @@ -3,80 +3,129 @@ "minecraft:geometry": [ { "description": { - "identifier": "geometry.stinkbug", - "texture_width": 32, + "identifier": "geometry.Stinkbug", + "texture_width": 64, "texture_height": 32, "visible_bounds_width": 2, - "visible_bounds_height": 1.5, - "visible_bounds_offset": [0, 0.25, 0] + "visible_bounds_height": 2.5, + "visible_bounds_offset": [0, 0.75, 0] }, "bones": [ { "name": "root", - "pivot": [0, 0, 0] + "pivot": [0, 1.14286, -0.57143] + }, + { + "name": "right_leg", + "parent": "root", + "pivot": [-3, 1, 0.5], + "cubes": [ + {"origin": [-7, 1, 0], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg", + "parent": "root", + "pivot": [3, 1, 0.5], + "cubes": [ + {"origin": [3, 1, 0], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_front", + "parent": "root", + "pivot": [-3, 1, -1.5], + "cubes": [ + {"origin": [-7, 1, -2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_front", + "parent": "root", + "pivot": [3, 1, -1.5], + "cubes": [ + {"origin": [3, 1, -2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] + }, + { + "name": "right_leg_back", + "parent": "root", + "pivot": [-3, 1, 2.5], + "cubes": [ + {"origin": [-7, 1, 2], "size": [4, 0, 1], "uv": [3, 10]} + ] + }, + { + "name": "left_leg_back", + "parent": "root", + "pivot": [3, 1, 2.5], + "cubes": [ + {"origin": [3, 1, 2], "size": [4, 0, 1], "uv": [3, 10], "mirror": true} + ] }, { "name": "body", "parent": "root", - "pivot": [0, 2, 0], + "pivot": [0, 1, 1], "cubes": [ - {"origin": [-3, 0, -5], "size": [6, 4, 10], "uv": [0, 0]} + {"origin": [-3, 1, -2], "size": [6, 4, 6], "uv": [0, 0]}, + {"origin": [-3, 1, -2], "size": [6, 4, 6], "inflate": 0.2, "uv": [0, 11]} ] }, { - "name": "antenna", + "name": "head", "parent": "body", - "pivot": [0, 4, -4], + "pivot": [0, 2.25, -2], "cubes": [ - {"origin": [-2, 4, -5], "size": [4, 2, 1], "uv": [0, 14]} + {"origin": [-3, 1.25, -6], "size": [6, 2, 4], "uv": [18, 0]} ] }, { - "name": "frontLeftLeg", - "parent": "body", - "pivot": [-3, 0, -4], + "name": "right_eye", + "parent": "head", + "pivot": [-3, 2.75, -5.5], "cubes": [ - {"origin": [-6, 0, -5], "size": [3, 0, 2], "uv": [10, 14]} + {"origin": [-3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9]} ] }, { - "name": "frontRightLeg", - "parent": "body", - "pivot": [3, 0, -4], + "name": "left_eye", + "parent": "head", + "pivot": [3, 2.75, -5.5], "cubes": [ - {"origin": [3, 0, -5], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + {"origin": [3, 2.25, -6], "size": [0, 1, 1], "inflate": 0.02, "uv": [12, 9], "mirror": true} ] }, { - "name": "middleLeftLeg", - "parent": "body", - "pivot": [-3, 0, 0], + "name": "r_antenna", + "parent": "head", + "pivot": [-2, 2.75, -5], "cubes": [ - {"origin": [-6, 0, -1], "size": [3, 0, 2], "uv": [10, 14]} + {"origin": [-2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2]} ] }, { - "name": "middleRightLeg", - "parent": "body", - "pivot": [3, 0, 0], + "name": "r_antenna2", + "parent": "r_antenna", + "pivot": [-2, 6.75, -5], "cubes": [ - {"origin": [3, 0, -1], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + {"origin": [-2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8]} ] }, { - "name": "backLeftLeg", - "parent": "body", - "pivot": [-3, 0, 4], + "name": "l_antenna", + "parent": "head", + "pivot": [2, 2.75, -5], "cubes": [ - {"origin": [-6, 0, 3], "size": [3, 0, 2], "uv": [10, 14]} + {"origin": [2, 2.75, -6], "size": [0, 4, 2], "uv": [18, -2], "mirror": true} ] }, { - "name": "backRightLeg", - "parent": "body", - "pivot": [3, 0, 4], + "name": "l_antenna2", + "parent": "l_antenna", + "pivot": [2, 6.75, -5], "cubes": [ - {"origin": [3, 0, 3], "size": [3, 0, 2], "uv": [10, 14], "mirror": true} + {"origin": [2, 6.75, -6], "size": [0, 4, 2], "uv": [0, 8], "mirror": true} ] } ] diff --git a/common/src/main/resources/assets/antarchy/geo/termite.geo.json b/common/src/main/resources/assets/antarchy/geo/termite.geo.json new file mode 100644 index 00000000..d6262550 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/geo/termite.geo.json @@ -0,0 +1,197 @@ +{ + "format_version": "1.12.0", + "minecraft:geometry": [ + { + "description": { + "identifier": "geometry.Termite", + "texture_width": 64, + "texture_height": 64, + "visible_bounds_width": 2, + "visible_bounds_height": 1.5, + "visible_bounds_offset": [0, 0.25, 0] + }, + "bones": [ + { + "name": "Termite", + "pivot": [0, 1.21429, -1.91667] + }, + { + "name": "r_leg", + "parent": "Termite", + "pivot": [-1.5, 1, -3.5], + "cubes": [ + {"origin": [-7.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 12]} + ] + }, + { + "name": "r_leg2", + "parent": "r_leg", + "pivot": [-7.5, 1, -3.5], + "cubes": [ + {"origin": [-12.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 28]} + ] + }, + { + "name": "l_leg", + "parent": "Termite", + "pivot": [1.5, 1, -3.5], + "cubes": [ + {"origin": [1.5, 1, -3.5], "size": [6, 0, 1], "uv": [-1, 14]} + ] + }, + { + "name": "l_leg2", + "parent": "l_leg", + "pivot": [7.5, 1, -3.5], + "cubes": [ + {"origin": [7.5, 1, -3.5], "size": [5, 0, 1], "uv": [-1, 30]} + ] + }, + { + "name": "r_leg5", + "parent": "Termite", + "pivot": [-1.5, 1, -2.5], + "cubes": [ + {"origin": [-7.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 16]} + ] + }, + { + "name": "r_leg6", + "parent": "r_leg5", + "pivot": [-7.5, 1, -2.5], + "cubes": [ + {"origin": [-12.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 24]} + ] + }, + { + "name": "l_leg5", + "parent": "Termite", + "pivot": [1.5, 1, -2.5], + "cubes": [ + {"origin": [1.5, 1, -2.5], "size": [6, 0, 1], "uv": [-1, 18]} + ] + }, + { + "name": "l_leg6", + "parent": "l_leg5", + "pivot": [7.5, 1, -2.5], + "cubes": [ + {"origin": [7.5, 1, -2.5], "size": [5, 0, 1], "uv": [-1, 34]} + ] + }, + { + "name": "r_leg3", + "parent": "Termite", + "pivot": [-1.5, 1, -4.5], + "cubes": [ + {"origin": [-7.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 20]} + ] + }, + { + "name": "r_leg4", + "parent": "r_leg3", + "pivot": [-7.5, 1, -4.5], + "cubes": [ + {"origin": [-12.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 32]} + ] + }, + { + "name": "l_leg3", + "parent": "Termite", + "pivot": [1.5, 1, -4.5], + "cubes": [ + {"origin": [1.5, 1, -4.5], "size": [6, 0, 1], "uv": [-1, 22]} + ] + }, + { + "name": "l_leg4", + "parent": "l_leg3", + "pivot": [7.5, 1, -4.5], + "cubes": [ + {"origin": [7.5, 1, -4.5], "size": [5, 0, 1], "uv": [-1, 26]} + ] + }, + { + "name": "thorax", + "parent": "Termite", + "pivot": [0, 2.5, -4.41667], + "cubes": [ + {"origin": [-2, 1, -4.5], "size": [4, 3, 4], "uv": [11, 20]} + ] + }, + { + "name": "head", + "parent": "thorax", + "pivot": [-0.27778, 1.83333, -4.27778], + "cubes": [ + {"origin": [-1.5, 1.25, -4.5], "size": [3, 2, 1], "uv": [12, 13]}, + {"origin": [-3, 1, -12.25], "size": [6, 3, 8], "inflate": 0.01, "uv": [20, 4]} + ] + }, + { + "name": "r_mandibule", + "parent": "head", + "pivot": [-1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [-3.5, 1, -18], "size": [2, 1, 6], "uv": [5, 31]}, + {"origin": [-1.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1]}, + {"origin": [-1.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0]}, + {"origin": [-2.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0]} + ] + }, + { + "name": "l_mandibule", + "parent": "head", + "pivot": [1.33333, 1.5, -11.99167], + "cubes": [ + {"origin": [1.5, 1, -18], "size": [2, 1, 6], "uv": [15, 28], "mirror": true}, + {"origin": [0.5, 1.5, -14.1], "size": [1, 0, 1], "uv": [1, 1], "mirror": true}, + {"origin": [0.5, 1.5, -17.1], "size": [1, 0, 1], "uv": [-1, 0], "mirror": true}, + {"origin": [1.5, 1.5, -19], "size": [1, 0, 1], "uv": [1, 0], "mirror": true} + ] + }, + { + "name": "l_eye", + "parent": "head", + "pivot": [3, 2.75, -8.25], + "cubes": [ + {"origin": [3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15]} + ] + }, + { + "name": "r_eye", + "parent": "head", + "pivot": [-3, 2.75, -8.25], + "cubes": [ + {"origin": [-3, 1.75, -9.25], "size": [0, 2, 2], "inflate": 0.05, "uv": [15, 15], "mirror": true} + ] + }, + { + "name": "l_antenna", + "parent": "head", + "pivot": [3, 3, -9.25], + "cubes": [ + {"origin": [3, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0]} + ] + }, + { + "name": "r_antenna", + "parent": "head", + "pivot": [-3, 3, -9.25], + "cubes": [ + {"origin": [-4, 3, -17.25], "size": [1, 0, 8], "inflate": 0.01, "uv": [12, 0], "mirror": true} + ] + }, + { + "name": "abdomen", + "parent": "thorax", + "pivot": [0, 2.5, -2.125], + "cubes": [ + {"origin": [-2.5, 1, -1.25], "size": [5, 4, 8], "inflate": 0.05, "uv": [1, 0]}, + {"origin": [-1.5, 1.25, -2.25], "size": [3, 2, 1], "uv": [11, 28]} + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json b/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json index dedf02c6..7d17099c 100644 --- a/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/toreterror.geo.json @@ -6,9 +6,9 @@ "identifier": "geometry.unknown", "texture_width": 256, "texture_height": 256, - "visible_bounds_width": 6, - "visible_bounds_height": 5.5, - "visible_bounds_offset": [0, 2.25, 0] + "visible_bounds_width": 8, + "visible_bounds_height": 6.5, + "visible_bounds_offset": [0, 2.75, 0] }, "bones": [ { diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 79d939de..1c26892e 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -150,6 +150,7 @@ "entity.antarchy.cloud_shark": "Cloud Shark", "entity.antarchy.kraken": "The Kraken", "entity.antarchy.missile_squid": "Missile Squid", + "entity.antarchy.octopus_bomb": "Octopus Bomb", "entity.antarchy.nightmare": "Nightmare", "entity.antarchy.bed_bug": "Bed Bug", "entity.antarchy.stink_bug": "Stink Bug", @@ -372,6 +373,7 @@ "item.antarchy.cloud_shark_spawn_egg": "Cloud Shark Spawn Egg", "item.antarchy.kraken_spawn_egg": "Uh, no. Don't.", "item.antarchy.missile_squid_spawn_egg": "Missile Squid Spawn Egg", + "item.antarchy.octopus_bomb_spawn_egg": "Octopus Bomb Spawn Egg", "item.antarchy.nightmare_spawn_egg": "Nightmare Spawn Egg", "item.antarchy.toreterror_spawn_egg": "Toreterror Spawn Egg", "item.antarchy.creeping_horror_spawn_egg": "Creeping Horror Spawn Egg", diff --git a/common/src/main/resources/assets/antarchy/models/block/termite_nest.json b/common/src/main/resources/assets/antarchy/models/block/termite_nest.json index 9b9976b0..1bc0e245 100644 --- a/common/src/main/resources/assets/antarchy/models/block/termite_nest.json +++ b/common/src/main/resources/assets/antarchy/models/block/termite_nest.json @@ -1,8 +1,12 @@ { - "parent": "minecraft:block/orientable", + "parent": "minecraft:block/cube", "textures": { - "front": "antarchy:block/termite_nest_front", - "side": "antarchy:block/termite_nest_side", - "top": "antarchy:block/termite_nest_top" + "particle": "antarchy:block/brown_ant_nest/brown_ant_nest", + "down": "minecraft:block/coarse_dirt", + "up": "antarchy:block/brown_ant_nest/brown_ant_nest_top", + "north": "antarchy:block/brown_ant_nest/brown_ant_nest", + "south": "antarchy:block/brown_ant_nest/brown_ant_nest", + "west": "antarchy:block/brown_ant_nest/brown_ant_nest", + "east": "antarchy:block/brown_ant_nest/brown_ant_nest" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json b/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json new file mode 100644 index 00000000..ddd15597 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/octopus_bomb_spawn_egg.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} diff --git a/common/src/main/resources/assets/antarchy/textures/entity/kraken.png b/common/src/main/resources/assets/antarchy/textures/entity/kraken.png new file mode 100644 index 0000000000000000000000000000000000000000..b39b621ce5a4161efe0cd8e43f301e173269b006 GIT binary patch literal 44419 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 FV1l?n!{Gn` diff --git a/common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png b/common/src/main/resources/assets/antarchy/textures/entity/stink_bug.png index 62d2da0fd086e1bccf1f1f089dfb6f3aec3338b2..09c3cec91297929c612fbcdd11b0b20004ad3f0e 100644 GIT binary patch literal 883 zcmV-(1C0EMP)HQHvI#w`ajyVbJea*1pNo?Y}2-dE+P=3MI>cK z(iox5Oj+1-CY$JWKWDmeXY|=XIPc9c;`g0%zW1JY@AusE?)Vb(cV+H;G(R&P%}!24 zvty^!hr^%BW}|xCni-3huU?4k>lm+}>&EzidBEm1+r}1vjf{+DWol|dN|m3I3HqQE znT+FicS*+Jd$^}#_5rtWrbk13n}e@pcee;I!C%h!&Hne}7A%Ej`4)yX!*DeO!593PP3?2v-i z#=p1QCHK94vEMb~nX7r`^lxtb61YNPTWx4M3|P(cXQv|$|7kF2$%-C~{~4+{tb+T)x%)h6~W@LgV(ouK3}4wpN6$N9gv1oILbZz>)pQr00960Ao{O?00006NkltRVmZ literal 674 zcmV;T0$u%yP)n5R3WaVIe}Eu#(MbJRxDevPzfeKwuPO-UHwX>5sNhE-8$r;$Ac!b} z*o3GV<9XiX4(X84+ppb(yff#%=X1`SdnZ`xFRP8M-W*$FZ31Mt2-YC36XT{A-~o4T z_RU5If@J6PuQkl-mnJ|KnRW?jW^Uzyw?D2~OeEPk*PQAfQoXzPa?9$=)_d^VIvWGY zaH;-_?2-#;@2@Dv?KfBL$%pHb#nAD9Uy=*p$qD!L#wUAw=QEH(&mx|;9nEvkOPbDS^GMwc@?Fu+h zaETS97vPE7uWCw063Nab=2>W#UO)`t1E)cYYwi>>Js;E&xI_etCzqdM-TMula=k~F zb=S!k^(g_pxX#^Wv!zv2ERR{lCl2ej&7kuGeedA~gA255`+ZaImce3>MuTq}Hr_Q4j-wpB&FBF-ICR*shL66) zf>Uf>kz;HBpY3jZv1jYwt+o5t$Q|VDN*3*xPI?j?g(<)FdSI>RzvLhu8`r_1!&iWx zLb2RNyps6E*9W9@N@4-xBGL_hAc{H%-)Ou3+e^Psc;d0e6Q zIk>jsUq9Y!L7rR)KMwpLDf!Ri3X|d2ti3m!bg3XuE(8TD`Oo7@CTF&s4B?rDJAR<5 zfT{yk2dWNK9jH2R?j1Pl^YkA80RR8~j-$H(000I_L_t&o01bInP_vI1i2wiq07*qo IM6N<$f^pG5!TZ$3)gRr(M z|Nd!I=EmX@JJT&wgTq4m!q7zlr@#42`g$&?&X{Q3@{}|~k3i8j++L|!uiM!o6^#u- zo9u(#?YCUTfYSQX&~MreFwg-E_fBfoVZixg=Y%%d2P+vcGdknWze?|VHj?q zfR4>T8(4eQ1lQRR=m2iMzh1LW_P6i5Lum862gU$&Vhh56y1TB_l!;+RiP$*zCuFuo zkL-L0I)Fcp^l8?~KA=50J}qGM?3hY)LM&}8M)+bPwxE3!%f^<)<;`Xr=1@#m=PZ6L zMzF>LcOGoktn=F^`?RV4ptZ9}kbr4s24@kzU~|1+$AwJWCb99;iTxfII}CJez7t)i z4m|*_>)_;D4<}4=-T(fTy?Wi}3gE6sn}dkQ;#wT(<8T?Jq{Q$Op%&ZtGB6atD>Va*KedPf*%*N79+E84aNCg{1fkU?fhhAP%ER{=$mWh7KH${Yv zn;jqRNPb0^o+)guq$w-^B0SAey@!q-NL~RBXw`=meyg$ZAbs5IxCIW{|MTCh0HZe9 zN5=;6vAG$`9M;a3jF4@zPWAz80N1);$A=4E`x|iu`k~*%13Y!|zy;3D&U-Gf0etWU zjCJRs{Z!ZDT=b)3%QViF{#pabI1GRZT>D|gN=IuC&(3=3V1BtGuc`qsfuaU0GTA_N zSv2uTTYFBu2(kTX4It}e9~Qs{U=Bg$iIcwsbq$rD)&R0j_OG=Dj89K^AXGaG7>w2c zG7n$@Y)DrF+<6(34z6!lb*%wp9>4iKd$ptz|_ClWt$wbY%cp2gU@yAlZ13K6|V+ z={F_}c4dHN-k7l7!0MwFI)zDXg!D@pV3~&nz%SOe+W+VIPL45JsC@2Fg z^Tq_fVAxdDp*B^XH@!&yhl#-*4_mk*xUey<-$v=m0Lwfq0O^8pGx}NozaH=Lknf)v z@lt_)-uJn{#+Y>L+^9bN!$>BJRVE7?{_a80&Q+v504QxVHCiLxO@^J?Zmj9_lm`Gk zji#w+jg5Yn*67$6n{L6d^`$(3umzdTcnSxQ&C|_=xeE-)g)C(=#sUMfdAhkUcYy)9 zkflsw%+$BQfJ{#;-~0;<$hVAUx}O3AGCi?;^Di(U-!hu%ehLi8^u+SbzrcWe%V?(i zDKH?@6U#UM0t0eAqw9_TG5`Po|NlDJ3UmMf00v1!K~w_(sj|SmKJgFW00000NkvXX Hu0mjf-4j7m literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png b/common/src/main/resources/assets/antarchy/textures/entity/toreterror.png index b0eeb33f006cf8be12845bc5e96930253580e9c2..179df7c9af824d2809d3be5f65dfa3d24e132ed5 100644 GIT binary patch literal 13769 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 T)z>=m6M(L!!M(D(HgEn1iz-M| literal 10190 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 buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); + public static final DeferredHolder, EntityType> TERMITE = ENTITY_TYPES.register("termite", + () -> buildAntType(TermiteEntity::new, MobCategory.CREATURE, "termite")); public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) .sized(0.4F, 0.3F) @@ -826,6 +830,8 @@ public final class AntarchyFabricContent { () -> new AntNestBlock(BROWN_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", () -> new AntNestBlock(RAINBOW_ANT, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + public static final DeferredBlock TERMITE_NEST = BLOCKS.register("termite_nest", + () -> new AntNestBlock(TERMITE, AntarchyFabricContent::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", () -> createOre(Blocks.EMERALD_ORE, 4, 8)); public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", @@ -934,7 +940,8 @@ public final class AntarchyFabricContent { AntNestBlockEntity::new, RED_ANT_NEST.get(), BROWN_ANT_NEST.get(), - RAINBOW_ANT_NEST.get() + RAINBOW_ANT_NEST.get(), + TERMITE_NEST.get() ).build(null)); public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", () -> BlockEntityType.Builder.of( @@ -1070,6 +1077,7 @@ public final class AntarchyFabricContent { public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RED_ANT_NEST); public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(BROWN_ANT_NEST); public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(RAINBOW_ANT_NEST); + public static final DeferredItem TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(TERMITE_NEST); public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(URANIUM_ORE); public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(DEEPSLATE_URANIUM_ORE); public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(TITANIUM_ORE); @@ -1527,7 +1535,7 @@ public final class AntarchyFabricContent { .build("cloud_shark")); public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(5.2F, 9.8F) + .sized(11.4F, 39.0F) .clientTrackingRange(12) .build("kraken")); public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", @@ -1535,6 +1543,11 @@ public final class AntarchyFabricContent { .sized(1.62F, 3.18F) .clientTrackingRange(10) .build("missile_squid")); + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) .sized(3.2F, 3.8F) @@ -1610,6 +1623,8 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); + public static final DeferredItem TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg", + () -> new DeferredSpawnEggItem(TERMITE, 0xE8DFC0, 0x5C3C1A, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new DeferredSpawnEggItem(MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", @@ -1640,6 +1655,8 @@ public final class AntarchyFabricContent { () -> new DeferredSpawnEggItem(KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", () -> new DeferredSpawnEggItem(MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", () -> new DeferredSpawnEggItem(NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", @@ -1769,6 +1786,7 @@ public final class AntarchyFabricContent { FabricDefaultAttributeRegistry.register(CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(KRAKEN.get(), KrakenEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(NIGHTMARE.get(), NightmareEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(BED_BUG.get(), BedBugEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(STINK_BUG.get(), StinkBugEntity.createAttributes().build()); @@ -1802,6 +1820,11 @@ public final class AntarchyFabricContent { ).build()); FabricDefaultAttributeRegistry.register(MOLEWORM.get(), MolewormEntity.createAttributes().build()); FabricDefaultAttributeRegistry.register(MOLEVORE.get(), MolevoreEntity.createAttributes().build()); + FabricDefaultAttributeRegistry.register(TERMITE.get(), buildAntAttributes( + AntarchySettings.termiteHealth(), + AntarchySettings.termiteMovementSpeed(), + AntarchySettings.termiteAttackDamage() + ).build()); } private static void registerSpawnPlacements() { @@ -1819,6 +1842,7 @@ public final class AntarchyFabricContent { SpawnPlacements.register(JUMPY_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn); SpawnPlacements.register(KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn); SpawnPlacements.register(MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn); + SpawnPlacements.register(OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn); SpawnPlacements.register(NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn); SpawnPlacements.register(MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn); SpawnPlacements.register(MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn); @@ -1830,6 +1854,7 @@ public final class AntarchyFabricContent { SpawnPlacements.register(BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); SpawnPlacements.register(EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); SpawnPlacements.register(TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); + SpawnPlacements.register(TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); } private static void populateCreativeTab(CreativeModeTab.Output output) { @@ -1918,11 +1943,11 @@ public final class AntarchyFabricContent { case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", - "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", + "red_ant_spawn_egg", "brown_ant_spawn_egg", "rainbow_ant_spawn_egg", "termite_spawn_egg", "moleworm_spawn_egg", "mantis_spawn_egg", "molevore_spawn_egg", "triffid_spawn_egg", "apple_cow_spawn_egg", "golden_apple_cow_spawn_egg", "enchanted_golden_apple_cow_spawn_egg", "honeyed_apple_cow_spawn_egg", "dr_trayaurus_spawn_egg", "wasp_spawn_egg", - "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", + "bomber_spawn_egg", "jumpy_bug_spawn_egg", "stink_bug_spawn_egg", "cloud_shark_spawn_egg", "kraken_spawn_egg", "missile_squid_spawn_egg", "octopus_bomb_spawn_egg", "nightmare_spawn_egg", "bed_bug_spawn_egg", "lucid_spawn_egg", "scorpion_spawn_egg", "basilisk_spawn_egg", "emperor_scorpion_spawn_egg", "toreterror_spawn_egg", "creeping_horror_spawn_egg", "lurking_terror_spawn_egg" -> 90; @@ -2324,6 +2349,7 @@ public final class AntarchyFabricContent { DUCT_TAPE_USE ); + AntarchyObjects.setOctopusBomb(OCTOPUS_BOMB); AntarchyObjects.bind( EASTER_BUNNY, FLYING_SQUIRREL, diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java index c4cb5790..1584e2d5 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricEvents.java @@ -53,6 +53,7 @@ public final class AntarchyFabricEvents { ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.AMBER_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.AMBER_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CREEPVINE.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyFabricContent.CORNEA_EAR.get(), 0.65f); 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 921ba8e5..48130010 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 @@ -73,6 +73,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.RED_ANT.get(), AntRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BROWN_ANT.get(), AntRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.RAINBOW_ANT.get(), AntRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.TERMITE.get(), TermiteRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MOLEWORM.get(), MolewormRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MANTIS.get(), MantisRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MOLEVORE.get(), MolevoreRenderer::new); @@ -87,6 +88,7 @@ public final class AntarchyFabricClientBootstrap { EntityRendererRegistry.register(AntarchyFabricContent.CLOUD_SHARK.get(), CloudSharkRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.KRAKEN.get(), KrakenRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.MISSILE_SQUID.get(), MissileSquidRenderer::new); + EntityRendererRegistry.register(AntarchyFabricContent.OCTOPUS_BOMB.get(), OctopusBombRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.NIGHTMARE.get(), NightmareRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.LUCID.get(), LucidRenderer::new); EntityRendererRegistry.register(AntarchyFabricContent.BED_BUG.get(), BedBugRenderer::new); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 7ce91fed..92e197d5 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -252,6 +252,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD ); + AntarchyObjects.setOctopusBomb(AntarchyNeoforgeEntites.OCTOPUS_BOMB); } private static boolean isModLoaded(String modId) { diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index e71ecf5d..3ea56095 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -87,6 +87,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.RED_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BROWN_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), context -> withParalyzedGeoLayer(new AntRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.TERMITE.get(), context -> withParalyzedGeoLayer(new TermiteRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEWORM.get(), context -> withParalyzedGeoLayer(new MolewormRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MANTIS.get(), context -> withParalyzedGeoLayer(new MantisRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MOLEVORE.get(), context -> withParalyzedGeoLayer(new MolevoreRenderer(context))); @@ -101,6 +102,7 @@ public final class AntarchyNeoForgeClient { event.registerEntityRenderer(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), context -> withParalyzedGeoLayer(new CloudSharkRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.KRAKEN.get(), context -> withParalyzedGeoLayer(new KrakenRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), context -> withParalyzedGeoLayer(new MissileSquidRenderer(context))); + event.registerEntityRenderer(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), context -> withParalyzedGeoLayer(new OctopusBombRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.NIGHTMARE.get(), context -> withParalyzedGeoLayer(new NightmareRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.LUCID.get(), context -> withParalyzedGeoLayer(new LucidRenderer(context))); event.registerEntityRenderer(AntarchyNeoforgeEntites.BED_BUG.get(), context -> withParalyzedGeoLayer(new BedBugRenderer(context))); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java index d11f817b..99f897ef 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoForgeEvents.java @@ -1126,6 +1126,7 @@ public final class AntarchyNeoForgeEvents { ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.AMBER_MOSS_BLOCK.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET.get().asItem(), 0.3f); + ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.CREEPVINE.get().asItem(), 0.3f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeBlocks.HUSHWEED.get().asItem(), 0.65f); ComposterBlock.COMPOSTABLES.put(AntarchyNeoforgeItems.CORNEA_EAR.get(), 0.65f); }); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index fc3d1ee7..6f0bef7a 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -240,6 +240,8 @@ public final class AntarchyNeoforgeBlocks { () -> new AntNestBlock(AntarchyNeoforgeEntites.BROWN_ANT, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); public static final DeferredBlock RAINBOW_ANT_NEST = BLOCKS.register("rainbow_ant_nest", () -> new AntNestBlock(AntarchyNeoforgeEntites.RAINBOW_ANT, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); + public static final DeferredBlock TERMITE_NEST = BLOCKS.register("termite_nest", + () -> new AntNestBlock(AntarchyNeoforgeEntites.TERMITE, AntarchyNeoforgeItems::antNestBlockEntityType, BlockBehaviour.Properties.ofFullCopy(Blocks.DIRT).noLootTable())); public static final DeferredBlock URANIUM_ORE = BLOCKS.register("uranium_ore", () -> createOre(Blocks.EMERALD_ORE, 4, 8)); public static final DeferredBlock DEEPSLATE_URANIUM_ORE = BLOCKS.register("deepslate_uranium_ore", @@ -350,7 +352,8 @@ public final class AntarchyNeoforgeBlocks { AntNestBlockEntity::new, RED_ANT_NEST.get(), BROWN_ANT_NEST.get(), - RAINBOW_ANT_NEST.get() + RAINBOW_ANT_NEST.get(), + TERMITE_NEST.get() ).build(null)); public static final DeferredHolder, BlockEntityType> DREAM_CAMPFIRE_BLOCK_ENTITY = BLOCK_ENTITY_TYPES.register("dream_campfire", () -> BlockEntityType.Builder.of( diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index cebd22a7..4fbb93c4 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -57,6 +57,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.RED_ANT_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.BROWN_ANT_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.TERMITE_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MOLEWORM_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MANTIS_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MOLEVORE_SPAWN_EGG.get()); @@ -72,6 +73,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.CLOUD_SHARK_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.KRAKEN_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.MISSILE_SQUID_SPAWN_EGG.get()); + event.accept(AntarchyNeoforgeItems.OCTOPUS_BOMB_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.NIGHTMARE_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.BED_BUG_SPAWN_EGG.get()); event.accept(AntarchyNeoforgeItems.LUCID_SPAWN_EGG.get()); @@ -104,6 +106,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.RED_ANT_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.BROWN_ANT_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.RAINBOW_ANT_NEST_ITEM.get()); + event.accept(AntarchyNeoforgeItems.TERMITE_NEST_ITEM.get()); event.accept(AntarchyNeoforgeItems.URANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DEEPSLATE_URANIUM_ORE_ITEM.get()); event.accept(AntarchyNeoforgeItems.TITANIUM_ORE_ITEM.get()); @@ -385,7 +388,7 @@ public class AntarchyNeoforgeCreativeModeTabs { // 11 - Plants and flowers case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "amber_lichen", "creepvine", "triffid_goo_block", "wasp_nest", - "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest" -> 11; + "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; // 12 - Dream lighting case "dream_torch", "dream_lantern", "dream_campfire" -> 12; diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java index 5e57e5cc..361b7693 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntites.java @@ -18,6 +18,7 @@ import com.craisinlord.antarchy.content.entity.HushProjectileEntity; import com.craisinlord.antarchy.content.entity.JumpyBugEntity; import com.craisinlord.antarchy.content.entity.MantisEntity; import com.craisinlord.antarchy.content.entity.MissileSquidEntity; +import com.craisinlord.antarchy.content.entity.OctopusBombEntity; import com.craisinlord.antarchy.content.entity.MolevoreEntity; import com.craisinlord.antarchy.content.entity.MolewormEntity; import com.craisinlord.antarchy.content.entity.OuranwoodBoatEntity; @@ -33,6 +34,7 @@ import com.craisinlord.antarchy.content.entity.ant.BaseAntEntity; import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; import com.craisinlord.antarchy.content.entity.ant.RainbowAntEntity; import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; import com.craisinlord.antarchy.content.entity.basilisk.BasiliskEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyEntity; import com.craisinlord.antarchy.content.entity.brutalfly.BrutalflyOrbEntity; @@ -74,6 +76,8 @@ public final class AntarchyNeoforgeEntites { () -> buildAntType(BrownAntEntity::new, MobCategory.CREATURE, "brown_ant")); public static final DeferredHolder, EntityType> RAINBOW_ANT = ENTITY_TYPES.register("rainbow_ant", () -> buildAntType(RainbowAntEntity::new, MobCategory.CREATURE, "rainbow_ant")); + public static final DeferredHolder, EntityType> TERMITE = ENTITY_TYPES.register("termite", + () -> buildAntType(TermiteEntity::new, MobCategory.CREATURE, "termite")); public static final DeferredHolder, EntityType> MOLEWORM = ENTITY_TYPES.register("moleworm", () -> EntityType.Builder.of(MolewormEntity::new, MobCategory.MONSTER) .sized(0.4F, 0.3F) @@ -199,7 +203,7 @@ public final class AntarchyNeoforgeEntites { .build("cloud_shark")); public static final DeferredHolder, EntityType> KRAKEN = ENTITY_TYPES.register("kraken", () -> EntityType.Builder.of(KrakenEntity::new, MobCategory.MONSTER) - .sized(5.2F, 9.8F) + .sized(11.4F, 39.0F) .clientTrackingRange(12) .build("kraken")); public static final DeferredHolder, EntityType> MISSILE_SQUID = ENTITY_TYPES.register("missile_squid", @@ -207,6 +211,11 @@ public final class AntarchyNeoforgeEntites { .sized(1.62F, 3.18F) .clientTrackingRange(10) .build("missile_squid")); + public static final DeferredHolder, EntityType> OCTOPUS_BOMB = ENTITY_TYPES.register("octopus_bomb", + () -> EntityType.Builder.of(OctopusBombEntity::new, MobCategory.MONSTER) + .sized(2.4F, 2.9F) + .clientTrackingRange(10) + .build("octopus_bomb")); public static final DeferredHolder, EntityType> NIGHTMARE = ENTITY_TYPES.register("nightmare", () -> EntityType.Builder.of(NightmareEntity::new, MobCategory.MONSTER) .sized(3.2F, 3.8F) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java index 6a91e498..3cf6bf1e 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeEntityAttributes.java @@ -44,6 +44,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.CLOUD_SHARK.get(), CloudSharkEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.KRAKEN.get(), KrakenEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), MissileSquidEntity.createAttributes().build()); + event.put(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), OctopusBombEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.NIGHTMARE.get(), NightmareEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.BED_BUG.get(), BedBugEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.STINK_BUG.get(), StinkBugEntity.createAttributes().build()); @@ -67,6 +68,7 @@ public class AntarchyNeoforgeEntityAttributes { event.put(AntarchyNeoforgeEntites.RED_ANT.get(), redAntAttributes); event.put(AntarchyNeoforgeEntites.BROWN_ANT.get(), brownAntAttributes); event.put(AntarchyNeoforgeEntites.RAINBOW_ANT.get(), rainbowAntAttributes); + event.put(AntarchyNeoforgeEntites.TERMITE.get(), termiteAttributes); event.put(AntarchyNeoforgeEntites.MOLEWORM.get(), MolewormEntity.createAttributes().build()); event.put(AntarchyNeoforgeEntites.MOLEVORE.get(), MolevoreEntity.createAttributes().build()); } diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 5d3d620e..270900c0 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -173,6 +173,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem RED_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RED_ANT_NEST); public static final DeferredItem BROWN_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BROWN_ANT_NEST); public static final DeferredItem RAINBOW_ANT_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.RAINBOW_ANT_NEST); + public static final DeferredItem TERMITE_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TERMITE_NEST); public static final DeferredItem URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.URANIUM_ORE); public static final DeferredItem DEEPSLATE_URANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.DEEPSLATE_URANIUM_ORE); public static final DeferredItem TITANIUM_ORE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TITANIUM_ORE); @@ -501,6 +502,8 @@ public final class AntarchyNeoforgeItems { () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.BROWN_ANT, 0x6A4320, 0x26160A, new Item.Properties())); public static final DeferredItem RAINBOW_ANT_SPAWN_EGG = ITEMS.register("rainbow_ant_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.RAINBOW_ANT, 0x56D4F0, 0xF66DBB, new Item.Properties())); + public static final DeferredItem TERMITE_SPAWN_EGG = ITEMS.register("termite_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.TERMITE, 0xE8DFC0, 0x5C3C1A, new Item.Properties())); public static final DeferredItem MOLEWORM_SPAWN_EGG = ITEMS.register("moleworm_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MOLEWORM, 0x7A6150, 0xD2B8A3, new Item.Properties())); public static final DeferredItem MANTIS_SPAWN_EGG = ITEMS.register("mantis_spawn_egg", @@ -531,6 +534,8 @@ public final class AntarchyNeoforgeItems { () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.KRAKEN, 0x163C53, 0x4F8E99, new Item.Properties().rarity(Rarity.EPIC))); public static final DeferredItem MISSILE_SQUID_SPAWN_EGG = ITEMS.register("missile_squid_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.MISSILE_SQUID, 0xD88FA7, 0x8D5269, new Item.Properties().rarity(Rarity.UNCOMMON))); + public static final DeferredItem OCTOPUS_BOMB_SPAWN_EGG = ITEMS.register("octopus_bomb_spawn_egg", + () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.OCTOPUS_BOMB, 0xC882C8, 0x5C1A7A, new Item.Properties().rarity(Rarity.UNCOMMON))); public static final DeferredItem NIGHTMARE_SPAWN_EGG = ITEMS.register("nightmare_spawn_egg", () -> new DeferredSpawnEggItem(AntarchyNeoforgeEntites.NIGHTMARE, 0x22121C, 0xB51B2D, new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem BED_BUG_SPAWN_EGG = ITEMS.register("bed_bug_spawn_egg", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index 748f39bb..bc55ca8c 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -36,6 +36,7 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.JUMPY_BUG.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, JumpyBugEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.KRAKEN.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, KrakenEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MISSILE_SQUID.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MissileSquidEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.OCTOPUS_BOMB.get(), SpawnPlacementTypes.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, OctopusBombEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.NIGHTMARE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, NightmareEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MOLEWORM.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MolewormEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.MANTIS.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, MantisEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); @@ -46,5 +47,6 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } From b416c96ea2895e35e887f0b9d0537f25ed3d8f54 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sat, 27 Jun 2026 02:02:58 -0500 Subject: [PATCH 06/25] added 1 billion bugs --- .../antarchy/config/AntarchySettings.java | 2 +- .../antarchy/content/AntarchyObjects.java | 8 + .../antarchy/content/AntarchyTags.java | 2 + .../content/block/AmberMossBlock.java | 21 +- .../content/block/ChitenSpikeBlock.java | 166 ++++++ .../client/particle/OrangeAshParticle.java | 54 ++ .../client/renderer/CavarynSkyRenderer.java | 155 ++++++ .../content/effect/StinkyMobEffect.java | 13 + .../content/entity/CreepingHorrorEntity.java | 27 + .../content/entity/LurkingTerrorEntity.java | 27 + .../content/entity/OctopusBombEntity.java | 484 ++++++++---------- .../content/entity/ant/BaseAntEntity.java | 12 +- .../content/entity/ant/TermiteEntity.java | 7 + .../content/fluid/BileLiquidBlock.java | 42 ++ .../cavaryn/CavarynBilePoolFeature.java | 150 ++++++ .../cavaryn/CavarynCreepvineFeature.java | 118 +++++ .../cavaryn/CavarynEggPatchFeature.java | 122 +++++ .../cavaryn/CavarynWallAmberMossFeature.java | 165 ++++++ .../cavaryn/ChitenSpikeConfiguration.java | 37 ++ .../worldgen/cavaryn/ChitenSpikeFeature.java | 253 +++++++++ .../worldgen/elythia/CoralSpikeFeature.java | 178 +++++++ .../worldgen/elythia/ElythiaBiomeSource.java | 112 +++- .../antarchy/mixins/BlockEntitySignMixin.java | 37 ++ .../mixins/SquidzookaEnchantMixin.java | 81 +-- .../mixins/SquidzookaMultishotMixin.java | 37 ++ .../mixins/client/CavarynSkyMixin.java | 64 +++ .../DimensionOxygenManagerMixin.java | 63 --- .../resources/antarchy-common.mixins.json | 8 +- .../antarchy/animations/kraken.animation.json | 16 + .../assets/antarchy/blockstates/bile.json | 20 + .../antarchy/blockstates/chiten_spike.json | 14 + .../resources/assets/antarchy/lang/en_us.json | 5 + .../models/block/chiten_spike_down_base.json | 6 + .../block/chiten_spike_down_frustum.json | 6 + .../block/chiten_spike_down_middle.json | 6 + .../models/block/chiten_spike_down_tip.json | 6 + .../block/chiten_spike_down_tip_merge.json | 6 + .../models/block/chiten_spike_up_base.json | 6 + .../models/block/chiten_spike_up_frustum.json | 6 + .../models/block/chiten_spike_up_middle.json | 6 + .../models/block/chiten_spike_up_tip.json | 6 + .../block/chiten_spike_up_tip_merge.json | 6 + .../models/block/creeping_horror_egg_1.json | 2 +- .../models/block/creeping_horror_egg_2.json | 2 +- .../models/block/creeping_horror_egg_3.json | 2 +- .../models/block/creeping_horror_egg_4.json | 2 +- ...lightly_cracked_creeping_horror_egg_1.json | 2 +- ...lightly_cracked_creeping_horror_egg_2.json | 2 +- ...lightly_cracked_creeping_horror_egg_3.json | 2 +- ...lightly_cracked_creeping_horror_egg_4.json | 2 +- .../very_cracked_creeping_horror_egg_1.json | 2 +- .../very_cracked_creeping_horror_egg_2.json | 2 +- .../very_cracked_creeping_horror_egg_3.json | 2 +- .../very_cracked_creeping_horror_egg_4.json | 2 +- .../antarchy/models/item/chiten_spike.json | 6 + .../antarchy/models/item/uranium_bars.json | 2 +- .../assets/antarchy/particles/orange_ash.json | 5 + .../textures/block/bile/bile_flowing.png | Bin 0 -> 9524 bytes .../block/bile/bile_flowing.png.mcmeta | 6 + .../textures/block/bile/bile_still.png | Bin 0 -> 6623 bytes .../textures/block/bile/bile_still.png.mcmeta | 6 + .../chiten_spike/chiten_spike_down_base.png | Bin 0 -> 441 bytes .../chiten_spike_down_frustum.png | Bin 0 -> 408 bytes .../chiten_spike/chiten_spike_down_middle.png | Bin 0 -> 419 bytes .../chiten_spike/chiten_spike_down_tip.png | Bin 0 -> 276 bytes .../chiten_spike_down_tip_merge.png | Bin 0 -> 299 bytes .../chiten_spike/chiten_spike_up_base.png | Bin 0 -> 420 bytes .../chiten_spike/chiten_spike_up_frustum.png | Bin 0 -> 393 bytes .../chiten_spike/chiten_spike_up_middle.png | Bin 0 -> 424 bytes .../chiten_spike/chiten_spike_up_tip.png | Bin 0 -> 241 bytes .../chiten_spike_up_tip_merge.png | Bin 0 -> 279 bytes .../antarchy/textures/item/chiten_spike.png | Bin 0 -> 241 bytes .../textures/item/uranium/uranium_bars.png | Bin 0 -> 395 bytes .../antarchy/textures/particle/orange_ash.png | Bin 0 -> 162 bytes .../data/antarchy/dimension/elythia.json | 86 +++- .../data/antarchy/dimension_type/cavaryn.json | 12 +- .../loot_table/blocks/chiten_spike.json | 19 + .../loot_table/entities/creeping_horror.json | 39 ++ .../loot_table/entities/jumpy_bug.json | 33 ++ .../loot_table/entities/lurking_terror.json | 39 ++ .../loot_table/entities/octopus_bomb.json | 18 + .../loot_table/entities/toreterror.json | 9 +- .../recipe/bone_meal_from_chiten.json | 13 + .../data/antarchy/recipe/chiten_block.json | 5 +- .../tags/block/amber_moss_replaceable.json | 7 + .../tags/block/umbral_moss_replaceable.json | 1 + .../tags/item/multishot_enchantable.json | 7 + .../elythia_firefly_particle_biomes.json | 10 + .../toreterror_arena_biomes.json | 19 +- .../tags/worldgen/biome/is_elythia.json | 3 +- .../tags/worldgen/biome/is_elythia_ocean.json | 7 + .../data/antarchy/worldgen/biome/cavaryn.json | 108 +--- .../worldgen/biome/elythia_coral_spikes.json | 77 +++ .../worldgen/biome/elythia_ocean.json | 18 +- .../amber_moss_patch_bonemeal.json | 27 + .../amber_moss_vegetation.json | 18 + .../cavaryn_bile_pools.json | 4 + .../cavaryn_chiten_spikes.json | 18 + .../configured_feature/cavaryn_creepvine.json | 4 + .../cavaryn_terror_egg_patch.json | 4 + .../cavaryn_wall_amber_moss.json | 4 + .../elythia_coral_spike.json | 4 + .../density_function/elythia_surface.json | 2 +- .../worldgen/noise_settings/cavaryn.json | 46 +- .../worldgen/noise_settings/elythia.json | 28 +- .../cavaryn_amber_moss_patch.json | 27 + .../placed_feature/cavaryn_bile_pools.json | 27 + .../placed_feature/cavaryn_chiten_spikes.json | 27 + .../placed_feature/cavaryn_creepvine.json | 27 + .../cavaryn_terror_egg_patch.json | 27 + .../cavaryn_wall_amber_moss.json | 27 + .../placed_feature/elythia_coral_spike.json | 12 + .../worldgen/structure/toreterror_arena.json | 2 +- .../tags/block/mineable/pickaxe.json | 1 + .../tags/item/enchantable/crossbow.json | 3 +- .../tags/worldgen/biome/is_overworld.json | 6 - .../fabric/AntarchyFabricContent.java | 62 ++- .../client/AntarchyFabricClientBootstrap.java | 15 + .../fabric/client/ElythiaFireflyManager.java | 4 +- .../client/JumpyBootsClientHandler.java | 6 + .../fabric/mixin/ElytraStartFlyingMixin.java | 2 +- .../antarchy/models/item/bile_bucket.json | 6 + .../neoforge/AntarchyNeoForgeFluidTypes.java | 10 + .../antarchy/neoforge/AntarchyNeoforge.java | 2 + .../client/AntarchyNeoForgeClient.java | 36 ++ .../client/ElythiaFireflyManager.java | 4 +- .../client/JumpyBootsClientHandler.java | 6 + .../registry/AntarchyNeoforgeBlocks.java | 5 + .../AntarchyNeoforgeCreativeModeTabs.java | 9 +- .../registry/AntarchyNeoforgeItems.java | 3 + .../registry/AntarchyNeoforgeMisc.java | 46 ++ .../AntarchyNeoforgeSpawnPlacements.java | 2 + .../antarchy/models/item/bile_bucket.json | 5 + 133 files changed, 3064 insertions(+), 643 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntitySignMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java create mode 100644 common/src/main/resources/assets/antarchy/blockstates/bile.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/chiten_spike.json create mode 100644 common/src/main/resources/assets/antarchy/particles/orange_ash.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_still.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_base.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_frustum.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_middle.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_frustum.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_tip_merge.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/chiten_spike.png create mode 100644 common/src/main/resources/assets/antarchy/textures/item/uranium/uranium_bars.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json create mode 100644 common/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json create mode 100644 common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json delete mode 100644 common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json create mode 100644 fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json create mode 100644 neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 63a49f5f..e3843401 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -90,7 +90,7 @@ public final class AntarchySettings { private static ResourceKey rainbowAntNonInfinityFallbackDimension = dimensionKey("antarchy:elythia"); private static double krakenHealth = 1500.0D; private static double krakenAttackDamage = 45.0D; - private static double octopusBombHealth = 250.0D; + private static double octopusBombHealth = 100.0D; private static double octopusBombAttackDamage = 16.0D; private static double brutalflyHealth = 400.0D; private static double brutalflySwipeDamage = 15.0D; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index a9050d9d..01232839 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -148,6 +148,10 @@ public final class AntarchyObjects { @SuppressWarnings("unchecked") public static Supplier NYXITE_SPIKE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") + public static Supplier CHITEN_BLOCK = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier CHITEN_SPIKE = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") public static Supplier POTENT_NYXITE = (Supplier) UNBOUND; @SuppressWarnings("unchecked") public static Supplier ANTIMETAL = (Supplier) UNBOUND; @@ -276,6 +280,8 @@ public final class AntarchyObjects { Supplier triffidGooBlock, Supplier paleNyxite, Supplier nyxiteSpike, + Supplier chitenBlock, + Supplier chitenSpike, Supplier potentNyxite, Supplier antimetal, Supplier polishedAntimetal, @@ -364,6 +370,8 @@ public final class AntarchyObjects { TRIFFID_GOO_BLOCK = triffidGooBlock; PALE_NYXITE = paleNyxite; NYXITE_SPIKE = nyxiteSpike; + CHITEN_BLOCK = chitenBlock; + CHITEN_SPIKE = chitenSpike; POTENT_NYXITE = potentNyxite; ANTIMETAL = antimetal; POLISHED_ANTIMETAL = polishedAntimetal; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 4bffaa9a..d2f7ba3e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -76,6 +76,7 @@ public final class AntarchyTags { public static final TagKey DUCT_TAPE_BLACKLIST = TagKey.create(Registries.ITEM, id("duct_tape_blacklist")); public static final TagKey BROWN_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("brown_ant_activation_items")); public static final TagKey BROWN_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("brown_ant_breeding_foods")); + public static final TagKey MULTISHOT_ENCHANTABLE = TagKey.create(Registries.ITEM, id("multishot_enchantable")); public static final TagKey RED_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("red_ant_activation_items")); public static final TagKey RED_ANT_BREEDING_FOODS = TagKey.create(Registries.ITEM, id("red_ant_breeding_foods")); public static final TagKey RAINBOW_ANT_ACTIVATION_ITEMS = TagKey.create(Registries.ITEM, id("rainbow_ant_activation_items")); @@ -95,6 +96,7 @@ public final class AntarchyTags { public static final class Biomes { public static final TagKey MANTIS_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_spawn_biomes")); public static final TagKey MANTIS_OVERWORLD_SPAWN_BIOMES = TagKey.create(Registries.BIOME, id("mantis_overworld_spawn_biomes")); + public static final TagKey ELYTHIA_FIREFLY_PARTICLE_BIOMES = TagKey.create(Registries.BIOME, id("elythia_firefly_particle_biomes")); private Biomes() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java index 0b0a840c..a0489b1b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/AmberMossBlock.java @@ -1,6 +1,12 @@ package com.craisinlord.antarchy.content.block; +import com.craisinlord.antarchy.Antarchy; import com.mojang.serialization.MapCodec; +import net.minecraft.core.Holder; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerLevel; import net.minecraft.core.BlockPos; import net.minecraft.util.RandomSource; import net.minecraft.world.level.Level; @@ -9,9 +15,14 @@ import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.BonemealableBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; public class AmberMossBlock extends Block implements BonemealableBlock { public static final MapCodec CODEC = Block.simpleCodec(AmberMossBlock::new); + private static final ResourceKey> AMBER_MOSS_PATCH_BONEMEAL = ResourceKey.create( + Registries.CONFIGURED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_moss_patch_bonemeal") + ); public AmberMossBlock(BlockBehaviour.Properties properties) { super(properties); @@ -24,15 +35,19 @@ public class AmberMossBlock extends Block implements BonemealableBlock { @Override public boolean isValidBonemealTarget(LevelReader level, BlockPos pos, BlockState state) { - return false; + return level.getBlockState(pos.above()).isAir(); } @Override public boolean isBonemealSuccess(Level level, RandomSource random, BlockPos pos, BlockState state) { - return false; + return true; } @Override - public void performBonemeal(net.minecraft.server.level.ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + Holder.Reference> feature = level.registryAccess() + .lookupOrThrow(Registries.CONFIGURED_FEATURE) + .getOrThrow(AMBER_MOSS_PATCH_BONEMEAL); + feature.value().place(level, level.getChunkSource().getGenerator(), random, pos); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java new file mode 100644 index 00000000..faf02e93 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/ChitenSpikeBlock.java @@ -0,0 +1,166 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.util.RandomSource; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.LevelReader; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.material.Fluids; + +public class ChitenSpikeBlock extends PointedDripstoneBlock { + @SuppressWarnings("rawtypes") + public static final MapCodec CODEC = (MapCodec) Block.simpleCodec(ChitenSpikeBlock::new); + + public ChitenSpikeBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return CODEC; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { + LevelAccessor level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + Direction direction = calculateTipDirection(level, pos, context.getNearestLookingVerticalDirection().getOpposite()); + if (direction == null) { + return null; + } + + boolean mergeTips = !context.isSecondaryUseActive(); + DripstoneThickness thickness = calculateDripstoneThickness(level, pos, direction, mergeTips); + if (thickness == null) { + return null; + } + + return this.defaultBlockState() + .setValue(TIP_DIRECTION, direction) + .setValue(THICKNESS, thickness) + .setValue(WATERLOGGED, level.getFluidState(pos).getType() == Fluids.WATER); + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (state.getValue(WATERLOGGED)) { + level.scheduleTick(pos, Fluids.WATER, Fluids.WATER.getTickDelay(level)); + } + + if (direction != Direction.UP && direction != Direction.DOWN) { + return state; + } + + Direction tipDirection = state.getValue(TIP_DIRECTION); + if (tipDirection == Direction.DOWN && level.getBlockTicks().hasScheduledTick(pos, this)) { + return state; + } + + if (direction == tipDirection.getOpposite() && !this.canSurvive(state, level, pos)) { + if (tipDirection == Direction.DOWN) { + level.scheduleTick(pos, this, 2); + } else { + level.scheduleTick(pos, this, 1); + } + + return state; + } + + boolean mergeTips = state.getValue(THICKNESS) == DripstoneThickness.TIP_MERGE; + return state.setValue(THICKNESS, calculateDripstoneThickness(level, pos, tipDirection, mergeTips)); + } + + @Override + public boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { + return isValidPointedDripstonePlacement(level, pos, state.getValue(TIP_DIRECTION)); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (this.canSurvive(state, level, pos)) { + return; + } + + if (state.getValue(TIP_DIRECTION) == Direction.DOWN) { + BlockPos.MutableBlockPos root = pos.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(root.above()), Direction.DOWN)) { + root.move(Direction.UP); + } + + BlockPos.MutableBlockPos cursor = root.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.DOWN)) { + BlockState fallingState = level.getBlockState(cursor); + if (isChitenSpikeWithDirection(fallingState, Direction.DOWN)) { + net.minecraft.world.entity.item.FallingBlockEntity.fall(level, cursor, fallingState); + } + cursor.move(Direction.DOWN); + } + return; + } + + BlockPos.MutableBlockPos cursor = pos.mutable(); + while (isChitenSpikeWithDirection(level.getBlockState(cursor), Direction.UP)) { + BlockState spikeState = level.getBlockState(cursor); + dropResources(spikeState, level, cursor); + level.removeBlock(cursor, false); + cursor.move(Direction.UP); + } + } + + private static Direction calculateTipDirection(LevelReader level, BlockPos pos, Direction preferredDirection) { + if (isValidPointedDripstonePlacement(level, pos, preferredDirection)) { + return preferredDirection; + } + + Direction opposite = preferredDirection.getOpposite(); + return isValidPointedDripstonePlacement(level, pos, opposite) ? opposite : null; + } + + private static DripstoneThickness calculateDripstoneThickness(LevelReader level, BlockPos pos, Direction direction, boolean mergeTips) { + Direction opposite = direction.getOpposite(); + BlockState forwardState = level.getBlockState(pos.relative(direction)); + if (isChitenSpikeWithDirection(forwardState, opposite)) { + return !mergeTips && forwardState.getValue(THICKNESS) != DripstoneThickness.TIP_MERGE + ? DripstoneThickness.TIP + : DripstoneThickness.TIP_MERGE; + } + + if (!isChitenSpikeWithDirection(forwardState, direction)) { + return DripstoneThickness.TIP; + } + + DripstoneThickness forwardThickness = forwardState.getValue(THICKNESS); + if (forwardThickness != DripstoneThickness.TIP && forwardThickness != DripstoneThickness.TIP_MERGE) { + BlockState backState = level.getBlockState(pos.relative(opposite)); + return !isChitenSpikeWithDirection(backState, direction) ? DripstoneThickness.BASE : DripstoneThickness.MIDDLE; + } + + return DripstoneThickness.FRUSTUM; + } + + private static boolean isValidPointedDripstonePlacement(LevelReader level, BlockPos pos, Direction direction) { + BlockPos supportPos = pos.relative(direction.getOpposite()); + BlockState supportState = level.getBlockState(supportPos); + return supportState.isFaceSturdy(level, supportPos, direction) || isChitenSpikeWithDirection(supportState, direction); + } + + private static boolean isChitenSpikeWithDirection(BlockState state, Direction direction) { + return state.is(AntarchyObjects.CHITEN_SPIKE.get()) && state.getValue(TIP_DIRECTION) == direction; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java new file mode 100644 index 00000000..560b427f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/particle/OrangeAshParticle.java @@ -0,0 +1,54 @@ +package com.craisinlord.antarchy.content.client.particle; + +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.particle.Particle; +import net.minecraft.client.particle.ParticleProvider; +import net.minecraft.client.particle.ParticleRenderType; +import net.minecraft.client.particle.SpriteSet; +import net.minecraft.client.particle.TextureSheetParticle; +import net.minecraft.core.particles.SimpleParticleType; + +public final class OrangeAshParticle extends TextureSheetParticle { + private final SpriteSet sprites; + + private OrangeAshParticle(ClientLevel level, double x, double y, double z, double xd, double yd, double zd, SpriteSet sprites) { + super(level, x, y, z, xd, yd, zd); + this.sprites = sprites; + this.friction = 0.98F; + this.gravity = 0.0025F; + this.speedUpWhenYMotionIsBlocked = false; + this.hasPhysics = false; + this.xd = xd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.yd = yd * 0.02D - 0.01D - this.random.nextDouble() * 0.01D; + this.zd = zd * 0.08D + (this.random.nextDouble() - 0.5D) * 0.01D; + this.quadSize *= 0.75F + this.random.nextFloat() * 0.5F; + this.lifetime = 40 + this.random.nextInt(28); + this.setColor(0.96F, 0.46F, 0.12F); + this.setAlpha(0.72F); + this.pickSprite(sprites); + } + + @Override + public void tick() { + super.tick(); + this.pickSprite(this.sprites); + } + + @Override + public ParticleRenderType getRenderType() { + return ParticleRenderType.PARTICLE_SHEET_OPAQUE; + } + + public static final class Provider implements ParticleProvider { + private final SpriteSet sprites; + + public Provider(SpriteSet sprites) { + this.sprites = sprites; + } + + @Override + public Particle createParticle(SimpleParticleType type, ClientLevel level, double x, double y, double z, double xd, double yd, double zd) { + return new OrangeAshParticle(level, x, y, z, xd, yd, zd, this.sprites); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java new file mode 100644 index 00000000..e0bed5f3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/CavarynSkyRenderer.java @@ -0,0 +1,155 @@ +package com.craisinlord.antarchy.content.client.renderer; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferUploader; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.MeshData; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexBuffer; +import com.mojang.blaze3d.vertex.VertexFormat; +import java.util.Random; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.core.registries.Registries; +import net.minecraft.resources.ResourceKey; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.Level; + +public final class CavarynSkyRenderer { + public static final ResourceKey CAVARYN = ResourceKey.create( + Registries.DIMENSION, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "cavaryn") + ); + + @org.jetbrains.annotations.Nullable + private static VertexBuffer orangeStarBuffer; + + private CavarynSkyRenderer() { + } + + public static boolean shouldRender(ClientLevel level) { + return level.dimension().equals(CAVARYN); + } + + public static void render( + Minecraft minecraft, + ClientLevel level, + PoseStack poseStack, + org.joml.Matrix4f projectionMatrix, + float partialTick, + Camera camera, + boolean isFoggy, + Runnable setupFog, + VertexBuffer skyBuffer, + VertexBuffer darkBuffer + ) { + setupFog.run(); + if (isFoggy || minecraft.gameRenderer.getMainCamera() != camera) { + return; + } + + float red = 0.015F; + float green = 0.085F; + float blue = 0.035F; + + RenderSystem.depthMask(false); + RenderSystem.setShaderColor(red, green, blue, 1.0F); + skyBuffer.bind(); + skyBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + + float starBrightness = 0.8F; + if (orangeStarBuffer == null) { + orangeStarBuffer = buildOrangeStarBuffer(); + } + + RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); + RenderSystem.setShaderColor(starBrightness, starBrightness, starBrightness, starBrightness); + orangeStarBuffer.bind(); + orangeStarBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionColorShader()); + VertexBuffer.unbind(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.disableBlend(); + + if (camera.getEntity() != null) { + double horizon = camera.getEntity().getEyePosition(partialTick).y - level.getLevelData().getHorizonHeight(level); + if (horizon < 0.0D) { + poseStack.pushPose(); + poseStack.translate(0.0F, 12.0F, 0.0F); + darkBuffer.bind(); + darkBuffer.drawWithShader(poseStack.last().pose(), projectionMatrix, GameRenderer.getPositionShader()); + VertexBuffer.unbind(); + poseStack.popPose(); + } + } + + RenderSystem.depthMask(true); + } + + private static VertexBuffer buildOrangeStarBuffer() { + Random random = new Random(548721L); + BufferBuilder builder = Tesselator.getInstance().begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); + + for (int i = 0; i < 1800; i++) { + double x = random.nextFloat() * 2.0F - 1.0F; + double y = random.nextFloat() * 2.0F - 1.0F; + double z = random.nextFloat() * 2.0F - 1.0F; + double size = 0.12F + random.nextFloat() * 0.12F; + double lenSq = x * x + y * y + z * z; + if (lenSq < 1.0D && lenSq > 0.01D) { + double len = 1.0D / Math.sqrt(lenSq); + x *= len; + y *= len; + z *= len; + double sx = x * 100.0D; + double sy = y * 100.0D; + double sz = z * 100.0D; + double yaw = Math.atan2(x, z); + double sinYaw = Math.sin(yaw); + double cosYaw = Math.cos(yaw); + double pitch = Math.atan2(Math.sqrt(x * x + z * z), y); + double sinPitch = Math.sin(pitch); + double cosPitch = Math.cos(pitch); + double rot = random.nextDouble() * Math.PI * 2.0D; + double sinRot = Math.sin(rot); + double cosRot = Math.cos(rot); + + float[] color = pickStarColor(random); + + for (int j = 0; j < 4; j++) { + double u = (j & 2) - 1; + double v = (j + 1 & 2) - 1; + double px = u * cosRot - v * sinRot; + double py = v * cosRot + u * sinRot; + double qx = px * sinPitch; + double qy = -px * cosPitch; + double rx = qy * sinYaw - py * cosYaw; + double ry = py * sinYaw + qy * cosYaw; + builder.addVertex((float) (sx + rx * size), (float) (sy + qx * size), (float) (sz + ry * size)) + .setColor(color[0], color[1], color[2], 1.0F); + } + } + } + + MeshData mesh = builder.buildOrThrow(); + VertexBuffer buffer = new VertexBuffer(VertexBuffer.Usage.STATIC); + buffer.bind(); + buffer.upload(mesh); + VertexBuffer.unbind(); + return buffer; + } + + private static float[] pickStarColor(Random random) { + float roll = random.nextFloat(); + if (roll < 0.70F) return new float[]{1.00F, 0.55F, 0.14F}; + if (roll < 0.90F) return new float[]{1.00F, 0.70F, 0.24F}; + return new float[]{1.00F, 0.84F, 0.40F}; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java index e8580494..13715363 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/effect/StinkyMobEffect.java @@ -1,10 +1,23 @@ package com.craisinlord.antarchy.content.effect; +import com.craisinlord.antarchy.content.StinkyBehavior; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; +import net.minecraft.world.entity.LivingEntity; public final class StinkyMobEffect extends MobEffect { public StinkyMobEffect() { super(MobEffectCategory.HARMFUL, 0x66773A); } + + @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { + StinkyBehavior.tickStinkyTrail(entity); + return true; + } + + @Override + public boolean shouldApplyEffectTickThisTick(int duration, int amplifier) { + return true; + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java index e6b15149..12868ec8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/CreepingHorrorEntity.java @@ -1,11 +1,16 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.FloatGoal; @@ -18,6 +23,9 @@ import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; @@ -62,6 +70,25 @@ public class CreepingHorrorEntity extends Monster implements GeoEntity { .add(Attributes.FOLLOW_RANGE, 16.0D); } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + boolean validSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && validSupport + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index 9feaf00f..3a44ad3b 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -1,8 +1,13 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.config.AntarchySettings; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.Difficulty; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; +import net.minecraft.world.entity.MobSpawnType; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.FlyingMoveControl; @@ -18,6 +23,9 @@ import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; +import net.minecraft.world.level.ServerLevelAccessor; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.state.BlockState; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animation.AnimatableManager; @@ -52,6 +60,25 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { .add(Attributes.FLYING_SPEED, 0.55D); } + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + return true; + } + + BlockPos belowPos = pos.below(); + BlockState belowState = level.getBlockState(belowPos); + boolean validSupport = !belowState.is(Blocks.BEDROCK) + && belowState.blocksMotion() + && belowState.isFaceSturdy(level, belowPos, Direction.UP) + && belowState.isCollisionShapeFullBlock(level, belowPos); + + return level.getDifficulty() != Difficulty.PEACEFUL + && validSupport + && level.isEmptyBlock(pos) + && level.isEmptyBlock(pos.above()) + && Monster.checkMonsterSpawnRules(entityType, level, spawnReason, pos, random); + } + @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation nav = new FlyingPathNavigation(this, level); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index b06d9949..527f7513 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -2,8 +2,7 @@ package com.craisinlord.antarchy.content.entity; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.damage.AntarchyDamageSources; -import net.minecraft.core.BlockPos; -import net.minecraft.tags.FluidTags; +import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; @@ -11,7 +10,6 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.DifficultyInstance; @@ -24,6 +22,7 @@ import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; import net.minecraft.world.entity.ai.goal.LookAtPlayerGoal; 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; import net.minecraft.world.entity.ai.navigation.FlyingPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; @@ -46,28 +45,21 @@ import java.util.Objects; public class OctopusBombEntity extends Monster implements GeoEntity { private static final EntityDataAccessor ATTACK_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); - private static final EntityDataAccessor ROARING = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor ANIMATION_STATE = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor CAN_FLY = SynchedEntityData.defineId(OctopusBombEntity.class, EntityDataSerializers.BOOLEAN); - private static final String ATTACK_COOLDOWN_KEY = "AttackCooldown"; - private static final String ACTION_TICKS_KEY = "ActionTicks"; - private static final String LAST_ATTACK_STATE_KEY = "LastAttackState"; - private static final String AGGRO_TRIGGERED_KEY = "AggroTriggered"; - private static final String GRAB_TARGET_KEY = "GrabTarget"; - private static final String CAN_FLY_KEY = "CanFly"; - private static final String SPAWNED_BY_KRAKEN_KEY = "SpawnedByKraken"; - private static final int ATTACK_NONE = 0; private static final int ATTACK_GRAB = 1; private static final int ATTACK_SWIPE = 2; + private static final int ANIM_IDLE = 0; private static final int ANIM_SWIM = 2; private static final int ANIM_SWIPE = 3; private static final int ANIM_GRAB = 4; private static final int ANIM_DEATH = 5; + private static final int DEATH_ANIM_TICKS = 60; - private static final int INK_SPRAY_RANGE = 6; + private static final int INK_SPRAY_RANGE = 8; private static final int INK_SPRAY_COOLDOWN = 80; private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); @@ -77,16 +69,21 @@ public class OctopusBombEntity extends Monster implements GeoEntity { private static final RawAnimation DEATH_ANIM = RawAnimation.begin().thenPlay("Death"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + + // Squid-style wander private float wanderDx, wanderDy, wanderDz; private int wanderRetargetTicks; + + // Combat private int attackCooldown; private int actionTicks; private int lastAttackState; - private boolean aggroTriggered; private int grabbedTargetId = -1; private int strafeRetargetTicks; - private int inkSprayCooldown; private float orbitDirection = 1.0F; + private int inkSprayCooldown; + + // Kraken spawn flag private boolean spawnedByKraken; public OctopusBombEntity(EntityType entityType, Level level) { @@ -97,7 +94,7 @@ public class OctopusBombEntity extends Monster implements GeoEntity { public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes() - .add(Attributes.MAX_HEALTH, 250.0D) + .add(Attributes.MAX_HEALTH, 100.0D) .add(Attributes.ATTACK_DAMAGE, 16.0D) .add(Attributes.MOVEMENT_SPEED, 0.28D) .add(Attributes.FLYING_SPEED, 0.28D) @@ -105,15 +102,15 @@ public class OctopusBombEntity extends Monster implements GeoEntity { .add(Attributes.KNOCKBACK_RESISTANCE, 0.4D); } - public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - return level.getFluidState(pos).is(FluidTags.WATER) && level.getFluidState(pos.above()).is(FluidTags.WATER); + public static boolean canSpawn(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, net.minecraft.core.BlockPos pos, RandomSource random) { + return level.getFluidState(pos).is(net.minecraft.tags.FluidTags.WATER) + && level.getFluidState(pos.above()).is(net.minecraft.tags.FluidTags.WATER); } @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); builder.define(ATTACK_STATE, ATTACK_NONE); - builder.define(ROARING, false); builder.define(ANIMATION_STATE, ANIM_IDLE); builder.define(CAN_FLY, false); } @@ -133,12 +130,26 @@ public class OctopusBombEntity extends Monster implements GeoEntity { @Override protected void registerGoals() { - this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 20.0F)); - this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 20.0F)); + this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); - HurtByTargetGoal hurtByTargetGoal = new HurtByTargetGoal(this); - hurtByTargetGoal.setAlertOthers(MissileSquidEntity.class); - this.targetSelector.addGoal(1, hurtByTargetGoal); + // Only retaliate when hit — neutral otherwise + this.targetSelector.addGoal(1, new HurtByTargetGoal(this)); + // When spawned by Kraken and flying, target nearest player + this.targetSelector.addGoal(2, new KrakenSummonTargetGoal(this)); + } + + @Override + protected PathNavigation createNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { + Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); + Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombAttackDamage()); + return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); } @Override @@ -162,19 +173,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { return this.geoCache; } - @Override - protected PathNavigation createNavigation(Level level) { - return new WaterBoundPathNavigation(this, level); - } - - @Override - public SpawnGroupData finalizeSpawn(ServerLevelAccessor level, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData spawnData) { - Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); - this.setHealth((float) com.craisinlord.antarchy.config.AntarchySettings.octopusBombHealth()); - Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(com.craisinlord.antarchy.config.AntarchySettings.octopusBombAttackDamage()); - return super.finalizeSpawn(level, difficulty, spawnReason, spawnData); - } - @Override public void baseTick() { int airSupply = this.getAirSupply(); @@ -196,22 +194,17 @@ public class OctopusBombEntity extends Monster implements GeoEntity { return; } - if (this.attackCooldown > 0) { - this.attackCooldown--; - } - if (this.inkSprayCooldown > 0) { - this.inkSprayCooldown--; - } + if (this.attackCooldown > 0) this.attackCooldown--; + if (this.inkSprayCooldown > 0) this.inkSprayCooldown--; + + // Ink spray — always active regardless of aggro state + this.tickInkSpray(); LivingEntity target = this.getTarget(); - this.tickDefensiveInkSpray(); - if (target == null || !target.isAlive()) { this.resetCombatState(); - if (this.isInWater()) { - this.tickWanderMovement(); - } + if (this.isInWater()) this.tickWanderMovement(); this.updateSwimRotation(); this.updateAnimationState(); return; @@ -219,30 +212,15 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.getLookControl().setLookAt(target, 25.0F, 20.0F); - if (!this.aggroTriggered) { - this.startAggroRoar(); - } - - if (this.isRoaring()) { - this.tickRoarState(target); - this.updateSwimRotation(); - this.updateAnimationState(); - return; - } - if (this.getAttackState() != ATTACK_NONE) { this.tickCurrentAttack(target); - this.updateSwimRotation(); - this.updateAnimationState(); - return; - } - - this.tickPursuitMovement(target); - - if (this.attackCooldown <= 0) { - int nextAttack = this.chooseNextAttack(target); - if (nextAttack != ATTACK_NONE) { - this.startAttack(nextAttack); + } else { + this.tickPursuitMovement(target); + if (this.attackCooldown <= 0) { + int nextAttack = this.chooseNextAttack(target); + if (nextAttack != ATTACK_NONE) { + this.startAttack(nextAttack); + } } } @@ -258,7 +236,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.setDeltaMovement(this.getDeltaMovement().scale(this.isInWater() ? 0.92D : 0.91D)); return; } - super.travel(travelVector); } @@ -296,16 +273,12 @@ public class OctopusBombEntity extends Monster implements GeoEntity { @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); - tag.putInt(ATTACK_COOLDOWN_KEY, this.attackCooldown); - tag.putInt(ACTION_TICKS_KEY, this.actionTicks); - tag.putInt(LAST_ATTACK_STATE_KEY, this.lastAttackState); - tag.putBoolean(AGGRO_TRIGGERED_KEY, this.aggroTriggered); - tag.putBoolean(CAN_FLY_KEY, this.canFly()); - tag.putBoolean(SPAWNED_BY_KRAKEN_KEY, this.spawnedByKraken); - if (this.grabbedTargetId >= 0) { - tag.putInt(GRAB_TARGET_KEY, this.grabbedTargetId); - } - tag.putBoolean("Roaring", this.isRoaring()); + tag.putInt("AttackCooldown", this.attackCooldown); + tag.putInt("ActionTicks", this.actionTicks); + tag.putInt("LastAttackState", this.lastAttackState); + tag.putBoolean("CanFly", this.canFly()); + tag.putBoolean("SpawnedByKraken", this.spawnedByKraken); + if (this.grabbedTargetId >= 0) tag.putInt("GrabTarget", this.grabbedTargetId); tag.putInt("AttackState", this.getAttackState()); tag.putInt("AnimationState", this.getAnimationState()); } @@ -313,27 +286,24 @@ public class OctopusBombEntity extends Monster implements GeoEntity { @Override public void readAdditionalSaveData(CompoundTag tag) { super.readAdditionalSaveData(tag); - this.attackCooldown = tag.getInt(ATTACK_COOLDOWN_KEY); - this.actionTicks = tag.getInt(ACTION_TICKS_KEY); - this.lastAttackState = tag.contains(LAST_ATTACK_STATE_KEY) ? tag.getInt(LAST_ATTACK_STATE_KEY) : ATTACK_NONE; - this.aggroTriggered = tag.getBoolean(AGGRO_TRIGGERED_KEY); - this.setCanFly(tag.getBoolean(CAN_FLY_KEY)); - this.spawnedByKraken = tag.getBoolean(SPAWNED_BY_KRAKEN_KEY); - this.grabbedTargetId = tag.contains(GRAB_TARGET_KEY) ? tag.getInt(GRAB_TARGET_KEY) : -1; - this.entityData.set(ROARING, tag.getBoolean("Roaring")); + this.attackCooldown = tag.getInt("AttackCooldown"); + this.actionTicks = tag.getInt("ActionTicks"); + this.lastAttackState = tag.contains("LastAttackState") ? tag.getInt("LastAttackState") : ATTACK_NONE; + this.setCanFly(tag.getBoolean("CanFly")); + this.spawnedByKraken = tag.getBoolean("SpawnedByKraken"); + this.grabbedTargetId = tag.contains("GrabTarget") ? tag.getInt("GrabTarget") : -1; this.entityData.set(ATTACK_STATE, tag.getInt("AttackState")); this.entityData.set(ANIMATION_STATE, tag.contains("AnimationState") ? tag.getInt("AnimationState") : ANIM_IDLE); - this.updateAnimationState(); - } - - public boolean isRoaring() { - return this.entityData.get(ROARING); } public boolean canFly() { return this.entityData.get(CAN_FLY); } + public void setCanFly(boolean canFly) { + this.entityData.set(CAN_FLY, canFly); + } + public int getAttackState() { return this.entityData.get(ATTACK_STATE); } @@ -342,49 +312,79 @@ public class OctopusBombEntity extends Monster implements GeoEntity { return this.entityData.get(ANIMATION_STATE); } - private void setRoaring(boolean roaring) { - this.entityData.set(ROARING, roaring); + private void setAttackState(int state) { + this.entityData.set(ATTACK_STATE, state); } - public void setCanFly(boolean canFly) { - this.entityData.set(CAN_FLY, canFly); + private void setAnimationState(int state) { + this.entityData.set(ANIMATION_STATE, state); } - public void launchAsProjectile(net.minecraft.world.entity.Entity owner, net.minecraft.world.phys.Vec3 velocity) { + public void launchAsProjectile(net.minecraft.world.entity.Entity owner, Vec3 velocity) { this.spawnedByKraken = true; this.setCanFly(true); this.setDeltaMovement(velocity); } - private void setAttackState(int attackState) { - this.entityData.set(ATTACK_STATE, attackState); - } + // ------------------------------------------------------------------------- + // Squid-style wander + // ------------------------------------------------------------------------- - private void setAnimationState(int animationState) { - this.entityData.set(ANIMATION_STATE, animationState); - } - - private void startAggroRoar() { - this.aggroTriggered = true; - this.actionTicks = 30; - this.setRoaring(true); - this.playSound(AntarchySoundEvents.KRAKEN_ROAR.get(), 1.4F, 1.07F); - this.getNavigation().stop(); - this.setDeltaMovement(this.getDeltaMovement().scale(0.2D)); - this.updateAnimationState(); - } - - private void tickRoarState(LivingEntity target) { - this.getNavigation().stop(); - this.getMoveControl().setWantedPosition(this.getX(), this.getY(), this.getZ(), 0.0D); - this.setDeltaMovement(this.getDeltaMovement().scale(0.6D)); - this.getLookControl().setLookAt(target, 25.0F, 20.0F); - - if (--this.actionTicks <= 0) { - this.actionTicks = 0; - this.setRoaring(false); - this.attackCooldown = 18; + private void tickWanderMovement() { + if (--this.wanderRetargetTicks <= 0) { + this.wanderRetargetTicks = 40 + this.random.nextInt(40); + float angle = this.random.nextFloat() * (float) (Math.PI * 2); + this.wanderDx = Mth.cos(angle) * 0.1f; + this.wanderDy = -0.05f + this.random.nextFloat() * 0.1f; + this.wanderDz = Mth.sin(angle) * 0.1f; } + this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, this.wanderDy, this.wanderDz)); + } + + // ------------------------------------------------------------------------- + // Ink spray + // ------------------------------------------------------------------------- + + private void tickInkSpray() { + if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) return; + + Player nearbyPlayer = this.level().getNearestPlayer(this, INK_SPRAY_RANGE); + if (nearbyPlayer == null || nearbyPlayer.isCreative() || nearbyPlayer.isSpectator()) return; + + this.inkSprayCooldown = INK_SPRAY_COOLDOWN; + this.playSound(AntarchySoundEvents.KRAKEN_HURT.get(), 1.0F, 1.49F); + + double cx = this.getX(); + double cy = this.getY() + this.getBbHeight() * 0.5D; + double cz = this.getZ(); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, cx, cy, cz, 120, 2.0D, 1.2D, 2.0D, 0.04D); + serverLevel.sendParticles(ParticleTypes.SQUID_INK, cx, cy, cz, 60, 3.5D, 1.8D, 3.5D, 0.02D); + } + + // ------------------------------------------------------------------------- + // Combat + // ------------------------------------------------------------------------- + + private void tickPursuitMovement(LivingEntity target) { + if (this.strafeRetargetTicks-- <= 0) { + this.strafeRetargetTicks = 10 + this.random.nextInt(12); + if (this.random.nextFloat() < 0.4F) this.orbitDirection *= -1.0F; + } + Vec3 attackPoint = this.createCombatTarget(target); + this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, 1.1D); + } + + private Vec3 createCombatTarget(LivingEntity target) { + double radius = 9.0D; + double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; + double x = target.getX() + Math.cos(angle) * radius; + double z = target.getZ() + Math.sin(angle) * radius; + double y = Mth.clamp( + target.getY() + 1.0D + Math.sin((this.tickCount + this.getId()) * 0.18D), + target.getY() - 3.0D, + target.getY() + 4.0D + ); + return new Vec3(x, y, z); } private void tickCurrentAttack(LivingEntity target) { @@ -402,7 +402,6 @@ public class OctopusBombEntity extends Monster implements GeoEntity { private void startAttack(int attackState) { this.setAttackState(attackState); this.grabbedTargetId = -1; - if (attackState == ATTACK_GRAB) { this.actionTicks = 55; this.playSound(AntarchySoundEvents.KRAKEN_ATTACK.get(), 1.2F, 1.07F); @@ -417,33 +416,26 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.grabbedTargetId = target.getId(); } - LivingEntity grabbedTarget = this.getGrabbedTarget(); - if (grabbedTarget != null && grabbedTarget.isAlive()) { - this.holdGrabbedTarget(grabbedTarget); + LivingEntity grabbed = this.getGrabbedTarget(); + if (grabbed != null && grabbed.isAlive()) { + this.holdGrabbedTarget(grabbed); if (this.actionTicks <= 45 && this.actionTicks > 10 && this.actionTicks % 10 == 0) { if (this.level() instanceof ServerLevel serverLevel) { - grabbedTarget.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); + grabbed.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), 4.0F); } } } if (--this.actionTicks <= 0) { - if (grabbedTarget != null && grabbedTarget.isAlive()) { - this.pullDown(grabbedTarget, 2.5D); - } + if (grabbed != null && grabbed.isAlive()) this.pullDown(grabbed, 2.5D); this.grabbedTargetId = -1; this.finishAttack(); } } private void tickSwipeAttack() { - if (this.actionTicks == 10) { - this.performSwipe(); - } - - if (--this.actionTicks <= 0) { - this.finishAttack(); - } + if (this.actionTicks == 10) this.performSwipe(); + if (--this.actionTicks <= 0) this.finishAttack(); } private void finishAttack() { @@ -453,70 +445,13 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.attackCooldown = 18; this.grabbedTargetId = -1; this.lastAttackState = finished; - this.updateAnimationState(); - } - - private void tickPursuitMovement(LivingEntity target) { - if (this.strafeRetargetTicks-- <= 0) { - this.strafeRetargetTicks = 10 + this.random.nextInt(12); - if (this.random.nextFloat() < 0.4F) { - this.orbitDirection *= -1.0F; - } - } - - Vec3 attackPoint = this.createCombatTarget(target); - this.getMoveControl().setWantedPosition(attackPoint.x, attackPoint.y, attackPoint.z, 1.1D); - } - - private void resetCombatState() { - this.setAttackState(ATTACK_NONE); - this.setRoaring(false); - this.setTarget(null); - this.actionTicks = 0; - this.grabbedTargetId = -1; - this.aggroTriggered = false; - this.updateAnimationState(); - } - - private void handleAirSupply(int previousAirSupply) { - if (this.isInWaterOrBubble()) { - this.setAirSupply(this.getMaxAirSupply()); - return; - } - - this.setAirSupply(previousAirSupply - 1); - if (this.getAirSupply() <= -20) { - this.setAirSupply(0); - this.hurt(this.damageSources().drown(), 2.0F); - } - } - - private void tickDefensiveInkSpray() { - if (this.inkSprayCooldown > 0 || !(this.level() instanceof ServerLevel serverLevel)) { - return; - } - - Player nearbyPlayer = this.level().getNearestPlayer(this, INK_SPRAY_RANGE); - if (nearbyPlayer == null || nearbyPlayer.isCreative() || nearbyPlayer.isSpectator()) { - return; - } - - this.inkSprayCooldown = INK_SPRAY_COOLDOWN; - this.playSound(AntarchySoundEvents.KRAKEN_HURT.get(), 1.0F, 1.49F); - - double centerY = this.getY() + this.getBbHeight() * 0.5D; - serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), centerY, this.getZ(), 55, 1.2D, 0.8D, 1.2D, 0.02D); - serverLevel.sendParticles(ParticleTypes.SQUID_INK, this.getX(), centerY, this.getZ(), 35, 2.0D, 1.1D, 2.0D, 0.01D); } private int chooseNextAttack(LivingEntity target) { double distSqr = this.distanceToSqr(target); boolean canGrab = distSqr <= 42.25D; boolean canSwipe = distSqr <= 81.0D && this.isTargetInFront(target, -0.15D); - - if (!canGrab && !canSwipe) { - return ATTACK_NONE; - } + if (!canGrab && !canSwipe) return ATTACK_NONE; int grabWeight = canGrab ? (this.lastAttackState == ATTACK_GRAB ? 1 : 4) : 0; int swipeWeight = canSwipe ? (this.lastAttackState == ATTACK_SWIPE ? 1 : 5) : 0; @@ -524,19 +459,19 @@ public class OctopusBombEntity extends Monster implements GeoEntity { if (total == 0) return ATTACK_NONE; int roll = this.random.nextInt(total); - if (roll < grabWeight) return ATTACK_GRAB; - return ATTACK_SWIPE; + return roll < grabWeight ? ATTACK_GRAB : ATTACK_SWIPE; } private void performSwipe() { AABB hitBox = this.getBoundingBox().inflate(7.0D, 3.0D, 7.0D); - List players = this.level().getEntitiesOfClass(Player.class, hitBox, player -> player.isAlive() && this.isTargetInFront(player, -0.15D)); + List players = this.level().getEntitiesOfClass(Player.class, hitBox, + p -> p.isAlive() && this.isTargetInFront(p, -0.15D)); float damage = (float) this.getAttributeValue(Attributes.ATTACK_DAMAGE); for (Player player : players) { if (this.level() instanceof ServerLevel serverLevel) { player.hurt(AntarchyDamageSources.krakenMauling(serverLevel, this), damage); - Vec3 direction = player.position().subtract(this.position()); - Vec3 horizontal = new Vec3(direction.x, 0.0D, direction.z).normalize().scale(1.75D); + Vec3 dir = player.position().subtract(this.position()); + Vec3 horizontal = new Vec3(dir.x, 0.0D, dir.z).normalize().scale(1.75D); player.push(horizontal.x, 0.3D, horizontal.z); player.hurtMarked = true; } @@ -547,45 +482,49 @@ public class OctopusBombEntity extends Monster implements GeoEntity { Vec3 anchor = this.position().add(0.0D, -this.getBbHeight() * 0.4D, 0.0D); target.setDeltaMovement(anchor.subtract(target.position()).scale(0.35D)); target.resetFallDistance(); - if (target instanceof ServerPlayer serverPlayer) { - serverPlayer.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); + if (target instanceof ServerPlayer sp) { + sp.connection.teleport(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); } else { target.moveTo(anchor.x, anchor.y, anchor.z, target.getYRot(), target.getXRot()); } target.hurtMarked = true; } - private void pullDown(LivingEntity target, double downwardStrength) { - target.push(0.0D, -downwardStrength, 0.0D); + private void pullDown(LivingEntity target, double strength) { + target.push(0.0D, -strength, 0.0D); target.hurtMarked = true; } @Nullable private LivingEntity getGrabbedTarget() { - if (this.grabbedTargetId < 0) { - return null; - } - net.minecraft.world.entity.Entity entity = this.level().getEntity(this.grabbedTargetId); - return entity instanceof LivingEntity livingEntity ? livingEntity : null; + if (this.grabbedTargetId < 0) return null; + net.minecraft.world.entity.Entity e = this.level().getEntity(this.grabbedTargetId); + return e instanceof LivingEntity le ? le : null; } - private boolean isTargetInFront(LivingEntity target, double minimumDot) { + private boolean isTargetInFront(LivingEntity target, double minDot) { Vec3 forward = this.getViewVector(1.0F); Vec3 toTarget = target.position().subtract(this.position()).normalize(); - return forward.dot(toTarget) >= minimumDot; + return forward.dot(toTarget) >= minDot; } - private Vec3 createCombatTarget(LivingEntity target) { - double radius = 9.0D; - double angle = this.tickCount * 0.16D * this.orbitDirection + this.getId() * 0.11D; - double x = target.getX() + Math.cos(angle) * radius; - double z = target.getZ() + Math.sin(angle) * radius; - double y = Mth.clamp( - target.getY() + 1.0D + Math.sin((this.tickCount + this.getId()) * 0.18D), - target.getY() - 3.0D, - target.getY() + 4.0D - ); - return new Vec3(x, y, z); + private void resetCombatState() { + this.setAttackState(ATTACK_NONE); + this.setTarget(null); + this.actionTicks = 0; + this.grabbedTargetId = -1; + } + + private void handleAirSupply(int previousAirSupply) { + if (this.isInWaterOrBubble()) { + this.setAirSupply(this.getMaxAirSupply()); + return; + } + this.setAirSupply(previousAirSupply - 1); + if (this.getAirSupply() <= -20) { + this.setAirSupply(0); + this.hurt(this.damageSources().drown(), 2.0F); + } } private void updateSwimRotation() { @@ -596,21 +535,41 @@ public class OctopusBombEntity extends Monster implements GeoEntity { this.yBodyRot = this.getYRot(); this.yHeadRot = this.getYRot(); } - if (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, 4.0F)); } } + private void updateAnimationState() { + if (this.isDeadOrDying()) { + this.setAnimationState(ANIM_DEATH); + return; + } + switch (this.getAttackState()) { + case ATTACK_GRAB -> { this.setAnimationState(ANIM_GRAB); return; } + case ATTACK_SWIPE -> { this.setAnimationState(ANIM_SWIPE); return; } + default -> {} + } + if (!this.isInWater()) { + this.setAnimationState(ANIM_SWIM); + return; + } + Vec3 vel = this.getDeltaMovement(); + double hSqr = vel.horizontalDistanceSqr(); + double vSqr = vel.y * vel.y; + if (hSqr > 0.03D && hSqr > vSqr * 2.5D) { + this.setAnimationState(ANIM_SWIM); + return; + } + this.setAnimationState(ANIM_IDLE); + } + @Override public void die(DamageSource damageSource) { if (!this.level().isClientSide) { this.setAnimationState(ANIM_DEATH); - this.actionTicks = 0; - this.attackCooldown = 0; this.setAttackState(ATTACK_NONE); - this.setRoaring(false); this.setDeltaMovement(Vec3.ZERO); this.getNavigation().stop(); } @@ -620,65 +579,28 @@ public class OctopusBombEntity extends Monster implements GeoEntity { @Override protected void tickDeath() { this.deathTime++; - - if (this.deathTime == 1) { - this.setAnimationState(ANIM_DEATH); - } - + if (this.deathTime == 1) this.setAnimationState(ANIM_DEATH); if (this.deathTime >= DEATH_ANIM_TICKS) { this.remove(RemovalReason.KILLED); this.dropExperience(this); } } - private void updateAnimationState() { - if (this.isDeadOrDying()) { - this.setAnimationState(ANIM_DEATH); - return; + // ------------------------------------------------------------------------- + // Inner goal: only target players when spawned by Kraken in fly mode + // ------------------------------------------------------------------------- + + private static final class KrakenSummonTargetGoal extends NearestAttackableTargetGoal { + private final OctopusBombEntity octopus; + + KrakenSummonTargetGoal(OctopusBombEntity octopus) { + super(octopus, Player.class, true); + this.octopus = octopus; } - if (this.isRoaring()) { - this.setAnimationState(ANIM_IDLE); - return; + @Override + public boolean canUse() { + return this.octopus.spawnedByKraken && this.octopus.canFly() && super.canUse(); } - - switch (this.getAttackState()) { - case ATTACK_GRAB -> { - this.setAnimationState(ANIM_GRAB); - return; - } - case ATTACK_SWIPE -> { - this.setAnimationState(ANIM_SWIPE); - return; - } - default -> { - } - } - - if (!this.isInWater()) { - this.setAnimationState(ANIM_SWIM); - return; - } - - Vec3 velocity = this.getDeltaMovement(); - double horizontalSpeedSqr = velocity.horizontalDistanceSqr(); - double verticalSpeedSqr = velocity.y * velocity.y; - if (horizontalSpeedSqr > 0.03D && horizontalSpeedSqr > verticalSpeedSqr * 2.5D) { - this.setAnimationState(ANIM_SWIM); - return; - } - - this.setAnimationState(ANIM_IDLE); - } - - private void tickWanderMovement() { - if (--this.wanderRetargetTicks <= 0) { - this.wanderRetargetTicks = 40 + this.random.nextInt(40); - float angle = this.random.nextFloat() * (float) (Math.PI * 2); - this.wanderDx = Mth.cos(angle) * 0.1f; - this.wanderDy = -0.05f + this.random.nextFloat() * 0.1f; - this.wanderDz = Mth.sin(angle) * 0.1f; - } - this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, this.wanderDy, this.wanderDz)); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java index 464d61f2..5b09bb03 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/BaseAntEntity.java @@ -1230,11 +1230,11 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { } private boolean shouldPlayAttackAnimation() { - if (!(this instanceof RedAntEntity)) { - return false; - } + return this.shouldUseBiteAnimation() && this.getBiteAnimationTicks() > 0; + } - return this.getBiteAnimationTicks() > 0; + protected boolean shouldUseBiteAnimation() { + return this instanceof RedAntEntity; } private int getBiteAnimationTicks() { @@ -1245,6 +1245,10 @@ public abstract class BaseAntEntity extends Animal implements GeoEntity { this.entityData.set(BITE_ANIM_TICKS, Math.max(0, ticks)); } + protected final void triggerBiteAnimation(int ticks) { + this.setBiteAnimationTicks(ticks); + } + private void syncAttribute(@Nullable AttributeInstance attributeInstance, double desiredValue, boolean rescaleCurrentHealth) { if (attributeInstance == null || Math.abs(attributeInstance.getBaseValue() - desiredValue) < ATTRIBUTE_EPSILON) { return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java index 8bab5980..70afc6ff 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java @@ -17,6 +17,7 @@ import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; public class TermiteEntity extends BaseAntEntity implements GeoEntity { + private static final int WOOD_BITE_ANIMATION_TICKS = 8; private static final int WOOD_SEARCH_INTERVAL_TICKS = 10; private static final int WOOD_REPATH_INTERVAL_TICKS = 6; private static final int WOOD_SEARCH_RADIUS_HORIZONTAL = 12; @@ -88,6 +89,11 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { return false; } + @Override + protected boolean shouldUseBiteAnimation() { + return true; + } + @Override protected boolean handlePriorityForaging() { if (!this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) { @@ -126,6 +132,7 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } SoundType soundType = targetState.getSoundType(); + this.triggerBiteAnimation(WOOD_BITE_ANIMATION_TICKS); this.level().destroyBlock(targetPos, false, this); this.level().playSound(null, targetPos, soundType.getBreakSound(), this.getSoundSource(), 0.7F, 1.1F); return true; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java new file mode 100644 index 00000000..81476b5f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.fluid; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import net.minecraft.core.BlockPos; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.tags.EntityTypeTags; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FlowingFluid; +import net.minecraft.world.phys.Vec3; + +public class BileLiquidBlock extends LiquidBlock { + private static final int EFFECT_DURATION_TICKS = 100; + private static final Vec3 SLOW_MOVEMENT = new Vec3(0.85D, 0.95D, 0.85D); + + public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { + super(fluid, properties); + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + super.entityInside(state, level, pos, entity); + + if (entity instanceof LivingEntity livingEntity) { + if (!level.isClientSide) { + livingEntity.addEffect(new MobEffectInstance(AntarchyObjects.STINKY_EFFECT.get(), EFFECT_DURATION_TICKS, 0, false, true, true)); + livingEntity.addEffect(new MobEffectInstance(MobEffects.WEAKNESS, EFFECT_DURATION_TICKS, 0, false, true, true)); + } + + if (livingEntity.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + return; + } + } + + entity.makeStuckInBlock(state, SLOW_MOVEMENT); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java new file mode 100644 index 00000000..f28f4f69 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java @@ -0,0 +1,150 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBilePoolFeature extends Feature { + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int FLOOR_SCAN_RANGE = 14; + + public CavarynBilePoolFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileBlock = getBlock(BILE_ID); + if (!(bileBlock instanceof LiquidBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos floorCenter = findPoolFloor(level, context.origin(), random); + if (floorCenter == null) { + return false; + } + + return placePool(level, floorCenter, bileBlock.defaultBlockState(), random); + } + + private static BlockPos findPoolFloor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(FLOOR_SCAN_RANGE * 2 + 1) - FLOOR_SCAN_RANGE; + startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 4, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 2, startY - FLOOR_SCAN_RANGE); y--) { + mutable.set(x, y, z); + BlockState floorState = level.getBlockState(mutable); + if (!isValidFloor(level, mutable, floorState)) { + continue; + } + + BlockState aboveState = level.getBlockState(mutable.above()); + if (!isOpenBlock(aboveState)) { + continue; + } + + if (countSolidNeighbors(level, mutable) >= 3) { + return mutable.immutable(); + } + } + } + + return null; + } + + private static boolean placePool(WorldGenLevel level, BlockPos center, BlockState bileState, RandomSource random) { + boolean placedAny = false; + int radius = 2 + random.nextInt(3); + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double normalized = (dx * dx + dz * dz) / (double) Math.max(1, radius * radius); + if (normalized > 1.0D + random.nextDouble() * 0.2D) { + continue; + } + + double density = 1.0D - Math.min(1.0D, normalized); + int localDepth = density > 0.45D || random.nextFloat() < 0.35F ? 2 : 1; + localDepth = Mth.clamp(localDepth, 1, 2); + + for (int depth = 0; depth < localDepth; depth++) { + mutable.set(center.getX() + dx, center.getY() - depth, center.getZ() + dz); + BlockState existing = level.getBlockState(mutable); + FluidState existingFluid = existing.getFluidState(); + if (existing.is(Blocks.BEDROCK)) { + break; + } + if (!existing.canBeReplaced() && existingFluid.isEmpty() && !existing.blocksMotion()) { + continue; + } + + level.setBlock(mutable, bileState, 2); + scheduleFluidTick(level, mutable, bileState); + placedAny = true; + } + } + } + + return placedAny; + } + + private static boolean isValidFloor(WorldGenLevel level, BlockPos pos, BlockState state) { + return !state.isAir() + && !state.is(Blocks.BEDROCK) + && state.getFluidState().isEmpty() + && state.blocksMotion() + && state.isFaceSturdy(level, pos, Direction.UP); + } + + private static boolean isOpenBlock(BlockState state) { + return state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty(); + } + + private static int countSolidNeighbors(WorldGenLevel level, BlockPos pos) { + int solidNeighbors = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (Direction direction : Direction.Plane.HORIZONTAL) { + mutable.setWithOffset(pos, direction); + if (isValidFloor(level, mutable, level.getBlockState(mutable))) { + solidNeighbors++; + } + } + return solidNeighbors; + } + + private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java new file mode 100644 index 00000000..2086253d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynCreepvineFeature.java @@ -0,0 +1,118 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.VineBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynCreepvineFeature extends Feature { + private static final ResourceLocation CREEPVINE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "creepvine"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + + public CavarynCreepvineFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block creepvineBlock = getBlock(CREEPVINE_ID); + if (!(creepvineBlock instanceof VineBlock vineBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + return placeVineColumn(level, vineBlock, anchor, random); + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static boolean placeVineColumn(WorldGenLevel level, VineBlock vineBlock, Anchor anchor, RandomSource random) { + boolean placedAny = false; + int length = 3 + random.nextInt(6); + + for (int offset = 0; offset < length; offset++) { + BlockPos vinePos = anchor.pos().below(offset); + if (vinePos.getY() <= level.getMinBuildHeight()) { + break; + } + + BlockState existing = level.getBlockState(vinePos); + if (!existing.canBeReplaced() && !existing.is(vineBlock)) { + break; + } + + BlockState vineState = createVineState(vineBlock, anchor.supportDirection()); + if (vineState == null || !vineState.canSurvive(level, vinePos)) { + break; + } + + level.setBlock(vinePos, vineState, 3); + placedAny = true; + } + + return placedAny; + } + + private static BlockState createVineState(VineBlock vineBlock, Direction attachedFace) { + BlockState state = vineBlock.defaultBlockState(); + return switch (attachedFace) { + case NORTH -> state.setValue(VineBlock.NORTH, Boolean.TRUE); + case SOUTH -> state.setValue(VineBlock.SOUTH, Boolean.TRUE); + case EAST -> state.setValue(VineBlock.EAST, Boolean.TRUE); + case WEST -> state.setValue(VineBlock.WEST, Boolean.TRUE); + default -> null; + }; + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java new file mode 100644 index 00000000..f44424c3 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java @@ -0,0 +1,122 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; +import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; +import com.mojang.serialization.Codec; +import java.util.List; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynEggPatchFeature extends Feature { + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 20; + private static final int FLOOR_SCAN_RANGE = 10; + + public CavarynEggPatchFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + BlockPos surfacePos = findSurfacePos(level, origin, random); + if (surfacePos == null) { + return false; + } + + EggType eggType = random.nextBoolean() ? EggType.CREEPING_HORROR : EggType.LURKING_TERROR; + return placePatch(level, surfacePos, random, eggType); + } + + private static BlockPos findSurfacePos(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(FLOOR_SCAN_RANGE * 2 + 1) - FLOOR_SCAN_RANGE; + startY = Math.max(level.getMinBuildHeight() + 2, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - FLOOR_SCAN_RANGE); y--) { + mutable.set(x, y, z); + BlockState floorState = level.getBlockState(mutable); + BlockState airState = level.getBlockState(mutable.above()); + if (floorState.getFluidState().isEmpty() + && floorState.blocksMotion() + && floorState.isFaceSturdy(level, mutable, Direction.UP) + && airState.canBeReplaced()) { + return mutable.immutable(); + } + } + } + + return null; + } + + private boolean placePatch(WorldGenLevel level, BlockPos center, RandomSource random, EggType eggType) { + int radius = 2 + random.nextInt(3); + boolean placedAny = false; + List eggSpots = new java.util.ArrayList<>(); + + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double distance = dx * dx + dz * dz; + if (distance > radius * radius + random.nextInt(2)) { + continue; + } + + BlockPos floorPos = center.offset(dx, 0, dz); + BlockState floorState = level.getBlockState(floorPos); + BlockPos eggPos = floorPos.above(); + BlockState aboveState = level.getBlockState(eggPos); + if (!isValidEggFloor(level, floorPos, floorState, aboveState)) { + continue; + } + eggSpots.add(eggPos); + } + } + + if (eggSpots.isEmpty()) { + return placedAny; + } + + int eggCount = Math.min(eggSpots.size(), 2 + random.nextInt(3)); + for (int i = 0; i < eggCount; i++) { + BlockPos eggPos = eggSpots.get(random.nextInt(eggSpots.size())); + if (!level.getBlockState(eggPos).canBeReplaced()) { + continue; + } + + BlockState eggState = eggType == EggType.CREEPING_HORROR + ? AntarchyObjects.CREEPING_HORROR_EGGS.get().defaultBlockState() + : AntarchyObjects.LURKING_TERROR_EGGS.get().defaultBlockState(); + eggState = eggState.setValue(eggType == EggType.CREEPING_HORROR ? CreepingHorrorEggBlock.EGGS : LurkingTerrorEggBlock.EGGS, 1 + random.nextInt(4)); + level.setBlock(eggPos, eggState, 3); + placedAny = true; + } + + return placedAny; + } + + private static boolean isValidEggFloor(WorldGenLevel level, BlockPos floorPos, BlockState floorState, BlockState aboveState) { + return !floorState.isAir() + && floorState.getFluidState().isEmpty() + && floorState.blocksMotion() + && floorState.isFaceSturdy(level, floorPos, Direction.UP) + && aboveState.canBeReplaced(); + } + + private enum EggType { + CREEPING_HORROR, + LURKING_TERROR + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java new file mode 100644 index 00000000..1a31ea39 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynWallAmberMossFeature.java @@ -0,0 +1,165 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.MultifaceBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public final class CavarynWallAmberMossFeature extends Feature { + private static final ResourceLocation AMBER_LICHEN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_lichen"); + private static final ResourceLocation GLOW_LICHEN_ID = ResourceLocation.withDefaultNamespace("glow_lichen"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 28; + private static final int VERTICAL_SCAN = 10; + + public CavarynWallAmberMossFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + Block amberLichenBlock = getBlock(AMBER_LICHEN_ID); + Block glowLichenBlock = getBlock(GLOW_LICHEN_ID); + if (amberLichenBlock == null || glowLichenBlock == null) { + return false; + } + + Anchor anchor = findAnchor(level, context.origin(), random); + if (anchor == null) { + return false; + } + + List placedPatch = placeWallPatch(level, anchor, amberLichenBlock, random); + if (placedPatch.isEmpty()) { + return false; + } + + placeLichenFringe(level, placedPatch, anchor.supportDirection(), amberLichenBlock, glowLichenBlock, random); + return true; + } + + private static Anchor findAnchor(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int startY = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + startY = Math.max(level.getMinBuildHeight() + 2, Math.min(level.getMaxBuildHeight() - 3, startY)); + + for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 1, startY - VERTICAL_SCAN); y--) { + mutable.set(x, y, z); + if (!level.getBlockState(mutable).canBeReplaced()) { + continue; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + BlockPos supportPos = mutable.relative(direction); + BlockState supportState = level.getBlockState(supportPos); + if (supportState.isFaceSturdy(level, supportPos, direction.getOpposite())) { + return new Anchor(mutable.immutable(), direction); + } + } + } + } + + return null; + } + + private static List placeWallPatch(WorldGenLevel level, Anchor anchor, Block amberLichenBlock, RandomSource random) { + List placed = new ArrayList<>(); + Direction lateral = anchor.supportDirection().getClockWise(); + int width = 1 + random.nextInt(3); + int height = 2 + random.nextInt(4); + + for (int yOffset = 0; yOffset < height; yOffset++) { + for (int lateralOffset = -width; lateralOffset <= width; lateralOffset++) { + if (Math.abs(lateralOffset) == width && random.nextBoolean()) { + continue; + } + + BlockPos pos = anchor.pos().above(yOffset).relative(lateral, lateralOffset); + if (!canPlaceWallMoss(level, pos, anchor.supportDirection())) { + continue; + } + + BlockState state = createLichenState(amberLichenBlock, anchor.supportDirection()); + if (!state.canSurvive(level, pos)) { + continue; + } + + level.setBlock(pos, state, 3); + placed.add(pos.immutable()); + } + } + + return placed; + } + + private static void placeLichenFringe( + WorldGenLevel level, + List patchPositions, + Direction supportDirection, + Block amberLichenBlock, + Block glowLichenBlock, + RandomSource random + ) { + for (BlockPos patchPos : patchPositions) { + for (Direction spread : List.of(Direction.UP, Direction.DOWN, supportDirection.getClockWise(), supportDirection.getCounterClockWise())) { + if (random.nextFloat() > 0.45F) { + continue; + } + + BlockPos targetPos = patchPos.relative(spread); + if (!level.getBlockState(targetPos).canBeReplaced()) { + continue; + } + if (!hasSupport(level, targetPos, supportDirection)) { + continue; + } + + BlockState state = createLichenState(random.nextFloat() < 0.65F ? amberLichenBlock : glowLichenBlock, supportDirection); + if (!state.canSurvive(level, targetPos)) { + continue; + } + + level.setBlock(targetPos, state, 3); + } + } + } + + private static boolean canPlaceWallMoss(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + return level.getBlockState(pos).canBeReplaced() && hasSupport(level, pos, supportDirection); + } + + private static boolean hasSupport(WorldGenLevel level, BlockPos pos, Direction supportDirection) { + BlockPos supportPos = pos.relative(supportDirection); + return level.getBlockState(supportPos).isFaceSturdy(level, supportPos, supportDirection.getOpposite()); + } + + private static BlockState createLichenState(Block lichenBlock, Direction supportDirection) { + return lichenBlock.defaultBlockState().setValue(MultifaceBlock.getFaceProperty(supportDirection), true); + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record Anchor(BlockPos pos, Direction supportDirection) { + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java new file mode 100644 index 00000000..2160f745 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeConfiguration.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.mojang.serialization.Codec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; + +public record ChitenSpikeConfiguration( + int floorToCeilingSearchRange, + int radius, + int maxColumnHeight, + int heightDeviation, + float chanceOfColumnAtMaxDistanceFromCenter, + int maxDistanceFromCenterAffectingChanceOfColumn, + int maxDistanceFromCenterAffectingHeightBias, + int maxHeightDifference, + float largeVariantChance, + int largeVariantExtraRadius, + int largeVariantExtraHeight, + int largeVariantExtraHeightDeviation, + float largeVariantSurfaceSpikeMultiplier +) implements FeatureConfiguration { + public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + Codec.intRange(1, 128).fieldOf("floor_to_ceiling_search_range").forGetter(ChitenSpikeConfiguration::floorToCeilingSearchRange), + Codec.intRange(1, 32).fieldOf("radius").forGetter(ChitenSpikeConfiguration::radius), + Codec.intRange(1, 32).fieldOf("max_column_height").forGetter(ChitenSpikeConfiguration::maxColumnHeight), + Codec.intRange(1, 16).fieldOf("height_deviation").forGetter(ChitenSpikeConfiguration::heightDeviation), + Codec.floatRange(0.0F, 1.0F).fieldOf("chance_of_column_at_max_distance_from_center").forGetter(ChitenSpikeConfiguration::chanceOfColumnAtMaxDistanceFromCenter), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_chance_of_column").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingChanceOfColumn), + Codec.intRange(1, 64).fieldOf("max_distance_from_center_affecting_height_bias").forGetter(ChitenSpikeConfiguration::maxDistanceFromCenterAffectingHeightBias), + Codec.intRange(0, 32).fieldOf("max_height_difference").forGetter(ChitenSpikeConfiguration::maxHeightDifference), + Codec.floatRange(0.0F, 1.0F).optionalFieldOf("large_variant_chance", 0.0F).forGetter(ChitenSpikeConfiguration::largeVariantChance), + Codec.intRange(0, 24).optionalFieldOf("large_variant_extra_radius", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraRadius), + Codec.intRange(0, 32).optionalFieldOf("large_variant_extra_height", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeight), + Codec.intRange(0, 16).optionalFieldOf("large_variant_extra_height_deviation", 0).forGetter(ChitenSpikeConfiguration::largeVariantExtraHeightDeviation), + Codec.floatRange(1.0F, 8.0F).optionalFieldOf("large_variant_surface_spike_multiplier", 1.0F).forGetter(ChitenSpikeConfiguration::largeVariantSurfaceSpikeMultiplier) + ).apply(instance, ChitenSpikeConfiguration::new)); +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java new file mode 100644 index 00000000..cd73c28b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/ChitenSpikeFeature.java @@ -0,0 +1,253 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.OptionalInt; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.PointedDripstoneBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.DripstoneThickness; +import net.minecraft.world.level.levelgen.Column; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; + +public final class ChitenSpikeFeature extends Feature { + private record ResolvedVariant(int radius, int maxColumnHeight, int heightDeviation, int surfaceSpikeAttempts) { + } + + public ChitenSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + ChitenSpikeConfiguration config = context.config(); + RandomSource random = context.random(); + + if (!level.getBlockState(origin).isAir()) { + return false; + } + + boolean placedAny = false; + List placedBlocks = new ArrayList<>(); + ResolvedVariant variant = this.resolveVariant(config, random); + int radius = variant.radius(); + for (int dx = -radius; dx <= radius; dx++) { + for (int dz = -radius; dz <= radius; dz++) { + double chance = this.getChanceOfColumn(radius, dx, dz, config); + if (chance <= 0.0D) { + continue; + } + if (this.placeColumn(level, random, origin.offset(dx, 0, dz), dx, dz, chance, config, variant, placedBlocks)) { + placedAny = true; + } + } + } + + if (this.dotSurfaceSpikes(level, random, placedBlocks, config, variant)) { + placedAny = true; + } + return placedAny; + } + + private ResolvedVariant resolveVariant(ChitenSpikeConfiguration config, RandomSource random) { + if (config.largeVariantChance() > 0.0F && random.nextFloat() < config.largeVariantChance()) { + int radius = config.radius() + config.largeVariantExtraRadius(); + int maxColumnHeight = config.maxColumnHeight() + config.largeVariantExtraHeight(); + int heightDeviation = config.heightDeviation() + config.largeVariantExtraHeightDeviation(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + int surfaceSpikeAttempts = Math.max(baseAttempts + 4, Math.round(baseAttempts * config.largeVariantSurfaceSpikeMultiplier())); + return new ResolvedVariant(radius, maxColumnHeight, heightDeviation, surfaceSpikeAttempts); + } + + int radius = config.radius(); + int baseAttempts = Math.max(8, ((radius * 2) + 1) * ((radius * 2) + 1) / 6); + return new ResolvedVariant(radius, config.maxColumnHeight(), config.heightDeviation(), baseAttempts); + } + + private boolean placeColumn( + WorldGenLevel level, + RandomSource random, + BlockPos pos, + int dx, + int dz, + double chance, + ChitenSpikeConfiguration config, + ResolvedVariant variant, + List placedBlocks + ) { + Optional optional = Column.scan(level, pos, config.floorToCeilingSearchRange(), state -> state.isAir(), state -> !state.isAir()); + if (optional.isEmpty()) { + return false; + } + + Column column = optional.get(); + OptionalInt ceiling = column.getCeiling(); + OptionalInt floor = column.getFloor(); + int maxHeight = this.getMaxLength(variant, ceiling, floor); + int downLength = 0; + int upLength = 0; + + if (ceiling.isPresent()) { + downLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + if (floor.isPresent()) { + if (downLength > 0) { + upLength = Mth.clamp( + downLength + Mth.randomBetweenInclusive(random, -config.maxHeightDifference(), config.maxHeightDifference()), + 0, + maxHeight + ); + } else { + upLength = this.getSpikeHeight(random, dx, dz, chance, maxHeight, config.maxDistanceFromCenterAffectingHeightBias(), variant.heightDeviation()); + } + } + + boolean placedAny = false; + if (ceiling.isPresent() && downLength > 0) { + placedAny |= this.growChitenColumn(level, pos.atY(ceiling.getAsInt() - 1), Direction.DOWN, downLength, placedBlocks); + } + if (floor.isPresent() && upLength > 0) { + placedAny |= this.growChitenColumn(level, pos.atY(floor.getAsInt() + 1), Direction.UP, upLength, placedBlocks); + } + return placedAny; + } + + private int getMaxLength(ResolvedVariant variant, OptionalInt ceiling, OptionalInt floor) { + if (ceiling.isPresent() && floor.isPresent()) { + return Math.min(variant.maxColumnHeight(), ceiling.getAsInt() - floor.getAsInt() - 1); + } + return variant.maxColumnHeight(); + } + + private boolean growChitenColumn(WorldGenLevel level, BlockPos rootStart, Direction direction, int length, List placedBlocks) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = rootStart.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + + BlockState current = level.getBlockState(spikePos); + if (!current.isAir()) { + break; + } + + BlockState chitenState = AntarchyObjects.CHITEN_BLOCK.get().defaultBlockState(); + level.setBlock(spikePos, chitenState, 3); + placedBlocks.add(spikePos.immutable()); + placedAny = true; + } + return placedAny; + } + + private boolean dotSurfaceSpikes( + WorldGenLevel level, + RandomSource random, + List placedBlocks, + ChitenSpikeConfiguration config, + ResolvedVariant variant + ) { + boolean placedAny = false; + if (placedBlocks.isEmpty()) { + return false; + } + + int attempts = Math.max(variant.surfaceSpikeAttempts(), placedBlocks.size() / 6); + for (int i = 0; i < attempts; i++) { + BlockPos anchor = placedBlocks.get(random.nextInt(placedBlocks.size())); + Direction direction = random.nextBoolean() ? Direction.UP : Direction.DOWN; + int length = 1 + random.nextInt(Math.max(1, config.maxHeightDifference() + 1)); + BlockPos start = anchor.relative(direction); + if (this.growSurfaceSpike(level, start, direction, length)) { + placedAny = true; + } + } + return placedAny; + } + + private boolean growSurfaceSpike(WorldGenLevel level, BlockPos startPos, Direction direction, int length) { + boolean placedAny = false; + for (int offset = 0; offset < length; offset++) { + BlockPos spikePos = startPos.relative(direction, offset); + if (spikePos.getY() < level.getMinBuildHeight() || spikePos.getY() >= level.getMaxBuildHeight()) { + break; + } + if (!level.getBlockState(spikePos).isAir()) { + break; + } + + BlockState spikeState = AntarchyObjects.CHITEN_SPIKE.get().defaultBlockState() + .setValue(PointedDripstoneBlock.TIP_DIRECTION, direction) + .setValue(PointedDripstoneBlock.THICKNESS, getThicknessForRootOffset(offset, length)) + .setValue(PointedDripstoneBlock.WATERLOGGED, false); + if (!spikeState.canSurvive(level, spikePos)) { + break; + } + + level.setBlock(spikePos, spikeState, 3); + placedAny = true; + } + return placedAny; + } + + private static DripstoneThickness getThicknessForRootOffset(int offsetFromRoot, int length) { + if (length <= 1 || offsetFromRoot == length - 1) { + return DripstoneThickness.TIP; + } + if (offsetFromRoot == length - 2) { + return DripstoneThickness.FRUSTUM; + } + if (offsetFromRoot == 0) { + return DripstoneThickness.BASE; + } + return DripstoneThickness.MIDDLE; + } + + private int getSpikeHeight( + RandomSource random, + int dx, + int dz, + double chance, + int maxHeight, + int maxDistanceFromCenterAffectingHeightBias, + int heightDeviation + ) { + if (maxHeight <= 0 || random.nextDouble() > chance) { + return 0; + } + + int distance = Math.abs(dx) + Math.abs(dz); + float mean = (float) Mth.clampedMap( + (double) distance, + 0.0D, + (double) maxDistanceFromCenterAffectingHeightBias, + (double) maxHeight, + 1.0D + ); + int sampled = Math.round((float) (mean + random.nextGaussian() * Math.max(1, Math.min(maxHeight, heightDeviation)))); + return Mth.clamp(sampled, 1, maxHeight); + } + + private double getChanceOfColumn(int radius, int dx, int dz, ChitenSpikeConfiguration config) { + int remainingX = radius - Math.abs(dx); + int remainingZ = radius - Math.abs(dz); + int edgeDistance = Math.min(remainingX, remainingZ); + return Mth.clampedMap( + (double) edgeDistance, + 0.0D, + (double) config.maxDistanceFromCenterAffectingChanceOfColumn(), + (double) config.chanceOfColumnAtMaxDistanceFromCenter(), + 1.0D + ); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java new file mode 100644 index 00000000..9fdcf38f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/CoralSpikeFeature.java @@ -0,0 +1,178 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.SeaPickleBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class CoralSpikeFeature extends Feature { + + private record CoralSet( + net.minecraft.world.level.block.Block block, + net.minecraft.world.level.block.Block coral, + net.minecraft.world.level.block.Block wallFan, + net.minecraft.world.level.block.Block floorFan + ) {} + + private static final CoralSet[] CORAL_SETS = { + new CoralSet(Blocks.TUBE_CORAL_BLOCK, Blocks.TUBE_CORAL, Blocks.TUBE_CORAL_WALL_FAN, Blocks.TUBE_CORAL_FAN), + new CoralSet(Blocks.BRAIN_CORAL_BLOCK, Blocks.BRAIN_CORAL, Blocks.BRAIN_CORAL_WALL_FAN, Blocks.BRAIN_CORAL_FAN), + new CoralSet(Blocks.BUBBLE_CORAL_BLOCK, Blocks.BUBBLE_CORAL, Blocks.BUBBLE_CORAL_WALL_FAN, Blocks.BUBBLE_CORAL_FAN), + new CoralSet(Blocks.FIRE_CORAL_BLOCK, Blocks.FIRE_CORAL, Blocks.FIRE_CORAL_WALL_FAN, Blocks.FIRE_CORAL_FAN), + new CoralSet(Blocks.HORN_CORAL_BLOCK, Blocks.HORN_CORAL, Blocks.HORN_CORAL_WALL_FAN, Blocks.HORN_CORAL_FAN), + }; + + public CoralSpikeFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + int seaLevel = level.getSeaLevel(); + + int spikes = 1 + random.nextInt(3); + boolean placed = false; + for (int i = 0; i < spikes; i++) { + int offX = random.nextInt(11) - 5; + int offZ = random.nextInt(11) - 5; + placed |= placeSpike(level, random, origin.offset(offX, 0, offZ), seaLevel); + } + return placed; + } + + private boolean placeSpike(WorldGenLevel level, RandomSource random, BlockPos origin, int seaLevel) { + int floorY = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, origin.getX(), origin.getZ()); + if (floorY >= seaLevel) return false; + + CoralSet coral = CORAL_SETS[random.nextInt(CORAL_SETS.length)]; + + int baseRadius = 2 + random.nextInt(2); // 2–3 wide at base + int totalHeight = 20 + random.nextInt(15); // 20–34 blocks tall + + // Curve: lean toward a random horizontal direction, accelerating toward the tip + double curveAngle = random.nextDouble() * Math.PI * 2; + double curveDX = Math.cos(curveAngle); + double curveDZ = Math.sin(curveAngle); + double maxCurve = 4.0 + random.nextDouble() * 5.0; // 4–9 block lean at tip + + boolean placed = false; + + for (int dy = 0; dy < totalHeight; dy++) { + int blockY = floorY + dy; + double progress = (double) dy / totalHeight; + + // Quadratic lean — slow at base, bending hard near tip + double curveOffset = maxCurve * progress * progress; + double centerX = origin.getX() + curveDX * curveOffset; + double centerZ = origin.getZ() + curveDZ * curveOffset; + + // Taper: full width for bottom 25%, then narrows sharply to a point + double taperT = Math.max(0.0, (progress - 0.25) / 0.75); + int radius = (int) Math.max(0, baseRadius * (1.0 - taperT * taperT * 1.3)); + + for (int dx = -(radius + 1); dx <= radius + 1; dx++) { + for (int dz = -(radius + 1); dz <= radius + 1; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - centerX) * (origin.getX() + dx - centerX) + + (origin.getZ() + dz - centerZ) * (origin.getZ() + dz - centerZ)); + + if (dist > radius + 0.5) continue; + + BlockPos pos = new BlockPos(origin.getX() + dx, blockY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(pos))) continue; + + level.setBlock(pos, coral.block().defaultBlockState(), 2); + placed = true; + + // Coral plants growing off the top of outer-surface blocks + if (dist >= radius - 0.6 && radius > 0) { + BlockPos above = pos.above(); + if (canReplace(level.getBlockState(above))) { + boolean aboveInWater = level.getBlockState(above).is(Blocks.WATER); + if (random.nextFloat() < 0.35f && aboveInWater) { + level.setBlock(above, + coral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true), + 2); + } + } + } + + // Wall fans on the outer surface + if (dist >= radius - 0.5) { + for (Direction dir : Direction.Plane.HORIZONTAL) { + if (random.nextFloat() >= 0.4f) continue; + BlockPos fanPos = pos.relative(dir); + BlockState existing = level.getBlockState(fanPos); + if (!existing.isAir() && !existing.is(Blocks.WATER)) continue; + boolean fanInWater = existing.is(Blocks.WATER); + level.setBlock(fanPos, + coral.wallFan().defaultBlockState() + .setValue(BlockStateProperties.HORIZONTAL_FACING, dir) + .setValue(BlockStateProperties.WATERLOGGED, fanInWater), + 2); + } + } + } + } + } + + // Floor scatter: coral plants, fans, and sea pickles around the base + int decorCount = 10 + random.nextInt(12); + for (int i = 0; i < decorCount; i++) { + int fx = origin.getX() + random.nextInt(13) - 6; + int fz = origin.getZ() + random.nextInt(13) - 6; + int fy = level.getHeight(Heightmap.Types.OCEAN_FLOOR_WG, fx, fz); + BlockPos decorPos = new BlockPos(fx, fy, fz); + + if (!canReplace(level.getBlockState(decorPos))) continue; + BlockState below = level.getBlockState(decorPos.below()); + if (below.isAir() || !below.isFaceSturdy(level, decorPos.below(), Direction.UP)) continue; + + boolean decorInWater = level.getBlockState(decorPos).is(Blocks.WATER); + float roll = random.nextFloat(); + CoralSet randomCoral = CORAL_SETS[random.nextInt(CORAL_SETS.length)]; + + if (roll < 0.35f && decorInWater) { + // Coral plant (frond) + BlockState coralState = randomCoral.coral().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, true); + if (coralState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, coralState, 2); + } + } else if (roll < 0.65f) { + // Floor fan + BlockState fanState = randomCoral.floorFan().defaultBlockState() + .setValue(BlockStateProperties.WATERLOGGED, decorInWater); + if (fanState.canSurvive(level, decorPos)) { + level.setBlock(decorPos, fanState, 2); + } + } else { + // Sea pickle cluster + BlockState pickle = Blocks.SEA_PICKLE.defaultBlockState() + .setValue(SeaPickleBlock.PICKLES, 1 + random.nextInt(4)); + if (pickle.canSurvive(level, decorPos)) { + level.setBlock(decorPos, pickle, 2); + } + } + } + + return placed; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.is(Blocks.WATER) || state.canBeReplaced(); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index d9155e5a..8940673d 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.content.worldgen.elythia; import com.craisinlord.antarchy.Antarchy; +import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Codec; import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; @@ -20,10 +21,18 @@ public class ElythiaBiomeSource extends BiomeSource { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "moleworm_caves") ); + private static final ResourceKey ELYTHIA_LUSH_CAVES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_lush_caves") + ); private static final ResourceKey ELYTHIA_OCEAN = ResourceKey.create( Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_ocean") ); + private static final ResourceKey ELYTHIA_CORAL_SPIKES = ResourceKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_coral_spikes") + ); private static final ResourceKey ELYTHIA_BEACH = ResourceKey.create( Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "elythia_beach") @@ -34,7 +43,8 @@ public class ElythiaBiomeSource extends BiomeSource { MultiNoiseBiomeSource.DIRECT_CODEC.forGetter(ElythiaBiomeSource::parameters), Codec.INT.optionalFieldOf("moleworm_caves_max_y", 72).forGetter(ElythiaBiomeSource::molewormCavesMaxY), Codec.INT.optionalFieldOf("surface_biome_sample_y", 160).forGetter(ElythiaBiomeSource::surfaceBiomeSampleY), - Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY) + Codec.INT.optionalFieldOf("ocean_max_y", 85).forGetter(ElythiaBiomeSource::oceanMaxY), + Codec.INT.optionalFieldOf("sea_level", 78).forGetter(ElythiaBiomeSource::seaLevel) ).apply(instance, ElythiaBiomeSource::new)); private final Climate.ParameterList> parameters; @@ -42,36 +52,41 @@ public class ElythiaBiomeSource extends BiomeSource { private final int molewormCavesMaxY; private final int surfaceBiomeSampleY; private final int oceanMaxY; + private final int seaLevel; private final int molewormCavesMaxQuartY; private final int surfaceBiomeSampleQuartY; - private final int oceanMaxQuartY; + private final int seaLevelQuartY; + private final Holder oceanHolder; + private final Holder defaultLandHolder; - public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY) { + public ElythiaBiomeSource(Climate.ParameterList> parameters, int molewormCavesMaxY, int surfaceBiomeSampleY, int oceanMaxY, int seaLevel) { this.parameters = parameters; this.delegate = MultiNoiseBiomeSource.createFromList(parameters); this.molewormCavesMaxY = molewormCavesMaxY; this.surfaceBiomeSampleY = surfaceBiomeSampleY; this.oceanMaxY = oceanMaxY; + this.seaLevel = seaLevel; this.molewormCavesMaxQuartY = QuartPos.fromBlock(molewormCavesMaxY); this.surfaceBiomeSampleQuartY = QuartPos.fromBlock(surfaceBiomeSampleY); - this.oceanMaxQuartY = QuartPos.fromBlock(oceanMaxY); + this.seaLevelQuartY = QuartPos.fromBlock(seaLevel); + this.oceanHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> h.is(ELYTHIA_OCEAN)) + .findFirst() + .orElse(null); + this.defaultLandHolder = parameters.values().stream() + .map(Pair::getSecond) + .filter(h -> !isOceanBiome(h) && !h.is(ELYTHIA_BEACH) + && !h.is(MOLEWORM_CAVES) && !h.is(ELYTHIA_LUSH_CAVES)) + .findFirst() + .orElse(null); } - private Climate.ParameterList> parameters() { - return this.parameters; - } - - private int molewormCavesMaxY() { - return this.molewormCavesMaxY; - } - - private int surfaceBiomeSampleY() { - return this.surfaceBiomeSampleY; - } - - private int oceanMaxY() { - return this.oceanMaxY; - } + private Climate.ParameterList> parameters() { return this.parameters; } + private int molewormCavesMaxY() { return this.molewormCavesMaxY; } + private int surfaceBiomeSampleY() { return this.surfaceBiomeSampleY; } + private int oceanMaxY() { return this.oceanMaxY; } + private int seaLevel() { return this.seaLevel; } @Override protected MapCodec codec() { @@ -83,24 +98,53 @@ public class ElythiaBiomeSource extends BiomeSource { return this.delegate.possibleBiomes().stream(); } + // Conservative threshold well inside the ocean entry range (-0.85 to -0.92). + // At continentalness < -0.80 the terrain is reliably below sea level. + // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid + // ocean biome appearing over above-sea-level terrain. + private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.80f); + @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { Holder biome = this.delegate.getNoiseBiome(x, y, z, sampler); - // Cap moleworm caves below their max Y + // Cap moleworm caves below their max Y — replace with surface biome above it if (biome.is(MOLEWORM_CAVES) && y > this.molewormCavesMaxQuartY) { return resolveSurfaceFallback(x, y, z, sampler, MOLEWORM_CAVES); } - // Cap ocean/beach biomes above sea level — if terrain noise puts these biomes - // too high, replace with whatever surface biome would naturally be there - if ((biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_BEACH)) && y > this.oceanMaxQuartY) { - return resolveSurfaceFallback(x, y, z, sampler, ELYTHIA_OCEAN, ELYTHIA_BEACH); + // Use continentalness (XZ-only noise) to classify the column. + // Ocean columns get the ocean biome at every Y so structures, particles, + // and ambient effects work correctly above the water surface. + Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); + if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { + return this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); + } + + // Land column below or at sea level: force ocean for any biome not allowed there. + // Use <= so quart 19 (blocks 76-79, partly underwater) is covered. + if (y <= this.seaLevelQuartY && oceanHolder != null && !allowedBelowSeaLevel(biome)) { + return oceanHolder; + } + + // Land column: prevent ocean biomes from bleeding in at any Y + if (isOceanBiome(biome)) { + return resolveLandFallback(x, z, sampler); } return biome; } + private static boolean allowedBelowSeaLevel(Holder biome) { + return biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES) + || biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); + } + + private static boolean isOceanBiome(Holder biome) { + return biome.is(ELYTHIA_OCEAN) || biome.is(ELYTHIA_CORAL_SPIKES); + } + + // Used for moleworm caves — returns best Y-sample, falls back to whatever the delegate gives @SafeVarargs private Holder resolveSurfaceFallback(int x, int y, int z, Climate.Sampler sampler, ResourceKey... excluded) { Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); @@ -118,6 +162,19 @@ public class ElythiaBiomeSource extends BiomeSource { return fallback; } + // Used when ocean bleeds into a land column — guaranteed to never return an ocean/cave biome + private Holder resolveLandFallback(int x, int z, Climate.Sampler sampler) { + Holder fallback = this.delegate.getNoiseBiome(x, this.surfaceBiomeSampleQuartY, z, sampler); + if (!isOceanOrCave(fallback)) return fallback; + + for (int sampleBlockY : SURFACE_FALLBACK_BLOCK_YS) { + Holder candidate = this.delegate.getNoiseBiome(x, QuartPos.fromBlock(sampleBlockY), z, sampler); + if (!isOceanOrCave(candidate)) return candidate; + } + + return defaultLandHolder != null ? defaultLandHolder : fallback; + } + @SafeVarargs private static boolean isExcluded(Holder biome, ResourceKey... excluded) { for (ResourceKey key : excluded) { @@ -126,10 +183,15 @@ public class ElythiaBiomeSource extends BiomeSource { return false; } + private static boolean isOceanOrCave(Holder biome) { + return isOceanBiome(biome) || biome.is(ELYTHIA_BEACH) + || biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES); + } + @Override public void addDebugInfo(java.util.List debug, net.minecraft.core.BlockPos pos, Climate.Sampler sampler) { this.delegate.addDebugInfo(debug, pos, sampler); debug.add("Elythia mole cave cap: y<=" + this.molewormCavesMaxY); - debug.add("Elythia ocean cap: y<=" + this.oceanMaxY); + debug.add("Elythia sea level: " + this.seaLevel); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntitySignMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntitySignMixin.java new file mode 100644 index 00000000..141359d5 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/BlockEntitySignMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.Antarchy; +import java.util.Optional; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(net.minecraft.world.level.block.entity.BlockEntity.class) +public abstract class BlockEntitySignMixin { + private static final ResourceLocation OURANWOOD_SIGN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_sign"); + private static final ResourceLocation OURANWOOD_WALL_SIGN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_wall_sign"); + private static final ResourceLocation OURANWOOD_HANGING_SIGN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_hanging_sign"); + private static final ResourceLocation OURANWOOD_WALL_HANGING_SIGN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "ouranwood_wall_hanging_sign"); + + @Inject(method = "validateBlockState", at = @At("HEAD"), cancellable = true) + private static void antarchy$skipOuranwoodSignValidation(BlockState state, CallbackInfo ci) { + if (isOuranwoodSign(state)) { + ci.cancel(); + } + } + + private static boolean isOuranwoodSign(BlockState state) { + return matches(state, OURANWOOD_SIGN_ID) + || matches(state, OURANWOOD_WALL_SIGN_ID) + || matches(state, OURANWOOD_HANGING_SIGN_ID) + || matches(state, OURANWOOD_WALL_HANGING_SIGN_ID); + } + + private static boolean matches(BlockState state, ResourceLocation id) { + return BuiltInRegistries.BLOCK.getOptional(id).map(state::is).orElse(false); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java index cecbfe67..433fd05a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaEnchantMixin.java @@ -1,72 +1,31 @@ package com.craisinlord.antarchy.mixins; -import com.craisinlord.antarchy.content.item.SquidzookaItem; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.Registry; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.enchantment.Enchantment; +import com.craisinlord.antarchy.content.AntarchyTags; +import net.minecraft.core.HolderGetter; +import net.minecraft.core.HolderSet; +import net.minecraft.tags.ItemTags; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.Item; import net.minecraft.world.item.enchantment.Enchantments; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.Redirect; -@Mixin(Enchantment.class) +@Mixin(Enchantments.class) public abstract class SquidzookaEnchantMixin { - private static final Registry ENCHANTMENT_REGISTRY = resolveEnchantmentRegistry(); - - @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) - private void antarchy$limitSquidzookaCrossbowEnchants(ItemStack stack, CallbackInfoReturnable cir) { - this.antarchy$applySquidzookaEnchantRules(stack, cir); - } - - @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) - private void antarchy$limitSquidzookaPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { - this.antarchy$applySquidzookaEnchantRules(stack, cir); - } - - @Inject(method = "isSupportedItem", at = @At("HEAD"), cancellable = true) - private void antarchy$limitSquidzookaSupportedItem(ItemStack stack, CallbackInfoReturnable cir) { - this.antarchy$applySquidzookaEnchantRules(stack, cir); - } - - private void antarchy$applySquidzookaEnchantRules(ItemStack stack, CallbackInfoReturnable cir) { - if (!(stack.getItem() instanceof SquidzookaItem)) { - return; + @Redirect( + method = "bootstrap", + at = @At(value = "INVOKE", target = "Lnet/minecraft/core/HolderGetter;getOrThrow(Lnet/minecraft/tags/TagKey;)Lnet/minecraft/core/HolderSet$Named;"), + slice = @org.spongepowered.asm.mixin.injection.Slice( + from = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;MULTISHOT:Lnet/minecraft/resources/ResourceKey;"), + to = @At(value = "FIELD", target = "Lnet/minecraft/world/item/enchantment/Enchantments;QUICK_CHARGE:Lnet/minecraft/resources/ResourceKey;") + ) + ) + private static HolderSet.Named antarchy$allowSquidzookaForMultishot(HolderGetter holderGetter, TagKey tag) { + if (tag.equals(ItemTags.CROSSBOW_ENCHANTABLE)) { + return holderGetter.getOrThrow(AntarchyTags.Items.MULTISHOT_ENCHANTABLE); } - if (ENCHANTMENT_REGISTRY == null) { - return; - } - - Enchantment enchantment = (Enchantment) (Object) this; - ResourceLocation enchantmentId = ENCHANTMENT_REGISTRY.getKey(enchantment); - if (enchantmentId == null) { - return; - } - - if (enchantmentId.equals(Enchantments.MULTISHOT.location())) { - cir.setReturnValue(true); - return; - } - - if (enchantmentId.equals(Enchantments.QUICK_CHARGE.location()) - || enchantmentId.equals(Enchantments.PIERCING.location())) { - cir.setReturnValue(false); - } - } - - @SuppressWarnings("unchecked") - private static Registry resolveEnchantmentRegistry() { - try { - return (Registry) BuiltInRegistries.class.getField("ENCHANTMENT").get(null); - } catch (ReflectiveOperationException primary) { - try { - return (Registry) BuiltInRegistries.class.getField("ENCHANTMENTS").get(null); - } catch (ReflectiveOperationException ignored) { - return null; - } - } + return holderGetter.getOrThrow(tag); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java new file mode 100644 index 00000000..e8a51510 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/SquidzookaMultishotMixin.java @@ -0,0 +1,37 @@ +package com.craisinlord.antarchy.mixins; + +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.Enchantment; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(Enchantment.class) +public abstract class SquidzookaMultishotMixin { + @Inject(method = "canEnchant", at = @At("HEAD"), cancellable = true) + private void antarchy$allowSquidzookaForMultishot(ItemStack stack, CallbackInfoReturnable cir) { + if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + cir.setReturnValue(true); + } + } + + @Inject(method = "isPrimaryItem", at = @At("HEAD"), cancellable = true) + private void antarchy$allowSquidzookaAsPrimaryItem(ItemStack stack, CallbackInfoReturnable cir) { + if (antarchy$isMultishot() && antarchy$isSquidzooka(stack)) { + cir.setReturnValue(true); + } + } + + @Unique + private boolean antarchy$isMultishot() { + return "Multishot".equals(((Enchantment) (Object) this).description().getString()); + } + + @Unique + private boolean antarchy$isSquidzooka(ItemStack stack) { + return "squidzooka".equals(BuiltInRegistries.ITEM.getKey(stack.getItem()).getPath()); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java new file mode 100644 index 00000000..04857183 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/client/CavarynSkyMixin.java @@ -0,0 +1,64 @@ +package com.craisinlord.antarchy.mixins.client; + +import com.craisinlord.antarchy.content.client.renderer.CavarynSkyRenderer; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexBuffer; +import net.minecraft.client.Camera; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.LevelRenderer; +import org.joml.Matrix4f; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(LevelRenderer.class) +public abstract class CavarynSkyMixin { + @Shadow + @Final + private Minecraft minecraft; + + @Shadow + private ClientLevel level; + + @Shadow + @Final + private VertexBuffer skyBuffer; + + @Shadow + @Final + private VertexBuffer darkBuffer; + + @Inject(method = "renderSky", at = @At("HEAD"), cancellable = true) + private void antarchy$renderCavarynSky(Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float partialTick, Camera camera, boolean isFoggy, Runnable setupFog, CallbackInfo ci) { + if (this.level == null || !CavarynSkyRenderer.shouldRender(this.level)) { + return; + } + + PoseStack poseStack = new PoseStack(); + poseStack.mulPose(modelViewMatrix); + CavarynSkyRenderer.render( + this.minecraft, + this.level, + poseStack, + projectionMatrix, + partialTick, + camera, + isFoggy, + setupFog, + this.skyBuffer, + this.darkBuffer + ); + ci.cancel(); + } + + @Inject(method = "renderClouds", at = @At("HEAD"), cancellable = true) + private void antarchy$skipCavarynClouds(PoseStack poseStack, Matrix4f modelViewMatrix, Matrix4f projectionMatrix, float partialTick, double camX, double camY, double camZ, CallbackInfo ci) { + if (this.level != null && CavarynSkyRenderer.shouldRender(this.level)) { + ci.cancel(); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java deleted file mode 100644 index 42846ba0..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/mixins/stellaris/DimensionOxygenManagerMixin.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.craisinlord.antarchy.mixins.stellaris; - -import com.st0x0ef.stellaris.common.oxygen.DimensionOxygenManager; -import net.minecraft.core.component.DataComponentType; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.core.registries.Registries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -@Mixin(value = DimensionOxygenManager.class, priority = 2000) -/* - * Tweaks Stellaris oxygen checks for Antarchy dimensions. - */ -public abstract class DimensionOxygenManagerMixin { - @Unique - private static final TagKey ANTARCHY_MARK_39_ARMOR = TagKey.create( - Registries.ITEM, - ResourceLocation.fromNamespaceAndPath("marvel", "iron_man_mark_39_armor") - ); - - @Unique - private static final ResourceLocation ANTARCHY_HELMET_OPEN_ID = - ResourceLocation.fromNamespaceAndPath("marvel", "helmet_open"); - - @Inject(method = "breath", at = @At("HEAD"), cancellable = true) - private void antarchy$allowClosedMark39SuitToBreathe( - LivingEntity entity, - CallbackInfoReturnable cir - ) { - if (antarchy$hasArmor(entity)) { - cir.setReturnValue(true); - } - } - - @Unique - private static boolean antarchy$hasArmor(LivingEntity entity) { - ItemStack helmet = entity.getItemBySlot(EquipmentSlot.HEAD); - boolean hasHelmet = helmet.is(ANTARCHY_MARK_39_ARMOR) && !antarchy$isHelmetOpen(helmet); - boolean hasChestplate = entity.getItemBySlot(EquipmentSlot.CHEST).is(ANTARCHY_MARK_39_ARMOR); - boolean hasLeggings = entity.getItemBySlot(EquipmentSlot.LEGS).is(ANTARCHY_MARK_39_ARMOR); - boolean hasBoots = entity.getItemBySlot(EquipmentSlot.FEET).is(ANTARCHY_MARK_39_ARMOR); - return hasHelmet && hasChestplate && hasLeggings && hasBoots; - } - - @Unique - @SuppressWarnings("unchecked") - private static boolean antarchy$isHelmetOpen(ItemStack helmet) { - DataComponentType componentType = BuiltInRegistries.DATA_COMPONENT_TYPE.get(ANTARCHY_HELMET_OPEN_ID); - if (componentType == null) { - return false; - } - return Boolean.TRUE.equals(helmet.get((DataComponentType) componentType)); - } -} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index f597f485..6b8422cb 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -1,10 +1,12 @@ { "required": true, "package": "com.craisinlord.antarchy.mixins", + "refmap": "antarchy.refmap.json", "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", "compatibilityLevel": "JAVA_21", "mixins": [ "AccessorRangedAttribute", + "BlockEntitySignMixin", "BloodglassMixin", "DreamFireBlockMixin", "DreamSandLowGravityMixin", @@ -13,7 +15,7 @@ "GlowVinesUnderLeavesMixin", "ServerPlayerGameModeMixin", "SquidzookaEnchantMixin", - "StinkyLivingEntityMixin", + "SquidzookaMultishotMixin", "TorchflowerBlockStateMixin", "gravity.AbstractArrowGravityMixin", "gravity.BucketItemGravityMixin", @@ -43,10 +45,10 @@ "gravity.ServerPlayerGravityMixin", "gravity.ThrowableProjectileGravityMixin", "gravity.TrackedEntityAccessor", - "multipart.EntityMultipartLifecycleMixin", - "stellaris.DimensionOxygenManagerMixin" + "multipart.EntityMultipartLifecycleMixin" ], "client": [ + "client.CavarynSkyMixin", "client.ElythiaSkyMixin", "client.ElytraModelAccessor", "client.LightningBoltRendererMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json index 4401a478..95d60f28 100644 --- a/common/src/main/resources/assets/antarchy/animations/kraken.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/kraken.animation.json @@ -5524,6 +5524,22 @@ "lerp_mode": "catmullrom" } } + }, + "Kraken": { + "position": { + "0.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 218.48, 0] + }, + "lerp_mode": "catmullrom" + } + } } } } diff --git a/common/src/main/resources/assets/antarchy/blockstates/bile.json b/common/src/main/resources/assets/antarchy/blockstates/bile.json new file mode 100644 index 00000000..777d6ac3 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/bile.json @@ -0,0 +1,20 @@ +{ + "variants": { + "level=0": { "model": "minecraft:block/water" }, + "level=1": { "model": "minecraft:block/water" }, + "level=2": { "model": "minecraft:block/water" }, + "level=3": { "model": "minecraft:block/water" }, + "level=4": { "model": "minecraft:block/water" }, + "level=5": { "model": "minecraft:block/water" }, + "level=6": { "model": "minecraft:block/water" }, + "level=7": { "model": "minecraft:block/water" }, + "level=8": { "model": "minecraft:block/water" }, + "level=9": { "model": "minecraft:block/water" }, + "level=10": { "model": "minecraft:block/water" }, + "level=11": { "model": "minecraft:block/water" }, + "level=12": { "model": "minecraft:block/water" }, + "level=13": { "model": "minecraft:block/water" }, + "level=14": { "model": "minecraft:block/water" }, + "level=15": { "model": "minecraft:block/water" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json b/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json new file mode 100644 index 00000000..4cef7a2b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/chiten_spike.json @@ -0,0 +1,14 @@ +{ + "variants": { + "thickness=base,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_base" }, + "thickness=base,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_base" }, + "thickness=frustum,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_frustum" }, + "thickness=frustum,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_frustum" }, + "thickness=middle,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_middle" }, + "thickness=middle,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_middle" }, + "thickness=tip,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip" }, + "thickness=tip,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip" }, + "thickness=tip_merge,vertical_direction=down": { "model": "antarchy:block/chiten_spike_down_tip_merge" }, + "thickness=tip_merge,vertical_direction=up": { "model": "antarchy:block/chiten_spike_up_tip_merge" } + } +} diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 1c26892e..95dd34f6 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -38,6 +38,7 @@ "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", "block.antarchy.chiten_block": "Chiten Block", + "block.antarchy.chiten_spike": "Chiten Spike", "block.antarchy.shellstone": "Shellstone", "block.antarchy.polished_shellstone": "Polished Shellstone", "block.antarchy.shellstone_bricks": "Shellstone Bricks", @@ -130,6 +131,7 @@ "block.antarchy.uranium_bars": "Uranium Bars", "block.antarchy.titanium_bars": "Titanium Bars", "tooltip.antarchy.signal_saving_bulb": "Toggles on/off. Has light level equal to the signal strength stored on it.", + "block.antarchy.bile": "Bile", "block.antarchy.ichor": "Ichor", "block.antarchy.antiwater": "Antiwater", "entity.antarchy.apple_cow": "Apple Cow", @@ -273,6 +275,7 @@ "item.antarchy.creepvine": "Creepvine", "item.antarchy.chiten": "Chiten", "item.antarchy.chiten_block": "Chiten Block", + "item.antarchy.chiten_spike": "Chiten Spike", "item.antarchy.myrmite": "Myrmite", "item.antarchy.torchflower_bush": "Torchflower Bush", "block.antarchy.torchflower_bush": "Torchflower Bush", @@ -339,6 +342,7 @@ "item.antarchy.ultimate_mace": "Ultimate Mace", "item.antarchy.moggles": "Moggles", "itemGroup.antarchy.antarchy": "Antarchy", + "item.antarchy.bile_bucket": "Bile Bucket", "item.antarchy.ichor_bucket": "Ichor Bucket", "item.antarchy.antiwater_bucket": "Antiwater Bucket", "item.antarchy.reverie_bottle": "Bottle of Reverie", @@ -393,6 +397,7 @@ "biome.antarchy.butterfly_fields": "Butterfly Fields", "biome.antarchy.torchflower_fields": "Torchflower Fields", "biome.antarchy.ouranwood_forest": "Ouranwood Forest", + "biome.antarchy.fungal_ouranwood_forest": "Fungal Ouranwood Forest", "message.antarchy.brown_ant_activated": "The brown ant is ready to open its destination.", "message.antarchy.brown_ant_needs_reagent": "This brown ant needs a reagent before it can open its destination.", "message.antarchy.rainbow_ant_activated": "The rainbow ant hums with a new Infinity destination.", diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json new file mode 100644 index 00000000..5bb4d70a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_base" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json new file mode 100644 index 00000000..c94fcdb5 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_frustum" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json new file mode 100644 index 00000000..8cd7d902 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_middle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json new file mode 100644 index 00000000..d8b89d9b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json new file mode 100644 index 00000000..3941f02d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_down_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_down_tip_merge" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json new file mode 100644 index 00000000..a896ccbb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_base.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_base" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json new file mode 100644 index 00000000..e3e84f52 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_frustum.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_frustum" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json new file mode 100644 index 00000000..ba4e46f2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_middle.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_middle" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json new file mode 100644 index 00000000..25dda590 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json new file mode 100644 index 00000000..6349e79a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/chiten_spike_up_tip_merge.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/pointed_dripstone", + "textures": { + "cross": "antarchy:block/chiten_spike/chiten_spike_up_tip_merge" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json index 7a7c5178..f4187644 100644 --- a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_1.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_turtle_egg", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json index 504f83af..d2f9f14d 100644 --- a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_2.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_two_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json index 444bdf36..ef956bbe 100644 --- a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_3.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_three_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json index f93265b4..af64531c 100644 --- a/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json +++ b/common/src/main/resources/assets/antarchy/models/block/creeping_horror_egg_4.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_four_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json index c7684d53..20b6a8ae 100644 --- a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_1.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_turtle_egg", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json index 6ec1173a..cbfa51e2 100644 --- a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_2.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_two_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json index ec94e0ff..03be473f 100644 --- a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_3.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_three_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json index c1ba4ffb..251150cc 100644 --- a/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json +++ b/common/src/main/resources/assets/antarchy/models/block/slightly_cracked_creeping_horror_egg_4.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_four_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_slightly_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_slightly_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json index 78cbec5a..4ccfd5ca 100644 --- a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_1.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_turtle_egg", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json index bde1c914..37334cc9 100644 --- a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_2.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_two_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json index 4c29c62b..824df80f 100644 --- a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_3.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_three_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json index 40ccb68c..d034d949 100644 --- a/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json +++ b/common/src/main/resources/assets/antarchy/models/block/very_cracked_creeping_horror_egg_4.json @@ -1,6 +1,6 @@ { "parent": "minecraft:block/template_four_turtle_eggs", "textures": { - "all": "antarchy:block/creeping_horror_eggs/creeping_horror_eggs_very_cracked" + "all": "antarchy:block/creeping_horror_egg/creeping_horror_egg_very_cracked" } } diff --git a/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json b/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json new file mode 100644 index 00000000..0a70c0e9 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/chiten_spike.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/chiten_spike" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json b/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json index 073ce4a9..b41681dd 100644 --- a/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json +++ b/common/src/main/resources/assets/antarchy/models/item/uranium_bars.json @@ -1,6 +1,6 @@ { "parent": "minecraft:item/generated", "textures": { - "layer0": "antarchy:block/uranium/uranium_bars" + "layer0": "antarchy:item/uranium/uranium_bars" } } diff --git a/common/src/main/resources/assets/antarchy/particles/orange_ash.json b/common/src/main/resources/assets/antarchy/particles/orange_ash.json new file mode 100644 index 00000000..ca698ca4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/orange_ash.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "minecraft:generic_0" + ] +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_flowing.png new file mode 100644 index 0000000000000000000000000000000000000000..68f48de744c851e0b0995e2b8fc03bbe452c7d07 GIT binary patch literal 9524 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_down_tip_merge.png new file mode 100644 index 0000000000000000000000000000000000000000..9c78714ddd43b538b89ee4381f3bd955488e5a22 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4?JBQLn;{OOfuvN$@`;Sx7^i9 zihljnX3-fr5eJ^lFC8v@sM`}{H>W2kC*H@wbloI&4zKQKMHX>YzCWye8Tb@B?%bOB z+k-LhyZ?&$U;WplvTzk?I^<0d^n1QKOMX4mi8)*J554eYGzju=>2dy&!lWVek#A4Z zyV(qK7g&|_PqJ)ST@vt%slk_lKjr%+`-bx@C)PQf*z5m-Nn?VbRVjnyMaGRP#VlM) uW(Y=9|6*cb`2YXi-K`&heq{ssm6<`qGV<_5FZb<05e83JKbLh*2~7aZ8F1(T literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_base.png new file mode 100644 index 0000000000000000000000000000000000000000..f9eab88eec5ae4511cfe4f318b7219a590fbb881 GIT binary patch literal 420 zcmV;V0bBlwP)}KtbVVZAi z?X~t=>$lFFsnXzccCuHWpB~pNjt+Nf>~C$>O%8UqYYfU#ZlE9nVHamd6IRye6GmF& z36T$*8#uJ5+Du~MaQF0;g74l(f;d7&X&{L1YnRE5D8Og$y-bfLW37pNuQX5y6EANc z6Zlsb4|#GFs%rYBfduKRojGpdzr9Pc@013L`{(@C1mp{7g2{!M6o{iVARnX$RJs*2(_`Ia34YX2XhHPyiRe zw}ziiK_CZbw(@hqfeIE;%m)P?CioEl0RRC1|1GtTvj6}921!IgR09C~y5RXJ1OVdz O00005QX7J!RxZ32#TN}7>KW6rl}YRf|%$7n2S%~E1C%kVjzmkdIeec8>pdsdc}XM zy1MJs>6w{Ioxhu_lhN(<^HGGSz5N{OR(F-|Ihajp3ud<@dY%1o2T&)@Jn(l%BCrrPBML>AVU z6V$sD0v?(M(*sxd8GaSl$VCbP&H1Kg>q*wtQ3xoo9S}5KJ?OrXLO`Q~xqWL)_vYH? z;HqjU1Qaxj_YdzWpY9r7C-QnFzy;z1V%ZzufN(@PS^=M~0=S3=Xl)_~@`!S@0u~y5 z2bwjpi*6HF&Z8Az8@_+I0_(_a=XoJudX7!gkvoucXCIXVE^J_DZ!N_{ksIV!_y+(0 n|NkU!v&8@a00v1!K~w_(lzyX!EZL!M00000NkvXXu0mjfg2t#? literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png b/common/src/main/resources/assets/antarchy/textures/block/chiten_spike/chiten_spike_up_middle.png new file mode 100644 index 0000000000000000000000000000000000000000..37c8e4d2daefc6f93229d1350ac47c0f974af55f GIT binary patch literal 424 zcmV;Z0ayNsP)>)3heD}6xd!{E$ZxSt{3R1rCflc``TqH=4VC{ zCg!G7Fx(ugV)egVpmTiEXic_K;LzRESNiO|SG?Unr|;fJg; zQ4wtzq@nT$xqut%I3PI^LIHoBT)@o&EUs@}s@KN{1Ej$E^z6LBA{THw2Mc}c7kZ~a z{5QFPTO(*qe(beDfqhtOgQFm@k27p8Ab}%@?IqIn*iG&oOfK;P9Mmz|PD*bFWBd@rLc?$KUOqd-LY0t&C?T$%*_- z|MNdC`Bb|2hASQ`xOc>UTjQA~K4GqrGsBl!`&dc6hWkv1HlNa4ke8jj!fl_YLry{@ z@4{=76&d?~o4z>yQjruo;MLRrz;@cP?UD_yh03ZcJk@{> l{r|s?QHB@DU<0|BnW0qP#QOVUD`fNmZHW#Lo5Bnb?uj*CaWZ#*Yh!; z>*X|v5=%=!`)jRWv)|gR1__|SA;d}{0Nc&3NvQk&Rj=hkfZN6aF+i&hh7dp<&CH7& z91m-=&lYe1NU7?;U8rXAA%K-#xS>!f1mr6NQqANG!2Nc%n+L>2p;7^u7rsBerPNUt z0QQV+7w@%`C;+zHH01VccOeAOJTVgX5i#=rL+lCxe9Rkt3z3r%00960`Mq|a00006 dNkl?IqIn*iG&oOfK;P9Mmz|PD*bFWBd@rLc?$KUOqd-LY0t&C?T$%*_- z|MNdC`Bb|2hASQ`xOc>UTjQA~K4GqrGsBl!`&dc6hWkv1HlNa4ke8jj!fl_YLry{@ z@4{=76&d?~o4z>yQjruo;MLRrz;@cP?UD_yh03ZcJk@{> l{r|s?QHB@DU<0|BnW0qP#QOVPx$MM*?KR5*=|k}*reKorM+se#&|g_eR^p-?Dp9V++%O4lykI(Kz)^h*eSiQ?w! zBH|)qAr7Hi;2OciECriFa5@LQ%QeKBH|71`-9PW%`@wH`&QM-o?MsX(qLtJ~wNar+ zR2voAtplCgNq8yW!x!q!DeaaE_=Sw3YbZtJA@AhO$=f0WQ&UBmn{;bO-&x!UC|B5U&zlczr+utQ#)o z#r|MnCE;AY1yMSKy!R=0&pDK44zT`mx6YQ##B^2@&uZBy?JBBg?b5VC`{X>=#N2tF zra4FpDF=CQDXkC(YK^9@v_c&0RnLH#=HThs)gA2Q;Pz%C&8`9=SVkMh6W{Wj?%y1! pLbfZDgX~=XU1OGmc$I8z;Tv>DykVAzSK0so002ovPDHLkV1m-twW9z4 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png b/common/src/main/resources/assets/antarchy/textures/particle/orange_ash.png new file mode 100644 index 0000000000000000000000000000000000000000..f3cdf9899e8612fe5c6a7c6970a2799d031d6a3e GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL32+R#}JL+3kyz;yKB4HfNw z;hH`zNdnRfIaYD2Y?SVDd?PYRgTe~DWM4f DZ=)?T literal 0 HcmV?d00001 diff --git a/common/src/main/resources/data/antarchy/dimension/elythia.json b/common/src/main/resources/data/antarchy/dimension/elythia.json index 7219060c..77904a56 100644 --- a/common/src/main/resources/data/antarchy/dimension/elythia.json +++ b/common/src/main/resources/data/antarchy/dimension/elythia.json @@ -7,7 +7,7 @@ "type": "antarchy:elythia_biome_source", "moleworm_caves_max_y": 30, "surface_biome_sample_y": 160, - "ocean_max_y": 85, + "ocean_max_y": 75, "biomes": [ { "biome": "antarchy:moleworm_caves", @@ -225,6 +225,30 @@ "offset": 0.0 } }, + { + "biome": "antarchy:fungal_ouranwood_forest", + "parameters": { + "temperature": 0.55, + "humidity": 0.9, + "continentalness": 0.75, + "erosion": 0.0, + "weirdness": 0.85, + "depth": 0.45, + "offset": 0.0 + } + }, + { + "biome": "antarchy:fungal_ouranwood_forest", + "parameters": { + "temperature": 0.55, + "humidity": 0.9, + "continentalness": 0.75, + "erosion": 0.0, + "weirdness": 0.85, + "depth": 0.0, + "offset": 0.0 + } + }, { "biome": "antarchy:torchflower_fields", "parameters": { @@ -398,7 +422,7 @@ "parameters": { "temperature": 0.65, "humidity": 0.90, - "continentalness": -0.50, + "continentalness": -0.88, "erosion": 0.30, "weirdness": 0.0, "depth": 0.0, @@ -410,7 +434,7 @@ "parameters": { "temperature": 0.60, "humidity": 0.88, - "continentalness": -0.55, + "continentalness": -0.92, "erosion": 0.25, "weirdness": -0.40, "depth": 0.0, @@ -422,7 +446,7 @@ "parameters": { "temperature": 0.70, "humidity": 0.92, - "continentalness": -0.45, + "continentalness": -0.85, "erosion": 0.35, "weirdness": 0.40, "depth": 0.0, @@ -434,7 +458,7 @@ "parameters": { "temperature": 0.65, "humidity": 0.90, - "continentalness": -0.50, + "continentalness": -0.88, "erosion": 0.30, "weirdness": 0.0, "depth": 0.5, @@ -446,7 +470,7 @@ "parameters": { "temperature": 0.60, "humidity": 0.88, - "continentalness": -0.55, + "continentalness": -0.92, "erosion": 0.25, "weirdness": -0.40, "depth": 0.5, @@ -454,38 +478,50 @@ } }, { - "biome": "antarchy:elythia_beach", + "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.68, - "humidity": 0.91, - "continentalness": -0.08, - "erosion": 0.50, - "weirdness": 0.0, + "temperature": 0.80, + "humidity": 0.85, + "continentalness": -0.88, + "erosion": 0.20, + "weirdness": 0.60, "depth": 0.0, "offset": 0.0 } }, { - "biome": "antarchy:elythia_beach", + "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.65, - "humidity": 0.89, - "continentalness": -0.05, - "erosion": 0.60, - "weirdness": -0.30, + "temperature": 0.75, + "humidity": 0.82, + "continentalness": -0.90, + "erosion": 0.15, + "weirdness": -0.65, "depth": 0.0, "offset": 0.0 } }, { - "biome": "antarchy:elythia_beach", + "biome": "antarchy:elythia_coral_spikes", "parameters": { - "temperature": 0.70, - "humidity": 0.93, - "continentalness": -0.02, - "erosion": 0.55, - "weirdness": 0.30, - "depth": 0.0, + "temperature": 0.80, + "humidity": 0.85, + "continentalness": -0.88, + "erosion": 0.20, + "weirdness": 0.60, + "depth": 0.5, + "offset": 0.0 + } + }, + { + "biome": "antarchy:elythia_coral_spikes", + "parameters": { + "temperature": 0.75, + "humidity": 0.82, + "continentalness": -0.90, + "erosion": 0.15, + "weirdness": -0.65, + "depth": 0.5, "offset": 0.0 } } diff --git a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json b/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json index 19af033e..081e44a9 100644 --- a/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json +++ b/common/src/main/resources/data/antarchy/dimension_type/cavaryn.json @@ -1,18 +1,18 @@ { - "ultrawarm": false, + "ultrawarm": true, "natural": false, - "coordinate_scale": 1.0, + "coordinate_scale": 64.0, "bed_works": false, "respawn_anchor_works": false, "min_y": 0, - "height": 256, - "logical_height": 240, + "height": 208, + "logical_height": 192, "infiniburn": "#minecraft:infiniburn_overworld", - "effects": "minecraft:the_end", + "effects": "minecraft:overworld", "ambient_light": 0.0, "piglin_safe": false, "has_raids": false, - "monster_spawn_light_level": 7, + "monster_spawn_light_level": 0, "monster_spawn_block_light_limit": 0, "has_skylight": false, "has_ceiling": true, diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json b/common/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json new file mode 100644 index 00000000..b1d9fae3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/chiten_spike.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chiten_spike" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json b/common/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json new file mode 100644 index 00000000..6f31cc60 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/creeping_horror.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chiten", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ], + "random_sequence": "antarchy:entities/creeping_horror" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json b/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json index 7cb9cc54..d206ce93 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/jumpy_bug.json @@ -28,6 +28,39 @@ ] } ] + }, + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chiten", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] } ] } diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json b/common/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json new file mode 100644 index 00000000..48b83cfa --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/lurking_terror.json @@ -0,0 +1,39 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:chiten", + "functions": [ + { + "function": "minecraft:set_count", + "count": { + "type": "minecraft:uniform", + "min": 1.0, + "max": 2.0 + } + }, + { + "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", + "count": { + "type": "minecraft:uniform", + "min": 0.0, + "max": 1.0 + } + } + ] + } + ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ] + } + ], + "random_sequence": "antarchy:entities/lurking_terror" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json b/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json new file mode 100644 index 00000000..c66fab67 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/entities/octopus_bomb.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:entity", + "pools": [ + { + "rolls": { + "type": "minecraft:uniform", + "min": 5, + "max": 10 + }, + "entries": [ + { + "type": "minecraft:item", + "name": "minecraft:ink_sac" + } + ] + } + ] +} diff --git a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json index ac06c530..8b8512f1 100644 --- a/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json +++ b/common/src/main/resources/data/antarchy/loot_table/entities/toreterror.json @@ -17,6 +17,7 @@ }, { "function": "minecraft:enchanted_count_increase", + "enchantment": "minecraft:looting", "count": { "type": "minecraft:uniform", "min": 0.0, @@ -51,7 +52,13 @@ "name": "antarchy:water_cannon" } ], + "conditions": [ + { + "condition": "minecraft:killed_by_player" + } + ], "rolls": 1.0 } - ] + ], + "random_sequence": "antarchy:entities/toreterror" } diff --git a/common/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json b/common/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json new file mode 100644 index 00000000..9f10eac7 --- /dev/null +++ b/common/src/main/resources/data/antarchy/recipe/bone_meal_from_chiten.json @@ -0,0 +1,13 @@ +{ + "type": "minecraft:crafting_shapeless", + "category": "misc", + "ingredients": [ + { + "item": "antarchy:chiten" + } + ], + "result": { + "count": 1, + "id": "minecraft:bone_meal" + } +} diff --git a/common/src/main/resources/data/antarchy/recipe/chiten_block.json b/common/src/main/resources/data/antarchy/recipe/chiten_block.json index 31de72bc..b035961a 100644 --- a/common/src/main/resources/data/antarchy/recipe/chiten_block.json +++ b/common/src/main/resources/data/antarchy/recipe/chiten_block.json @@ -7,8 +7,9 @@ } }, "pattern": [ - "##", - "##" + "###", + "###", + "###" ], "result": { "count": 1, diff --git a/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json new file mode 100644 index 00000000..2300979f --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/amber_moss_replaceable.json @@ -0,0 +1,7 @@ +{ + "values": [ + "#minecraft:moss_replaceable", + "antarchy:myrmite", + "antarchy:amber_moss_block" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json b/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json index 943b3b39..dd3155a9 100644 --- a/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json +++ b/common/src/main/resources/data/antarchy/tags/block/umbral_moss_replaceable.json @@ -1,5 +1,6 @@ { "values": [ + "#minecraft:moss_replaceable", "antarchy:nyxite", "minecraft:blackstone", "antarchy:umbral_moss_block" diff --git a/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json new file mode 100644 index 00000000..6fd60b67 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/item/multishot_enchantable.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "#minecraft:enchantable/crossbow", + "antarchy:squidzooka" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json new file mode 100644 index 00000000..ff348954 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/elythia_firefly_particle_biomes.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_meadow", + "antarchy:torchflower_fields", + "antarchy:butterfly_fields", + "antarchy:ouranwood_forest", + "antarchy:sparse_ouranwood_forest" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json index 91115ca7..b14f7bed 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/has_structure/toreterror_arena_biomes.json @@ -1,23 +1,6 @@ { "replace": false, "values": [ - "#minecraft:is_ocean", - "#minecraft:is_deep_ocean", - { - "id": "#neoforge:is_ocean", - "required": false - }, - { - "id": "#c:ocean", - "required": false - }, - { - "id": "#c:shallow_ocean", - "required": false - }, - { - "id": "#c:deep_ocean", - "required": false - } + "#antarchy:is_elythia_ocean" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json index c0e9fc48..8e11611d 100644 --- a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia.json @@ -10,6 +10,7 @@ "antarchy:ouranwood_forest", "antarchy:sparse_ouranwood_forest", "antarchy:elythia_ocean", - "antarchy:elythia_beach" + "antarchy:elythia_coral_spikes", + "antarchy:fungal_ouranwood_forest" ] } diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json new file mode 100644 index 00000000..e5dadf26 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/is_elythia_ocean.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "antarchy:elythia_ocean", + "antarchy:elythia_coral_spikes" + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index 163759c3..0a5093bc 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -9,17 +9,16 @@ "sky_color": 524288, "grass_color": 4211262, "foliage_color": 4211262, - "ambient_sound": "minecraft:ambient.cave", "mood_sound": { "sound": "minecraft:ambient.cave", - "tick_delay": 6000, + "tick_delay": 1200000, "block_search_extent": 8, "offset": 2.0 }, "particle": { "probability": 0.002, "options": { - "type": "minecraft:ash" + "type": "antarchy:orange_ash" } } }, @@ -29,106 +28,39 @@ "liquid": [] }, "features": [ - [ - "minecraft:lake_lava_surface" - ], [], - [ - "minecraft:amethyst_geode" - ], - [ - "minecraft:monster_room", - "minecraft:monster_room_deep" - ], + [], + [], + [], + [], + [], [], [], [ - "minecraft:ore_dirt", - "minecraft:ore_gravel", - "minecraft:ore_granite_upper", - "minecraft:ore_granite_lower", - "minecraft:ore_diorite_upper", - "minecraft:ore_diorite_lower", - "minecraft:ore_andesite_upper", - "minecraft:ore_andesite_lower", - "minecraft:ore_tuff", - "minecraft:ore_coal_upper", - "minecraft:ore_coal_lower", - "minecraft:ore_iron_upper", - "minecraft:ore_iron_middle", - "minecraft:ore_iron_small", - "minecraft:ore_gold", - "minecraft:ore_gold_lower", - "minecraft:ore_redstone", - "minecraft:ore_redstone_lower", - "minecraft:ore_diamond", - "minecraft:ore_diamond_medium", - "minecraft:ore_diamond_large", - "minecraft:ore_diamond_buried", - "minecraft:ore_lapis", - "minecraft:ore_lapis_buried", - "minecraft:ore_copper", - "minecraft:underwater_magma" - ], - [ - "minecraft:large_dripstone", - "minecraft:pointed_dripstone", - "minecraft:glow_lichen" - ], - [ - "minecraft:spring_water", - "minecraft:spring_lava" - ], - [ - "minecraft:brown_mushroom_normal", - "minecraft:red_mushroom_normal" + "antarchy:cavaryn_bile_pools", + "antarchy:cavaryn_amber_moss_patch", + "antarchy:cavaryn_wall_amber_moss", + "antarchy:cavaryn_creepvine", + "minecraft:glow_lichen", + "antarchy:cavaryn_chiten_spikes", + "antarchy:cavaryn_terror_egg_patch" ], [] ], - "creature_spawn_probability": 0.08, + "creature_spawn_probability": 0.06, "spawners": { "monster": [ { - "type": "minecraft:zombie", + "type": "antarchy:creeping_horror", "weight": 95, "minCount": 2, - "maxCount": 4 + "maxCount": 5 }, { - "type": "minecraft:skeleton", - "weight": 90, + "type": "antarchy:lurking_terror", + "weight": 95, "minCount": 2, - "maxCount": 4 - }, - { - "type": "minecraft:creeper", - "weight": 80, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:spider", - "weight": 70, - "minCount": 1, - "maxCount": 3 - }, - { - "type": "minecraft:cave_spider", - "weight": 45, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:enderman", - "weight": 12, - "minCount": 1, - "maxCount": 2 - }, - { - "type": "minecraft:witch", - "weight": 6, - "minCount": 1, - "maxCount": 1 + "maxCount": 5 } ], "creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json new file mode 100644 index 00000000..6bcaed9f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_coral_spikes.json @@ -0,0 +1,77 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 1.0, + "effects": { + "fog_color": 6245375, + "water_color": 3461580, + "water_fog_color": 1741620, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "mood_sound": { + "sound": "minecraft:ambient.underwater.loop", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground" + ], + [], + [ + "antarchy:elythia_coral_spike" + ], + [] + ], + "creature_spawn_probability": 0.04, + "spawners": { + "monster": [ + { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 }, + { "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 } + ], + "creature": [ + { "type": "minecraft:turtle", "weight": 5, "minCount": 1, "maxCount": 2 } + ], + "ambient": [], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [ + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + ], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json index 6d1057ec..1aa23185 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/elythia_ocean.json @@ -51,18 +51,28 @@ "antarchy:elythia_underground" ], [], - [], + [ + "minecraft:sea_pickle", + "minecraft:warm_ocean_vegetation" + ], [] ], "creature_spawn_probability": 0.04, "spawners": { - "monster": [], - "creature": [], + "monster": [ + { "type": "antarchy:missile_squid", "weight": 12, "minCount": 1, "maxCount": 3 }, + { "type": "antarchy:octopus_bomb", "weight": 4, "minCount": 1, "maxCount": 2 } + ], + "creature": [ + { "type": "minecraft:turtle", "weight": 5, "minCount": 1, "maxCount": 2 } + ], "ambient": [], "axolotls": [], "underground_water_creature": [], "water_creature": [], - "water_ambient": [], + "water_ambient": [ + { "type": "minecraft:tropical_fish", "weight": 20, "minCount": 4, "maxCount": 8 } + ], "misc": [] } } diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json new file mode 100644 index 00000000..0ba3323d --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_patch_bonemeal.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:vegetation_patch", + "config": { + "depth": 1, + "extra_bottom_block_chance": 0.0, + "extra_edge_column_chance": 0.75, + "ground_state": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:amber_moss_block" + } + }, + "replaceable": "#antarchy:amber_moss_replaceable", + "surface": "floor", + "vegetation_chance": 0.6, + "vegetation_feature": { + "feature": "antarchy:amber_moss_vegetation", + "placement": [] + }, + "vertical_range": 5, + "xz_radius": { + "type": "minecraft:uniform", + "max_inclusive": 2, + "min_inclusive": 1 + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json new file mode 100644 index 00000000..f99e9268 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/amber_moss_vegetation.json @@ -0,0 +1,18 @@ +{ + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { + "Name": "antarchy:amber_moss_carpet", + "Properties": { + "bottom": "true", + "east": "none", + "north": "none", + "south": "none", + "west": "none" + } + } + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json new file mode 100644 index 00000000..e5a8f052 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_bile_pools", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json new file mode 100644 index 00000000..cb963a90 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_chiten_spikes.json @@ -0,0 +1,18 @@ +{ + "type": "antarchy:cavaryn_chiten_spikes", + "config": { + "floor_to_ceiling_search_range": 10, + "radius": 4, + "max_column_height": 5, + "height_deviation": 1, + "chance_of_column_at_max_distance_from_center": 0.3, + "max_distance_from_center_affecting_chance_of_column": 4, + "max_distance_from_center_affecting_height_bias": 4, + "max_height_difference": 1, + "large_variant_chance": 0.35, + "large_variant_extra_radius": 3, + "large_variant_extra_height": 4, + "large_variant_extra_height_deviation": 2, + "large_variant_surface_spike_multiplier": 2.5 + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json new file mode 100644 index 00000000..13d7a210 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_creepvine.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_creepvine", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json new file mode 100644 index 00000000..76039ff0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_terror_egg_patch.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_terror_egg_patch", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json new file mode 100644 index 00000000..f06cc5d9 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_wall_amber_moss.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_wall_amber_moss", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json new file mode 100644 index 00000000..066a22b9 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/elythia_coral_spike.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:elythia_coral_spike", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json index f38e2e03..41e29735 100644 --- a/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json +++ b/common/src/main/resources/data/antarchy/worldgen/density_function/elythia_surface.json @@ -70,7 +70,7 @@ }, "argument2": { "type": "minecraft:mul", - "argument1": 0.20, + "argument1": 0.30, "argument2": "minecraft:overworld/continents" } } diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index ccb3ed01..6a197ae1 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -5,17 +5,17 @@ "ore_veins_enabled": true, "legacy_random_source": false, "default_block": { - "Name": "minecraft:stone" + "Name": "antarchy:myrmite" }, "default_fluid": { - "Name": "minecraft:water", + "Name": "antarchy:bile", "Properties": { "level": "0" } }, "noise": { "min_y": 0, - "height": 256, + "height": 208, "size_horizontal": 1, "size_vertical": 2 }, @@ -80,8 +80,8 @@ }, "argument2": { "type": "minecraft:y_clamped_gradient", - "from_y": 244, - "to_y": 255, + "from_y": 196, + "to_y": 207, "from_value": -0.5, "to_value": 4 } @@ -93,7 +93,7 @@ "type": "minecraft:range_choice", "input": "minecraft:y", "min_inclusive": 4, - "max_exclusive": 252, + "max_exclusive": 204, "when_in_range": "antarchy:cavaryn_custom", "when_out_of_range": 2 } @@ -105,7 +105,7 @@ "type": "minecraft:range_choice", "input": "minecraft:y", "min_inclusive": 0, - "max_exclusive": 256, + "max_exclusive": 208, "when_in_range": { "type": "minecraft:noise", "noise": "minecraft:ore_veininess", @@ -125,13 +125,13 @@ "argument": { "type": "minecraft:interpolated", "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 256, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_a", + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": 0, + "max_exclusive": 208, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_a", "xz_scale": 4, "y_scale": 4 }, @@ -144,13 +144,13 @@ "argument": { "type": "minecraft:interpolated", "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 256, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_b", + "type": "minecraft:range_choice", + "input": "minecraft:y", + "min_inclusive": 0, + "max_exclusive": 208, + "when_in_range": { + "type": "minecraft:noise", + "noise": "minecraft:ore_vein_b", "xz_scale": 4, "y_scale": 4 }, @@ -249,14 +249,14 @@ "then_run": { "type": "minecraft:block", "result_state": { - "Name": "minecraft:deepslate" + "Name": "antarchy:myrmite" } } }, { "type": "minecraft:block", "result_state": { - "Name": "minecraft:stone" + "Name": "antarchy:myrmite" } } ] diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index ed8be1a9..0b3e9e86 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -484,7 +484,7 @@ "type": "minecraft:condition", "if_true": { "type": "minecraft:biome", - "biome_is": ["antarchy:elythia_ocean"] + "biome_is": ["antarchy:elythia_ocean", "antarchy:elythia_coral_spikes"] }, "then_run": { "type": "minecraft:sequence", @@ -499,8 +499,26 @@ "surface_type": "floor" }, "then_run": { - "type": "minecraft:block", - "result_state": { "Name": "minecraft:gravel" } + "type": "minecraft:sequence", + "sequence": [ + { + "type": "minecraft:condition", + "if_true": { + "type": "minecraft:water", + "offset": 0, + "surface_depth_multiplier": 0, + "add_stone_depth": false + }, + "then_run": { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:gravel" } + } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "minecraft:sand" } + } + ] } }, { @@ -530,6 +548,10 @@ "type": "minecraft:block", "result_state": { "Name": "antarchy:shellstone" } } + }, + { + "type": "minecraft:block", + "result_state": { "Name": "antarchy:shellstone" } } ] } diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json new file mode 100644 index 00000000..702f99a5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_amber_moss_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:amber_moss_patch_bonemeal", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json new file mode 100644 index 00000000..f7f99b3a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_bile_pools", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json new file mode 100644 index 00000000..f4e08187 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_chiten_spikes.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_chiten_spikes", + "placement": [ + { + "type": "minecraft:count", + "count": 3 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json new file mode 100644 index 00000000..2f2740bf --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_creepvine.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_creepvine", + "placement": [ + { + "type": "minecraft:count", + "count": 9 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json new file mode 100644 index 00000000..053fcd8a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_terror_egg_patch", + "placement": [ + { + "type": "minecraft:count", + "count": 2 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json new file mode 100644 index 00000000..d7c131c3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_wall_amber_moss.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_wall_amber_moss", + "placement": [ + { + "type": "minecraft:count", + "count": 10 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 12 + }, + "max_inclusive": { + "below_top": 12 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json new file mode 100644 index 00000000..e6757d38 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/elythia_coral_spike.json @@ -0,0 +1,12 @@ +{ + "feature": "antarchy:elythia_coral_spike", + "placement": [ + { + "type": "minecraft:heightmap", + "heightmap": "OCEAN_FLOOR_WG" + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json index 43c1d56e..834c19a1 100644 --- a/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json +++ b/common/src/main/resources/data/antarchy/worldgen/structure/toreterror_arena.json @@ -2,7 +2,7 @@ "type": "integrated_api:generic_structure", "start_pool": "antarchy:toreterror_arena/toreterror_arena", "size": 2, - "valid_biome_radius_check": 1, + "valid_biome_radius_check": 5, "biomes": "#antarchy:has_structure/toreterror_arena_biomes", "step": "surface_structures", "terrain_adaptation": "none", diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 8cfab94f..71f8d9f6 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -38,6 +38,7 @@ "antarchy:nyxite_brick_wall", "antarchy:myrmite", "antarchy:chiten_block", + "antarchy:chiten_spike", "antarchy:shellstone", "antarchy:polished_shellstone", "antarchy:shellstone_bricks", diff --git a/common/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json b/common/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json index 3038abd6..d0458b36 100644 --- a/common/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json +++ b/common/src/main/resources/data/minecraft/tags/item/enchantable/crossbow.json @@ -1,7 +1,6 @@ { "replace": false, "values": [ - "antarchy:ultimate_crossbow", - "antarchy:squidzooka" + "antarchy:ultimate_crossbow" ] } diff --git a/common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json b/common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json deleted file mode 100644 index bf1b47a2..00000000 --- a/common/src/main/resources/data/minecraft/tags/worldgen/biome/is_overworld.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "replace": false, - "values": [ - "antarchy:cavaryn" - ] -} diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 6eb1302c..6e6147d5 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -14,10 +14,14 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBilePoolFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsConfiguration; import com.craisinlord.antarchy.content.worldgen.thoraxis.AntiwaterSpringsFeature; @@ -118,6 +122,7 @@ import com.craisinlord.antarchy.content.item.NightmareSwordItem; import com.craisinlord.antarchy.content.item.OuranwoodBoatOnlyItem; import com.craisinlord.antarchy.content.item.OuranwoodChestBoatItem; import com.craisinlord.antarchy.content.item.RainbowSugarItem; +import com.craisinlord.antarchy.content.worldgen.elythia.CoralSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaBiomeSource; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaRiverCarveFunction; import com.craisinlord.antarchy.content.worldgen.elythia.ElythiaFloraFeature; @@ -135,6 +140,9 @@ import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodCocoonTreeFeat import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeConfiguration; import com.craisinlord.antarchy.content.worldgen.elythia.OuranwoodTreeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.TriffidPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugNestFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.BedBugSurfaceClusterFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.CloudSeaCalciteFeature; @@ -584,6 +592,8 @@ public final class AntarchyFabricContent { () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", + () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", () -> new PotentNyxiteBlock( AntarchyFabricContent::potentNyxiteBlockEntityType, @@ -619,6 +629,8 @@ public final class AntarchyFabricContent { () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> simpleParticleType()); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -712,6 +724,29 @@ public final class AntarchyFabricContent { () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 900, 1))); public static final DeferredHolder EXTREME_GROWING = POTIONS.register("extreme_growing", () -> new Potion("growing", new MobEffectInstance(mobEffectHolder(GROWTH_EFFECT), 600, 2))); + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( + () -> lookupFlowingFluid("bile"), + () -> lookupFlowingFluid("flowing_bile"), + () -> lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Flowing( + () -> lookupFlowingFluid("bile"), + () -> lookupFlowingFluid("flowing_bile"), + () -> lookupItem("bile_bucket"), + "bile", + 4, + 1, + 5 + )); + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((net.minecraft.world.level.material.FlowingFluid) BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); + public static final DeferredHolder ICHOR = FLUIDS.register("ichor", () -> new com.craisinlord.antarchy.fabric.content.fluid.SimpleFluid.Source( () -> lookupFlowingFluid("ichor"), @@ -1023,6 +1058,14 @@ public final class AntarchyFabricContent { () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", + () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, CavarynBilePoolFeature> CAVARYN_BILE_POOLS = FEATURES.register("cavaryn_bile_pools", + () -> new CavarynBilePoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynCreepvineFeature> CAVARYN_CREEPVINE = FEATURES.register("cavaryn_creepvine", + () -> new CavarynCreepvineFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynWallAmberMossFeature> CAVARYN_WALL_AMBER_MOSS = FEATURES.register("cavaryn_wall_amber_moss", + () -> new CavarynWallAmberMossFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", @@ -1035,12 +1078,20 @@ public final class AntarchyFabricContent { () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynEggPatchFeature> CAVARYN_TERROR_EGG_PATCH = FEATURES.register("cavaryn_terror_egg_patch", + () -> new CavarynEggPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", () -> new LucidAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final DeferredHolder, ThoraxisDuneFeature> THORAXIS_DUNE = FEATURES.register("thoraxis_dune", () -> new ThoraxisDuneFeature(ThoraxisDuneConfiguration.CODEC)); + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new com.craisinlord.antarchy.content.worldgen.elythia.FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, MapCodec> THORAXIS_BIOME_SOURCE = BIOME_SOURCES.register("thoraxis_biome_source", () -> ThoraxisBiomeSource.CODEC); @@ -1185,6 +1236,8 @@ public final class AntarchyFabricContent { public static final DeferredItem BED_BUG_EGG_ITEM = ITEMS.registerSimpleBlockItem(BED_BUG_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(HUSHWEED); + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", () -> new BucketItem(ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", @@ -1223,6 +1276,7 @@ public final class AntarchyFabricContent { public static final DeferredItem QUEEN_SCALE = ITEMS.register("queen_scale", () -> new MobComingSoonTooltipItem(new Item.Properties().rarity(Rarity.RARE))); public static final DeferredItem CHITEN = ITEMS.registerSimpleItem("chiten", new Item.Properties().rarity(Rarity.UNCOMMON)); + public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(CHITEN_SPIKE); public static final DeferredItem STINK_BUG_ITEM = ITEMS.registerSimpleItem("stink_bug", new Item.Properties().rarity(Rarity.UNCOMMON)); public static final DeferredItem JUMPY_BUG_LEG = ITEMS.registerSimpleItem("jumpy_bug_leg", new Item.Properties().rarity(Rarity.UNCOMMON)); private static final DeferredHolder JUMPY_BOOTS_ARMOR_MATERIAL = ARMOR_MATERIALS.register("jumpy_boots", @@ -1854,6 +1908,8 @@ public final class AntarchyFabricContent { SpawnPlacements.register(BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn); SpawnPlacements.register(EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn); SpawnPlacements.register(TORETERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ToreterrorEntity::canSpawn); + SpawnPlacements.register(CREEPING_HORROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CreepingHorrorEntity::canSpawn); + SpawnPlacements.register(LURKING_TERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LurkingTerrorEntity::canSpawn); SpawnPlacements.register(TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules); } @@ -1930,7 +1986,7 @@ public final class AntarchyFabricContent { case "blood_crystal_block", "budding_blood_crystal", "small_blood_crystal_bud", "medium_blood_crystal_bud", "large_blood_crystal_bud", "blood_crystal_cluster" -> 7; - case "myrmite", "chiten_block", "amber_moss_block", "amber_moss_carpet" -> 8; + case "myrmite", "chiten_block", "chiten_spike", "amber_moss_block", "amber_moss_carpet" -> 8; case "uranium_ore", "deepslate_uranium_ore", "titanium_ore", "deepslate_titanium_ore", "uranium_block", "titanium_block", "raw_uranium_block", "raw_titanium_block", "cut_uranium", "cut_titanium", "cut_uranium_slab", "cut_titanium_slab", @@ -1939,7 +1995,7 @@ public final class AntarchyFabricContent { "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", "uranium_bars", "titanium_bars" -> 8; case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", - "cloud_block" -> 9; + "cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9; case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; case "easter_bunny_spawn_egg", "flying_squirrel_spawn_egg", "caterpillar_spawn_egg", "butterfly_spawn_egg", "reverie_spawn_egg", "brutalfly_spawn_egg", @@ -2401,6 +2457,8 @@ public final class AntarchyFabricContent { () -> TRIFFID_GOO_BLOCK.get(), () -> PALE_NYXITE.get(), () -> NYXITE_SPIKE.get(), + () -> CHITEN_BLOCK.get(), + () -> CHITEN_SPIKE.get(), () -> POTENT_NYXITE.get(), () -> ANTIMETAL.get(), () -> POLISHED_ANTIMETAL.get(), 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 48130010..bf0241bb 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 @@ -127,6 +127,17 @@ public final class AntarchyFabricClientBootstrap { } private static void registerFluids() { + FluidRenderHandlerRegistry.INSTANCE.register( + AntarchyFabricContent.BILE.get(), + AntarchyFabricContent.FLOWING_BILE.get(), + new SimpleFluidRenderHandler( + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"), + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"), + ResourceLocation.withDefaultNamespace("block/water_overlay"), + 0xFFFFFFFF + ) + ); + FluidRenderHandlerRegistry.INSTANCE.register( AntarchyFabricContent.ICHOR.get(), AntarchyFabricContent.FLOWING_ICHOR.get(), @@ -179,6 +190,7 @@ public final class AntarchyFabricClientBootstrap { registry.register(AntarchyFabricContent.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); registry.register(AntarchyFabricContent.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); registry.register(AntarchyFabricContent.FIREFLY.get(), FireflyParticle.Provider::new); + registry.register(AntarchyFabricContent.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } private static void registerRenderLayers() { @@ -199,6 +211,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.AMBER_LICHEN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CHITEN_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); @@ -220,6 +233,8 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CLOUD_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putFluids( RenderType.translucent(), + AntarchyFabricContent.BILE.get(), + AntarchyFabricContent.FLOWING_BILE.get(), AntarchyFabricContent.ICHOR.get(), AntarchyFabricContent.FLOWING_ICHOR.get(), AntarchyFabricContent.ANTIWATER.get(), diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java index 1a813793..b436f125 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/ElythiaFireflyManager.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.client; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; import com.craisinlord.antarchy.fabric.AntarchyFabricContent; @@ -36,8 +37,9 @@ public final class ElythiaFireflyManager { if (dayTime < NIGHT_START || dayTime > NIGHT_END) return; long gameTime = level.getGameTime(); + boolean fireflyBiome = level.getBiome(client.player.blockPosition()).is(AntarchyTags.Biomes.ELYTHIA_FIREFLY_PARTICLE_BIOMES); - if (AntarchySettings.elythiaFireflyParticlesEnabled()) { + if (AntarchySettings.elythiaFireflyParticlesEnabled() && fireflyBiome) { if (gameTime % SPAWN_INTERVAL == 0) { Player player = client.player; int px = (int) player.getX(); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java index 9a410f2b..1c3a31a9 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/client/JumpyBootsClientHandler.java @@ -53,6 +53,12 @@ public final class JumpyBootsClientHandler { return; } + if (jumpPressed && wasCharging && chargeTicks > 0) { + ClientPlayNetworking.send(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + if (sneaking) { chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); wasCharging = true; diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java index 4ed20662..25421931 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/ElytraStartFlyingMixin.java @@ -16,7 +16,7 @@ public abstract class ElytraStartFlyingMixin { @Shadow public abstract void startFallFlying(); - @Inject(method = "tryToStartFallFlying", at = @At("RETURN"), cancellable = true) + @Inject(method = "tryToStartFallFlying()Z", at = @At("RETURN"), cancellable = true) private void antarchy$allowCustomElytra(CallbackInfoReturnable cir) { if (cir.getReturnValue()) return; Player player = (Player) (Object) this; diff --git a/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json new file mode 100644 index 00000000..30a26675 --- /dev/null +++ b/fabric/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:item/bile_bucket" + } +} diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java index fdea9f54..d66a0714 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoForgeFluidTypes.java @@ -25,6 +25,16 @@ public final class AntarchyNeoForgeFluidTypes { .density(1000) .viscosity(1000))); + public static final DeferredHolder BILE_TYPE = FLUID_TYPES.register("bile", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.bile") + .fallDistanceModifier(0.0F) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1100) + .viscosity(1200))); + public static final DeferredHolder ICHOR_TYPE = FLUID_TYPES.register("ichor", () -> new FluidType(FluidType.Properties.create() .descriptionId("block.antarchy.ichor") diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index 92e197d5..b8869f66 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -214,6 +214,8 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), () -> AntarchyNeoforgeBlocks.PALE_NYXITE.get(), () -> AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), + () -> AntarchyNeoforgeBlocks.CHITEN_BLOCK.get(), + () -> AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), () -> AntarchyNeoforgeBlocks.POTENT_NYXITE.get(), () -> AntarchyNeoforgeBlocks.ANTIMETAL.get(), () -> AntarchyNeoforgeBlocks.POLISHED_ANTIMETAL.get(), diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index 3ea56095..aa9aba07 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -72,6 +72,8 @@ public final class AntarchyNeoForgeClient { private static final ResourceLocation UNDERWATER_OVERLAY = ResourceLocation.withDefaultNamespace("textures/misc/underwater.png"); private static final ResourceLocation ANTIWATER_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_still"); private static final ResourceLocation ANTIWATER_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/antiwater_flow"); + private static final ResourceLocation BILE_STILL = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_still"); + private static final ResourceLocation BILE_FLOW = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "block/bile/bile_flowing"); private AntarchyNeoForgeClient() { } @@ -207,6 +209,7 @@ public final class AntarchyNeoForgeClient { event.registerSpriteSet(AntarchyNeoforgeMisc.INVERTED_GEYSER_POOF.get(), InvertedGeyserBaseParticle.Provider::new); event.registerSpecial(AntarchyNeoforgeMisc.INVERTED_GEYSER_ERUPTION.get(), new InvertedGeyserEruptionParticle.Provider()); event.registerSpriteSet(AntarchyNeoforgeMisc.FIREFLY.get(), FireflyParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.ORANGE_ASH.get(), OrangeAshParticle.Provider::new); } @SubscribeEvent @@ -284,6 +287,38 @@ public final class AntarchyNeoForgeClient { } }, AntarchyNeoForgeFluidTypes.ICHOR_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { + @Override + public ResourceLocation getStillTexture() { + return BILE_STILL; + } + + @Override + public ResourceLocation getFlowingTexture() { + return BILE_FLOW; + } + + @Override + public ResourceLocation getOverlayTexture() { + return WATER_OVERLAY; + } + + @Override + public ResourceLocation getRenderOverlayTexture(Minecraft mc) { + return UNDERWATER_OVERLAY; + } + + @Override + public int getTintColor() { + return 0xFFFFFFFF; + } + + @Override + public int getTintColor(FluidState state, BlockAndTintGetter getter, net.minecraft.core.BlockPos pos) { + return 0xFFFFFFFF; + } + }, AntarchyNeoForgeFluidTypes.BILE_TYPE.get()); + event.registerFluidType(new IClientFluidTypeExtensions() { @Override public ResourceLocation getStillTexture() { @@ -364,6 +399,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.SMALL_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.MEDIUM_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.LARGE_BLOOD_CRYSTAL_BUD.get(), RenderType.cutout()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java index f0fc69f1..2fa8339b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ElythiaFireflyManager.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.client.renderer.ElythiaSkyRenderer; import com.craisinlord.antarchy.neoforge.registry.AntarchyNeoforgeMisc; @@ -42,8 +43,9 @@ public final class ElythiaFireflyManager { if (dayTime < NIGHT_START || dayTime > NIGHT_END) return; long gameTime = level.getGameTime(); + boolean fireflyBiome = level.getBiome(mc.player.blockPosition()).is(AntarchyTags.Biomes.ELYTHIA_FIREFLY_PARTICLE_BIOMES); - if (AntarchySettings.elythiaFireflyParticlesEnabled()) { + if (AntarchySettings.elythiaFireflyParticlesEnabled() && fireflyBiome) { if (gameTime % SPAWN_INTERVAL == 0) { Player player = mc.player; int px = (int) player.getX(); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java index 048f69a1..be7d4a50 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/JumpyBootsClientHandler.java @@ -62,6 +62,12 @@ public final class JumpyBootsClientHandler { return; } + if (jumpPressed && wasCharging && chargeTicks > 0) { + PacketDistributor.sendToServer(new JumpyBootsLaunchPayload(chargeTicks, player.isSprinting())); + reset(); + return; + } + if (sneaking) { chargeTicks = Math.min(chargeTicks + 1, JumpyBootsHelper.CHARGE_TICKS_MAX); wasCharging = true; diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 6f0bef7a..4f6cd7a1 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -11,6 +11,7 @@ import com.craisinlord.antarchy.content.block.entity.DreamCampfireBlockEntity; import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; +import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; @@ -173,6 +174,8 @@ public final class AntarchyNeoforgeBlocks { () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", () -> new NyxiteSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); + public static final DeferredBlock CHITEN_SPIKE = BLOCKS.register("chiten_spike", + () -> new ChitenSpikeBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.POINTED_DRIPSTONE))); public static final DeferredBlock POTENT_NYXITE = BLOCKS.register("potent_nyxite", () -> new PotentNyxiteBlock( AntarchyNeoforgeItems::potentNyxiteBlockEntityType, @@ -224,6 +227,8 @@ public final class AntarchyNeoforgeBlocks { () -> new com.craisinlord.antarchy.content.block.OuranwoodSquirrelNestBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.COARSE_DIRT).noLootTable())); public static final DeferredBlock HUSHWEED = BLOCKS.register("hushweed", () -> new HushweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.AZALEA).noCollission().noOcclusion())); + public static final DeferredBlock BILE_BLOCK = BLOCKS.register("bile", + () -> new BileLiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.BILE.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).lightLevel(state -> 5).noLootTable())); public static final DeferredBlock ICHOR_BLOCK = BLOCKS.register("ichor", () -> new LiquidBlock((FlowingFluid) AntarchyNeoforgeMisc.ICHOR.get(), BlockBehaviour.Properties.ofFullCopy(Blocks.WATER).noLootTable())); public static final DeferredBlock ANTIWATER_BLOCK = BLOCKS.register("antiwater", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index 4fbb93c4..e81c6828 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -116,6 +116,7 @@ public class AntarchyNeoforgeCreativeModeTabs { if (event.getTabKey() == CreativeModeTabs.TOOLS_AND_UTILITIES) { event.insertAfter(new ItemStack(Items.SHEARS), new ItemStack(AntarchyNeoforgeItems.DUCT_TAPE_ITEM.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); event.insertAfter(new ItemStack(Items.MINECART), new ItemStack(AntarchyNeoforgeItems.DIAMOND_MINECART_ITEM.get()), CreativeModeTab.TabVisibility.PARENT_AND_SEARCH_TABS); + event.accept(AntarchyNeoforgeItems.BILE_BUCKET.get()); event.accept(AntarchyNeoforgeItems.ICHOR_BUCKET.get()); event.accept(AntarchyNeoforgeItems.ANTIWATER_BUCKET.get()); event.accept(AntarchyNeoforgeItems.CLOUD_BUCKET.get()); @@ -245,6 +246,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get()); + event.accept(AntarchyNeoforgeItems.CHITEN_SPIKE_ITEM.get()); event.accept(AntarchyNeoforgeItems.AMBER_MOSS_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.AMBER_MOSS_CARPET_ITEM.get()); event.accept(AntarchyNeoforgeItems.URANIUM_BLOCK_ITEM.get()); @@ -397,14 +399,15 @@ public class AntarchyNeoforgeCreativeModeTabs { case "antimetal_scaffolding" -> 13; // 14 - Infested blocks - case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg" -> 14; + case "infested_rooted_dirt", "infested_coarse_dirt", "bed_bug_egg", + "creeping_horror_egg", "lurking_terror_egg" -> 14; // 15 - Tools case "ultimate_pickaxe", "ultimate_axe", "ultimate_shovel", "ultimate_hoe", "duct_tape", "diamond_minecart", "gravity_sculk_sensor" -> 15; // 16 - Liquid buckets - case "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; + case "bile_bucket", "ichor_bucket", "antiwater_bucket", "cloud_bucket" -> 16; // 17 - Misc wearables / gadgets case "moggles", "brutalfly_elytra", "fallen_king_crown", "jumpy_boots" -> 17; @@ -439,7 +442,7 @@ public class AntarchyNeoforgeCreativeModeTabs { "uranium_ingot", "titanium_ingot", "lucid_eye", "mantis_claw", "jumpy_bug_leg", "brutalfly_wing", "cornea_ear", "primordial_scute", "triffid_goo", "vortex_eye", - "king_scale", "queen_scale", "chiten" -> 22; + "king_scale", "queen_scale", "chiten", "stink_bug" -> 22; // 23 - Arrows (reserved for future arrow types) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index 270900c0..d099b76b 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -265,6 +265,7 @@ public final class AntarchyNeoforgeItems { () -> new com.craisinlord.antarchy.content.item.TriffidGooBlockItem(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), new Item.Properties())); public static final DeferredItem PALE_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PALE_NYXITE); public static final DeferredItem NYXITE_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.NYXITE_SPIKE); + public static final DeferredItem CHITEN_SPIKE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CHITEN_SPIKE); public static final DeferredItem POTENT_NYXITE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.POTENT_NYXITE); public static final DeferredItem UMBRAL_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_BLOCK); public static final DeferredItem UMBRAL_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET); @@ -281,6 +282,8 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem LURKING_TERROR_EGG_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.LURKING_TERROR_EGG); public static final DeferredItem WASP_NEST_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.WASP_NEST); public static final DeferredItem HUSHWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.HUSHWEED); + public static final DeferredItem BILE_BUCKET = ITEMS.register("bile_bucket", + () -> new BucketItem(AntarchyNeoforgeMisc.BILE.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ICHOR_BUCKET = ITEMS.register("ichor_bucket", () -> new BucketItem(AntarchyNeoforgeMisc.ICHOR.get(), new Item.Properties().craftRemainder(Items.BUCKET).stacksTo(1))); public static final DeferredItem ANTIWATER_BUCKET = ITEMS.register("antiwater_bucket", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 3e39984c..85643a47 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -13,6 +13,12 @@ import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBilePoolFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguration; +import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; @@ -110,6 +116,15 @@ public final class AntarchyNeoforgeMisc { () -> new Potion("growing", new MobEffectInstance(GROWTH_EFFECT, 600, 2))); // Fluid types + public static final DeferredHolder BILE_TYPE = FLUID_TYPES.register("bile", + () -> new FluidType(FluidType.Properties.create() + .descriptionId("block.antarchy.bile") + .fallDistanceModifier(0.0F) + .supportsBoating(true) + .sound(SoundActions.BUCKET_FILL, SoundEvents.BUCKET_FILL) + .sound(SoundActions.BUCKET_EMPTY, SoundEvents.BUCKET_EMPTY) + .density(1100) + .viscosity(1200))); public static final DeferredHolder ICHOR_TYPE = FLUID_TYPES.register("ichor", () -> new FluidType(FluidType.Properties.create() .descriptionId("block.antarchy.ichor") @@ -131,6 +146,10 @@ public final class AntarchyNeoforgeMisc { .viscosity(1000))); // Fluids + public static final DeferredHolder BILE = FLUIDS.register("bile", + () -> new BaseFlowingFluid.Source(bileProperties())); + public static final DeferredHolder FLOWING_BILE = FLUIDS.register("flowing_bile", + () -> new BaseFlowingFluid.Flowing(bileProperties())); public static final DeferredHolder ICHOR = FLUIDS.register("ichor", () -> new BaseFlowingFluid.Source(ichorProperties())); public static final DeferredHolder FLOWING_ICHOR = FLUIDS.register("flowing_ichor", @@ -155,6 +174,8 @@ public final class AntarchyNeoforgeMisc { () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> FIREFLY = PARTICLE_TYPES.register("firefly", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> ORANGE_ASH = PARTICLE_TYPES.register("orange_ash", + () -> new SimpleParticleType(true)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_BASE = PARTICLE_TYPES.register("inverted_geyser_base", () -> particleType(InvertedGeyserBaseParticleOptions::codec, InvertedGeyserBaseParticleOptions::streamCodec)); public static final DeferredHolder, ParticleType> INVERTED_GEYSER_PLUME = PARTICLE_TYPES.register("inverted_geyser_plume", @@ -213,6 +234,12 @@ public final class AntarchyNeoforgeMisc { () -> new ElythiaTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ElythiaLargeTuffBoulderFeature> ELYTHIA_LARGE_TUFF_BOULDER = FEATURES.register("elythia_large_tuff_boulder", () -> new ElythiaLargeTuffBoulderFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CoralSpikeFeature> ELYTHIA_CORAL_SPIKE = FEATURES.register("elythia_coral_spike", + () -> new CoralSpikeFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, FallenOuranwoodFeature> FALLEN_OURANWOOD_TREE = FEATURES.register("fallen_ouranwood_tree", + () -> new FallenOuranwoodFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, FungalMushroomFeature> FUNGAL_MUSHROOM = FEATURES.register("fungal_mushroom", + () -> new FungalMushroomFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisFissureFeature> THORAXIS_FISSURE = FEATURES.register("thoraxis_fissure", () -> new ThoraxisFissureFeature(ThoraxisFissureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisRibColumnsFeature> THORAXIS_RIB_COLUMNS = FEATURES.register("thoraxis_rib_columns", @@ -221,6 +248,14 @@ public final class AntarchyNeoforgeMisc { () -> new ThoraxisSpikeFeature(ThoraxisSpikeConfiguration.CODEC)); public static final DeferredHolder, NyxiteSpikeFeature> NYXITE_SPIKES = FEATURES.register("nyxite_spikes", () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); + public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", + () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); + public static final DeferredHolder, CavarynBilePoolFeature> CAVARYN_BILE_POOLS = FEATURES.register("cavaryn_bile_pools", + () -> new CavarynBilePoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynCreepvineFeature> CAVARYN_CREEPVINE = FEATURES.register("cavaryn_creepvine", + () -> new CavarynCreepvineFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynWallAmberMossFeature> CAVARYN_WALL_AMBER_MOSS = FEATURES.register("cavaryn_wall_amber_moss", + () -> new CavarynWallAmberMossFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, AntiwaterSpringsFeature> ANTIWATER_SPRINGS = FEATURES.register("antiwater_springs", () -> new AntiwaterSpringsFeature(AntiwaterSpringsConfiguration.CODEC)); public static final DeferredHolder, PotentNyxiteFeature> POTENT_NYXITE_FEATURE = FEATURES.register("potent_nyxite", @@ -233,6 +268,8 @@ public final class AntarchyNeoforgeMisc { () -> new BedBugNestFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BedBugSurfaceClusterFeature> BED_BUG_SURFACE_CLUSTER = FEATURES.register("bed_bug_surface_cluster", () -> new BedBugSurfaceClusterFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynEggPatchFeature> CAVARYN_TERROR_EGG_PATCH = FEATURES.register("cavaryn_terror_egg_patch", + () -> new CavarynEggPatchFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, ThoraxisAntiwaterPoolFeature> THORAXIS_ANTIWATER_POOL = FEATURES.register("thoraxis_antiwater_pool", () -> new ThoraxisAntiwaterPoolFeature(ThoraxisAntiwaterPoolConfiguration.CODEC)); public static final DeferredHolder, LucidAntiwaterPoolFeature> LUCID_ANTIWATER_POOL = FEATURES.register("lucid_antiwater_pool", @@ -265,6 +302,15 @@ public final class AntarchyNeoforgeMisc { ATTRIBUTES.register(modEventBus); } + static BaseFlowingFluid.Properties bileProperties() { + return new BaseFlowingFluid.Properties(BILE_TYPE, BILE, FLOWING_BILE) + .bucket(() -> AntarchyNeoforgeItems.BILE_BUCKET.get()) + .block(() -> AntarchyNeoforgeBlocks.BILE_BLOCK.get()) + .slopeFindDistance(4) + .levelDecreasePerBlock(1) + .tickRate(5); + } + static BaseFlowingFluid.Properties ichorProperties() { return new BaseFlowingFluid.Properties(ICHOR_TYPE, ICHOR, FLOWING_ICHOR) .bucket(() -> AntarchyNeoforgeItems.ICHOR_BUCKET.get()) diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java index bc55ca8c..8f4acca4 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeSpawnPlacements.java @@ -47,6 +47,8 @@ public class AntarchyNeoforgeSpawnPlacements { event.register(AntarchyNeoforgeEntites.SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, ScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.BASILISK.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, BasiliskEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.EMPEROR_SCORPION.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EmperorScorpionEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.CREEPING_HORROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, CreepingHorrorEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); + event.register(AntarchyNeoforgeEntites.LURKING_TERROR.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, LurkingTerrorEntity::canSpawn, RegisterSpawnPlacementsEvent.Operation.OR); event.register(AntarchyNeoforgeEntites.TERMITE.get(), SpawnPlacementTypes.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, net.minecraft.world.entity.animal.Animal::checkAnimalSpawnRules, RegisterSpawnPlacementsEvent.Operation.OR); } } diff --git a/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json b/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json new file mode 100644 index 00000000..e3943e08 --- /dev/null +++ b/neoforge/src/main/resources/assets/antarchy/models/item/bile_bucket.json @@ -0,0 +1,5 @@ +{ + "parent": "neoforge:item/bucket", + "loader": "neoforge:fluid_container", + "fluid": "antarchy:bile" +} From aad8a1e1c56c552a15e8aa036440c44545180d43 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sat, 27 Jun 2026 14:31:51 -0500 Subject: [PATCH 07/25] Bile vein with temp texture, cysts and funal ouranwood forest biome --- .../antarchy/content/AntarchyObjects.java | 4 + .../antarchy/content/StinkyBehavior.java | 27 +- .../content/block/CreepingHorrorEggBlock.java | 8 +- .../content/block/LurkingTerrorEggBlock.java | 8 +- .../content/entity/LurkingTerrorEntity.java | 5 +- .../content/entity/OctopusBombEntity.java | 15 +- .../content/entity/ant/TermiteEntity.java | 93 ++++--- .../antarchy/content/item/BigBerthaItem.java | 87 ++++++- .../cavaryn/CavarynBileCystFeature.java | 196 +++++++++++++++ .../cavaryn/CavarynBilePoolFeature.java | 150 ----------- .../cavaryn/CavarynBileVeinFeature.java | 238 ++++++++++++++++++ .../cavaryn/CavarynEggPatchFeature.java | 144 +++++++---- .../worldgen/elythia/ElythiaBiomeSource.java | 11 +- .../elythia/FallenOuranwoodFeature.java | 144 +++++++++++ .../elythia/FungalMushroomFeature.java | 190 ++++++++++++++ .../antarchy/blockstates/bile_vein.json | 7 + .../resources/assets/antarchy/lang/en_us.json | 4 + .../antarchy/models/block/bile_vein.json | 6 + .../antarchy/models/item/bile_vein.json | 3 + .../assets/antarchy/particles/stinky_fly.json | 5 + .../textures/block/bile/bile_vein.png | Bin 0 -> 954 bytes .../textures/block/bile/bile_vein.png.mcmeta | 16 ++ .../textures/block/broodstone/broodstone.png | Bin 0 -> 468 bytes .../antarchy/textures/particle/stinky_fly.png | Bin 0 -> 114 bytes .../antarchy/loot_table/blocks/bile_vein.json | 20 ++ .../data/antarchy/worldgen/biome/cavaryn.json | 16 +- .../biome/fungal_ouranwood_forest.json | 102 ++++++++ .../cavaryn_bile_cysts.json | 4 + .../cavaryn_bile_pools.json | 4 - .../cavaryn_bile_veins.json | 4 + .../fallen_ouranwood_tree.json | 4 + .../configured_feature/fungal_mushroom.json | 4 + .../worldgen/noise_settings/cavaryn.json | 72 +----- .../worldgen/noise_settings/elythia.json | 4 +- ...ile_pools.json => cavaryn_bile_cysts.json} | 2 +- .../placed_feature/cavaryn_bile_veins.json | 27 ++ .../cavaryn_terror_egg_patch.json | 2 +- .../placed_feature/fallen_ouranwood_tree.json | 9 + .../placed_feature/fungal_mushroom.json | 9 + .../tags/block/mineable/pickaxe.json | 1 + .../tags/block/needs_stone_tool.json | 3 +- .../fabric/AntarchyFabricContent.java | 18 +- .../client/AntarchyFabricClientBootstrap.java | 2 + .../mixin/AntimetalScaffoldingMixin.java | 2 +- .../client/ToreterrorCameraShakeMixin.java | 6 + .../antarchy/neoforge/AntarchyNeoforge.java | 1 + .../client/AntarchyNeoForgeClient.java | 2 + .../client/ToreterrorCameraShakeHandler.java | 6 + .../registry/AntarchyNeoforgeBlocks.java | 4 +- .../AntarchyNeoforgeCreativeModeTabs.java | 3 +- .../registry/AntarchyNeoforgeItems.java | 1 + .../registry/AntarchyNeoforgeMisc.java | 11 +- 52 files changed, 1361 insertions(+), 343 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java delete mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java create mode 100644 common/src/main/resources/assets/antarchy/blockstates/bile_vein.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/bile_vein.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/bile_vein.json create mode 100644 common/src/main/resources/assets/antarchy/particles/stinky_fly.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png create mode 100644 common/src/main/resources/assets/antarchy/textures/particle/stinky_fly.png create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json delete mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json rename common/src/main/resources/data/antarchy/worldgen/placed_feature/{cavaryn_bile_pools.json => cavaryn_bile_cysts.json} (90%) create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java index 01232839..f36e053f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyObjects.java @@ -225,6 +225,8 @@ public final class AntarchyObjects { public static Supplier> HUSHWEED_BLOCK_ENTITY = (Supplier>) UNBOUND; @SuppressWarnings("unchecked") public static Supplier STINKY_GAS = (Supplier) UNBOUND; + @SuppressWarnings("unchecked") + public static Supplier STINKY_FLY = (Supplier) UNBOUND; private AntarchyObjects() { } @@ -316,6 +318,7 @@ public final class AntarchyObjects { Supplier> waspNestBlockEntity, Supplier> hushweedBlockEntity, Supplier stinkyGas, + Supplier stinkyFly, Supplier> doubleDamageChance, Supplier> bloodglassMaxHearts, Supplier> bloodglassWard @@ -406,6 +409,7 @@ public final class AntarchyObjects { WASP_NEST_BLOCK_ENTITY = waspNestBlockEntity; HUSHWEED_BLOCK_ENTITY = hushweedBlockEntity; STINKY_GAS = stinkyGas; + STINKY_FLY = stinkyFly; DOUBLE_DAMAGE_CHANCE = doubleDamageChance; BLOODGLASS_MAX_HEARTS = bloodglassMaxHearts; BLOODGLASS_WARD = bloodglassWard; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java index 2ae08064..5bdb11b1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/StinkyBehavior.java @@ -12,7 +12,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.Vec3; public final class StinkyBehavior { - public static final int STINKY_EFFECT_DURATION_TICKS = 60; public static final double STINK_BUG_AURA_RADIUS = 5.0D; public static final double STINKY_NAUSEA_RADIUS = 4.0D; private static final int TRAIL_INTERVAL_TICKS = 4; @@ -59,6 +58,17 @@ public final class StinkyBehavior { entity.getBbWidth() * 0.12D, 0.005D ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + 1, + entity.getBbWidth() * 0.35D, + entity.getBbHeight() * 0.2D, + entity.getBbWidth() * 0.35D, + 0.0D + ); applyNearbyNausea(entity, STINKY_NAUSEA_RADIUS, STINKY_NAUSEA_DURATION_TICKS); if (entity.tickCount % REACTION_INTERVAL_TICKS == 0) { reactToStinkySource(entity); @@ -80,6 +90,17 @@ public final class StinkyBehavior { entity.getBbWidth() * 0.35D, 0.045D ); + serverLevel.sendParticles( + AntarchyObjects.STINKY_FLY.get(), + entity.getX(), + entity.getY(0.45D), + entity.getZ(), + Math.max(2, count / 6), + entity.getBbWidth() * 0.45D, + entity.getBbHeight() * 0.25D, + entity.getBbWidth() * 0.45D, + 0.0D + ); applyNearbyNausea(entity, STINK_BUG_AURA_RADIUS, STINK_BUG_BURST_NAUSEA_DURATION_TICKS); } @@ -108,6 +129,9 @@ public final class StinkyBehavior { mob -> mob.isAlive() && mob != source )) { if (mob.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + if (source.getType().is(EntityTypeTags.SENSITIVE_TO_BANE_OF_ARTHROPODS)) { + continue; + } attractArthropod(mob, source); continue; } @@ -167,4 +191,5 @@ public final class StinkyBehavior { } return !mob.isAlliedTo(source); } + } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java index 0d21a0fa..ea6bb9b0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/CreepingHorrorEggBlock.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.entity.CreepingHorrorEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -87,7 +88,7 @@ public class CreepingHorrorEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level)) { + if (!this.shouldUpdateHatchLevel(level, pos)) { return; } @@ -174,8 +175,9 @@ public class CreepingHorrorEggBlock extends Block { level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); } - private boolean shouldUpdateHatchLevel(Level level) { - return level.random.nextInt(500) == 0; + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; } private boolean canDestroyEgg(Level level, Entity entity) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java index a3f16236..c99b4e7f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/LurkingTerrorEggBlock.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.content.block; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.entity.LurkingTerrorEntity; +import com.craisinlord.antarchy.content.block.AmberMossBlock; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -87,7 +88,7 @@ public class LurkingTerrorEggBlock extends Block { @Override protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { - if (!this.shouldUpdateHatchLevel(level)) { + if (!this.shouldUpdateHatchLevel(level, pos)) { return; } @@ -174,8 +175,9 @@ public class LurkingTerrorEggBlock extends Block { level.setBlock(pos, state.setValue(EGGS, eggs - 1), 2); } - private boolean shouldUpdateHatchLevel(Level level) { - return level.random.nextInt(500) == 0; + private boolean shouldUpdateHatchLevel(Level level, BlockPos pos) { + boolean onAmberMoss = level.getBlockState(pos.below()).getBlock() instanceof AmberMossBlock; + return level.random.nextInt(onAmberMoss ? 150 : 500) == 0; } private boolean canDestroyEgg(Level level, Entity entity) { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java index 3a44ad3b..bd99d51f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/LurkingTerrorEntity.java @@ -111,8 +111,11 @@ public class LurkingTerrorEntity extends Monster implements GeoEntity { } return state.setAndContinue(ATTACK_LAND_ANIM); } + if (!this.onGround()) { + return state.setAndContinue(FLY_ANIM); + } if (state.isMoving()) { - return state.setAndContinue(this.onGround() ? WALK_ANIM : FLY_ANIM); + return state.setAndContinue(WALK_ANIM); } return state.setAndContinue(IDLE_ANIM); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java index 527f7513..ecc3edbe 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/OctopusBombEntity.java @@ -334,11 +334,18 @@ public class OctopusBombEntity extends Monster implements GeoEntity { if (--this.wanderRetargetTicks <= 0) { this.wanderRetargetTicks = 40 + this.random.nextInt(40); float angle = this.random.nextFloat() * (float) (Math.PI * 2); - this.wanderDx = Mth.cos(angle) * 0.1f; - this.wanderDy = -0.05f + this.random.nextFloat() * 0.1f; - this.wanderDz = Mth.sin(angle) * 0.1f; + this.wanderDx = Mth.cos(angle) * 0.015f; + this.wanderDz = Mth.sin(angle) * 0.015f; + this.wanderDy = -0.01f + this.random.nextFloat() * 0.01f; // slight downward bias } - this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, this.wanderDy, this.wanderDz)); + + // Surface avoidance: if the block above is not water, push down + float dy = this.wanderDy; + if (!this.level().getFluidState(this.blockPosition().above()).is(net.minecraft.tags.FluidTags.WATER)) { + dy = -0.03f; + } + + this.setDeltaMovement(this.getDeltaMovement().add(this.wanderDx, dy, this.wanderDz)); } // ------------------------------------------------------------------------- diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java index 70afc6ff..c90772d3 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/TermiteEntity.java @@ -4,6 +4,7 @@ import com.craisinlord.antarchy.content.AntarchyTags; import com.craisinlord.antarchy.config.AntarchySettings; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.resources.ResourceKey; import net.minecraft.tags.TagKey; import net.minecraft.world.entity.EntityType; @@ -18,10 +19,21 @@ import software.bernie.geckolib.animatable.GeoEntity; public class TermiteEntity extends BaseAntEntity implements GeoEntity { private static final int WOOD_BITE_ANIMATION_TICKS = 8; - private static final int WOOD_SEARCH_INTERVAL_TICKS = 10; + private static final int WOOD_SEARCH_INTERVAL_TICKS = 20; private static final int WOOD_REPATH_INTERVAL_TICKS = 6; private static final int WOOD_SEARCH_RADIUS_HORIZONTAL = 12; private static final int WOOD_SEARCH_RADIUS_VERTICAL = 4; + private static final Vec3i[] IMMEDIATE_WOOD_OFFSETS = { + new Vec3i(0, 1, 0), + new Vec3i(0, 0, -1), + new Vec3i(0, 0, 1), + new Vec3i(1, 0, 0), + new Vec3i(-1, 0, 0), + new Vec3i(0, 1, -1), + new Vec3i(0, 1, 1), + new Vec3i(1, 1, 0), + new Vec3i(-1, 1, 0), + }; @Nullable private BlockPos targetWoodPos; private int nextWoodSearchTick; @@ -125,7 +137,9 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } private boolean tryEatNearbyWood() { - for (BlockPos targetPos : this.getImmediateWoodChecks()) { + BlockPos basePos = this.blockPosition(); + for (Vec3i offset : IMMEDIATE_WOOD_OFFSETS) { + BlockPos targetPos = basePos.offset(offset); BlockState targetState = this.level().getBlockState(targetPos); if (!targetState.is(AntarchyTags.Blocks.TERMITE_FOODS)) { continue; @@ -141,22 +155,6 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { return false; } - private BlockPos[] getImmediateWoodChecks() { - BlockPos basePos = this.blockPosition(); - BlockPos abovePos = basePos.above(); - return new BlockPos[] { - basePos.above(), - basePos.north(), - basePos.south(), - basePos.east(), - basePos.west(), - abovePos.north(), - abovePos.south(), - abovePos.east(), - abovePos.west() - }; - } - @Nullable private BlockPos getCurrentWoodTarget() { if (this.targetWoodPos != null && this.isValidWoodTarget(this.targetWoodPos)) { @@ -175,20 +173,52 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { @Nullable private BlockPos findClosestWoodTarget() { BlockPos origin = this.blockPosition(); + int ox = origin.getX(); + int oy = origin.getY(); + int oz = origin.getZ(); BlockPos bestPos = null; - double bestDistance = Double.MAX_VALUE; + double bestDistSq = Double.MAX_VALUE; + BlockPos.MutableBlockPos candidate = new BlockPos.MutableBlockPos(); - for (BlockPos pos : BlockPos.betweenClosed( - origin.offset(-WOOD_SEARCH_RADIUS_HORIZONTAL, -WOOD_SEARCH_RADIUS_VERTICAL, -WOOD_SEARCH_RADIUS_HORIZONTAL), - origin.offset(WOOD_SEARCH_RADIUS_HORIZONTAL, WOOD_SEARCH_RADIUS_VERTICAL + 2, WOOD_SEARCH_RADIUS_HORIZONTAL))) { - if (!this.isValidWoodTarget(pos)) { - continue; + for (int r = 0; r <= WOOD_SEARCH_RADIUS_HORIZONTAL; r++) { + if (bestPos != null && bestDistSq <= (double)(r * r)) { + break; } - - double distance = pos.distSqr(origin); - if (distance < bestDistance) { - bestDistance = distance; - bestPos = pos.immutable(); + for (int dy = -WOOD_SEARCH_RADIUS_VERTICAL; dy <= WOOD_SEARCH_RADIUS_VERTICAL + 2; dy++) { + if (r == 0) { + candidate.set(ox, oy + dy, oz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + continue; + } + // North/South faces (dz = ±r) + for (int dx = -r; dx <= r; dx++) { + candidate.set(ox + dx, oy + dy, oz - r); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + dx, oy + dy, oz + r); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + } + // East/West faces (dx = ±r, corners already covered above) + for (int dz = -r + 1; dz <= r - 1; dz++) { + candidate.set(ox - r, oy + dy, oz + dz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + candidate.set(ox + r, oy + dy, oz + dz); + if (this.isValidWoodTarget(candidate)) { + double d = candidate.distSqr(origin); + if (d < bestDistSq) { bestDistSq = d; bestPos = candidate.immutable(); } + } + } } } @@ -222,9 +252,10 @@ public class TermiteEntity extends BaseAntEntity implements GeoEntity { } private boolean isWalkableStandPos(BlockPos pos) { - BlockState floorState = this.level().getBlockState(pos.below()); + BlockPos floor = pos.below(); + BlockState floorState = this.level().getBlockState(floor); return this.level().getBlockState(pos).isAir() && this.level().getBlockState(pos.above()).isAir() - && floorState.isFaceSturdy(this.level(), pos.below(), Direction.UP); + && floorState.isFaceSturdy(this.level(), floor, Direction.UP); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java index ce7d56a4..0ffc3755 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/item/BigBerthaItem.java @@ -62,6 +62,14 @@ public class BigBerthaItem extends SwordItem implements GeoItem { private static final String SPIN_TICKS_TAG = "antarchy.big_bertha_spin_ticks"; private static final String SPIN_DIRECTION_X_TAG = "antarchy.big_bertha_spin_direction_x"; private static final String SPIN_DIRECTION_Z_TAG = "antarchy.big_bertha_spin_direction_z"; + private static final String TORETERROR_JUMPING_TAG = "antarchy.toreterror_jumping"; + private static final String TORETERROR_LAUNCHED_TAG = "antarchy.toreterror_launched"; + private static final int TORETERROR_LANDING_RADIUS = 6; + private static final int TORETERROR_COOLDOWN_TICKS = 200; + private static final int TORETERROR_SHAKE_TICKS = 25; + + /** Client-side only: how many ticks of camera shake remain from a Toreterror landing. */ + public static int clientShakeTicks = 0; private static final ResourceLocation ATTACK_RANGE_MODIFIER_ID = ResourceLocation.fromNamespaceAndPath("antarchy", "big_bertha_attack_range"); private final Tier tier; private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); @@ -116,6 +124,14 @@ public class BigBerthaItem extends SwordItem implements GeoItem { return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); } + if (mode == BossMode.TORETERROR) { + if (player.getCooldowns().isOnCooldown(this)) { + return InteractionResultHolder.fail(stack); + } + startToreterrorJump(level, player, stack); + return InteractionResultHolder.sidedSuccess(stack, level.isClientSide); + } + if (mode != BossMode.MOLEVORE) { return InteractionResultHolder.pass(stack); } @@ -144,7 +160,7 @@ public class BigBerthaItem extends SwordItem implements GeoItem { case LUCID -> applyLucidHit(target, player, serverLevel); case NIGHTMARE -> applyNightmareHit(target, serverLevel); case KRAKEN -> applyKrakenHit(player, target, serverLevel); - case MOLEVORE -> { + case MOLEVORE, TORETERROR -> { } } @@ -158,6 +174,32 @@ public class BigBerthaItem extends SwordItem implements GeoItem { return; } + // Toreterror jump tracking + if (isToreterrorJumping(stack) && player.getMainHandItem() == stack) { + player.fallDistance = 0.0F; // prevent fall damage during the crash-down + boolean launched = readInt(stack, TORETERROR_LAUNCHED_TAG) == 1; + if (!launched && !player.onGround()) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> tag.putInt(TORETERROR_LAUNCHED_TAG, 1)); + } + if (launched && player.onGround()) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + tag.remove(TORETERROR_JUMPING_TAG); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + if (!level.isClientSide && player instanceof ServerPlayer serverPlayer) { + applyToreterrorLanding((ServerLevel) level, serverPlayer); + } + if (level.isClientSide) { + clientShakeTicks = TORETERROR_SHAKE_TICKS; + } + } + } + + // Tick client shake counter + if (level.isClientSide && clientShakeTicks > 0) { + clientShakeTicks--; + } + int spinTicks = getSpinTicks(stack); if (spinTicks <= 0) { return; @@ -317,6 +359,43 @@ public class BigBerthaItem extends SwordItem implements GeoItem { } } + private void startToreterrorJump(Level level, Player player, ItemStack stack) { + CustomData.update(DataComponents.CUSTOM_DATA, stack, tag -> { + tag.putInt(TORETERROR_JUMPING_TAG, 1); + tag.remove(TORETERROR_LAUNCHED_TAG); + }); + player.setDeltaMovement(player.getDeltaMovement().x, 1.5D, player.getDeltaMovement().z); + player.hasImpulse = true; + player.fallDistance = 0.0F; + player.getCooldowns().addCooldown(this, TORETERROR_COOLDOWN_TICKS); + player.awardStat(Stats.ITEM_USED.get(this)); + level.playSound(null, player.blockPosition(), SoundEvents.GENERIC_EXPLODE.value(), SoundSource.PLAYERS, 1.0F, 0.6F); + } + + private void applyToreterrorLanding(ServerLevel level, ServerPlayer player) { + ItemStack heldStack = player.getMainHandItem(); + float damage = (float) (player.getAttributeValue(Attributes.ATTACK_DAMAGE) * 2.0D); + AABB aoe = player.getBoundingBox().inflate(TORETERROR_LANDING_RADIUS, 3.0D, TORETERROR_LANDING_RADIUS); + for (LivingEntity victim : level.getEntitiesOfClass(LivingEntity.class, aoe, + e -> e.isAlive() && e != player && !e.isSpectator())) { + victim.hurt(player.damageSources().playerAttack(player), damage); + Vec3 knockDir = victim.position().subtract(player.position()).multiply(1.0D, 0.0D, 1.0D); + if (knockDir.lengthSqr() < 1.0E-4D) knockDir = player.getLookAngle().multiply(1.0D, 0.0D, 1.0D); + Vec3 normalized = knockDir.normalize(); + victim.push(normalized.x * 2.5D, 0.6D, normalized.z * 2.5D); + victim.hurtMarked = true; + } + level.playSound(null, player.blockPosition(), SoundEvents.GENERIC_EXPLODE.value(), SoundSource.PLAYERS, 1.5F, 0.75F); + level.sendParticles(ParticleTypes.EXPLOSION, player.getX(), player.getY() + 0.5D, player.getZ(), 4, 1.5D, 0.3D, 1.5D, 0.0D); + level.sendParticles(ParticleTypes.SPLASH, player.getX(), player.getY() + 0.5D, player.getZ(), 60, 3.0D, 0.5D, 3.0D, 0.2D); + level.sendParticles(ParticleTypes.CRIT, player.getX(), player.getY() + 0.5D, player.getZ(), 20, 2.0D, 0.5D, 2.0D, 0.1D); + heldStack.hurtAndBreak(1, player, EquipmentSlot.MAINHAND); + } + + private static boolean isToreterrorJumping(ItemStack stack) { + return readInt(stack, TORETERROR_JUMPING_TAG) == 1; + } + private void tickMolevoreSpin(ServerLevel level, ServerPlayer player, ItemStack stack, int spinTicks) { Vec3 direction = getStoredSpinDirection(stack); double verticalBoost = player.onGround() ? 0.08D : Math.max(-0.08D, player.getDeltaMovement().y); @@ -505,7 +584,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem { NIGHTMARE(1, "tooltip.antarchy.big_bertha.mode.nightmare", "message.antarchy.big_bertha.mode.nightmare"), KRAKEN(2, "tooltip.antarchy.big_bertha.mode.kraken", "message.antarchy.big_bertha.mode.kraken"), MOLEVORE(3, "tooltip.antarchy.big_bertha.mode.molevore", "message.antarchy.big_bertha.mode.molevore"), - LUCID(4, "tooltip.antarchy.big_bertha.mode.lucid", "message.antarchy.big_bertha.mode.lucid"); + LUCID(4, "tooltip.antarchy.big_bertha.mode.lucid", "message.antarchy.big_bertha.mode.lucid"), + TORETERROR(5, "tooltip.antarchy.big_bertha.mode.toreterror", "message.antarchy.big_bertha.mode.toreterror"); private final int id; private final String tooltipKey; @@ -523,7 +603,8 @@ public class BigBerthaItem extends SwordItem implements GeoItem { case LUCID -> NIGHTMARE; case NIGHTMARE -> KRAKEN; case KRAKEN -> MOLEVORE; - case MOLEVORE -> BASILISK; + case MOLEVORE -> TORETERROR; + case TORETERROR -> BASILISK; }; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java new file mode 100644 index 00000000..2352b44e --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java @@ -0,0 +1,196 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileCystFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 8; + private static final int SEARCH_ATTEMPTS = 20; + private static final int VERTICAL_SCAN = 10; + // Chance that each exposed vein face oozes bile liquid outward into the cave + private static final float OOZE_CHANCE = 0.22f; + + public CavarynBileCystFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos center = findCenter(level, context.origin(), random); + if (center == null) { + return false; + } + + return placeCyst(level, center, bileVeinBlock, bileBlock, random); + } + + // Find a solid block adjacent to cave air, then step 1-2 blocks deeper into the wall + // so the cyst is embedded rather than sitting right on the surface. + private static BlockPos findCenter(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 6, level.getMaxBuildHeight() - 6); + mutable.set(x, y, z); + + if (!isSolid(level.getBlockState(mutable))) { + continue; + } + + // Need at least one open neighbor (at cave surface) + Direction openDir = null; + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + openDir = dir; + break; + } + } + if (openDir == null) { + continue; + } + + // Step 1-2 blocks away from the opening so the cyst sits inside the wall + int depth = 1 + random.nextInt(2); + BlockPos candidate = mutable.immutable().relative(openDir.getOpposite(), depth); + if (isSolid(level.getBlockState(candidate))) { + return candidate; + } + } + return null; + } + + private boolean placeCyst(WorldGenLevel level, BlockPos center, Block veinBlock, Block bileBlock, RandomSource random) { + // Per-axis radii: 1.5–13.5 so the cyst diameter ranges roughly 3–27 + double rx = 1.5 + random.nextDouble() * 12.0; + double ry = 1.5 + random.nextDouble() * 12.0; + double rz = 1.5 + random.nextDouble() * 12.0; + + // Random stretch: pick one axis and scale it up 1.3–2x for elongated cysts + int stretchAxis = random.nextInt(3); + if (stretchAxis == 0) rx *= 1.3 + random.nextDouble() * 0.7; + else if (stretchAxis == 1) ry *= 1.3 + random.nextDouble() * 0.7; + else rz *= 1.3 + random.nextDouble() * 0.7; + + // Independent sine frequencies per wobble term — drives the lumpy distortion + double f1x = 0.6 + random.nextDouble() * 1.2; + double f1z = 0.6 + random.nextDouble() * 1.2; + double f2y = 0.7 + random.nextDouble() * 1.0; + double f2x = 0.5 + random.nextDouble() * 0.9; + double f3z = 0.8 + random.nextDouble() * 1.1; + double f3y = 0.5 + random.nextDouble() * 0.8; + double wobbleAmp = 0.15 + random.nextDouble() * 0.2; // surface roughness + + int maxR = (int) Math.ceil(Math.max(Math.max(rx, ry), rz)) + 2; + List placed = new ArrayList<>(); + + for (int dx = -maxR; dx <= maxR; dx++) { + for (int dy = -maxR; dy <= maxR; dy++) { + for (int dz = -maxR; dz <= maxR; dz++) { + double baseDist = Math.sqrt( + (dx * dx) / (rx * rx) + + (dy * dy) / (ry * ry) + + (dz * dz) / (rz * rz)); + + // Multi-frequency sine interference — gives lumpy, non-spherical surface + double wobble = wobbleAmp * ( + 0.4 * Math.sin(dx * f1x + dz * f1z) + + 0.35 * Math.cos(dy * f2y + dx * f2x) + + 0.25 * Math.sin(dz * f3z + dy * f3y)); + + double distorted = baseDist + wobble; + if (distorted > 1.0) { + continue; + } + + BlockPos pos = center.offset(dx, dy, dz); + BlockState existing = level.getBlockState(pos); + if (!isSolid(existing)) { + continue; + } + + if (distorted < 0.7) { + // Interior — fill with bile liquid + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(pos, bileState, 2); + scheduleFluidTick(level, pos, bileState); + } else { + // Outer shell — bile vein blocks + level.setBlock(pos, veinBlock.defaultBlockState(), 2); + placed.add(pos.immutable()); + } + } + } + } + + if (placed.isEmpty()) { + return false; + } + + // 30% chance this cyst oozes at all + if (random.nextFloat() >= 0.30f) { + return true; + } + + // Ooze bile out of exposed faces — "popped pimple" seep + for (BlockPos cystPos : placed) { + for (Direction dir : Direction.values()) { + BlockPos adj = cystPos.relative(dir); + BlockState adjState = level.getBlockState(adj); + if ((adjState.isAir() || adjState.canBeReplaced()) && random.nextFloat() < OOZE_CHANCE) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(adj, bileState, 2); + scheduleFluidTick(level, adj, bileState); + } + } + } + + return true; + } + + private static boolean isSolid(BlockState state) { + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty(); + } + + private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java deleted file mode 100644 index f28f4f69..00000000 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBilePoolFeature.java +++ /dev/null @@ -1,150 +0,0 @@ -package com.craisinlord.antarchy.content.worldgen.cavaryn; - -import com.craisinlord.antarchy.Antarchy; -import com.mojang.serialization.Codec; -import java.util.Optional; -import net.minecraft.core.BlockPos; -import net.minecraft.core.Direction; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import net.minecraft.util.RandomSource; -import net.minecraft.world.level.WorldGenLevel; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.LiquidBlock; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.levelgen.feature.Feature; -import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; -import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; -import net.minecraft.world.level.material.FluidState; - -public final class CavarynBilePoolFeature extends Feature { - private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); - private static final int SEARCH_RADIUS = 8; - private static final int SEARCH_ATTEMPTS = 24; - private static final int FLOOR_SCAN_RANGE = 14; - - public CavarynBilePoolFeature(Codec codec) { - super(codec); - } - - @Override - public boolean place(FeaturePlaceContext context) { - Block bileBlock = getBlock(BILE_ID); - if (!(bileBlock instanceof LiquidBlock)) { - return false; - } - - WorldGenLevel level = context.level(); - RandomSource random = context.random(); - BlockPos floorCenter = findPoolFloor(level, context.origin(), random); - if (floorCenter == null) { - return false; - } - - return placePool(level, floorCenter, bileBlock.defaultBlockState(), random); - } - - private static BlockPos findPoolFloor(WorldGenLevel level, BlockPos origin, RandomSource random) { - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { - int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; - int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; - int startY = origin.getY() + random.nextInt(FLOOR_SCAN_RANGE * 2 + 1) - FLOOR_SCAN_RANGE; - startY = Math.max(level.getMinBuildHeight() + 3, Math.min(level.getMaxBuildHeight() - 4, startY)); - - for (int y = startY; y >= Math.max(level.getMinBuildHeight() + 2, startY - FLOOR_SCAN_RANGE); y--) { - mutable.set(x, y, z); - BlockState floorState = level.getBlockState(mutable); - if (!isValidFloor(level, mutable, floorState)) { - continue; - } - - BlockState aboveState = level.getBlockState(mutable.above()); - if (!isOpenBlock(aboveState)) { - continue; - } - - if (countSolidNeighbors(level, mutable) >= 3) { - return mutable.immutable(); - } - } - } - - return null; - } - - private static boolean placePool(WorldGenLevel level, BlockPos center, BlockState bileState, RandomSource random) { - boolean placedAny = false; - int radius = 2 + random.nextInt(3); - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - - for (int dx = -radius; dx <= radius; dx++) { - for (int dz = -radius; dz <= radius; dz++) { - double normalized = (dx * dx + dz * dz) / (double) Math.max(1, radius * radius); - if (normalized > 1.0D + random.nextDouble() * 0.2D) { - continue; - } - - double density = 1.0D - Math.min(1.0D, normalized); - int localDepth = density > 0.45D || random.nextFloat() < 0.35F ? 2 : 1; - localDepth = Mth.clamp(localDepth, 1, 2); - - for (int depth = 0; depth < localDepth; depth++) { - mutable.set(center.getX() + dx, center.getY() - depth, center.getZ() + dz); - BlockState existing = level.getBlockState(mutable); - FluidState existingFluid = existing.getFluidState(); - if (existing.is(Blocks.BEDROCK)) { - break; - } - if (!existing.canBeReplaced() && existingFluid.isEmpty() && !existing.blocksMotion()) { - continue; - } - - level.setBlock(mutable, bileState, 2); - scheduleFluidTick(level, mutable, bileState); - placedAny = true; - } - } - } - - return placedAny; - } - - private static boolean isValidFloor(WorldGenLevel level, BlockPos pos, BlockState state) { - return !state.isAir() - && !state.is(Blocks.BEDROCK) - && state.getFluidState().isEmpty() - && state.blocksMotion() - && state.isFaceSturdy(level, pos, Direction.UP); - } - - private static boolean isOpenBlock(BlockState state) { - return state.isAir() || state.canBeReplaced() || !state.getFluidState().isEmpty(); - } - - private static int countSolidNeighbors(WorldGenLevel level, BlockPos pos) { - int solidNeighbors = 0; - BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); - for (Direction direction : Direction.Plane.HORIZONTAL) { - mutable.setWithOffset(pos, direction); - if (isValidFloor(level, mutable, level.getBlockState(mutable))) { - solidNeighbors++; - } - } - return solidNeighbors; - } - - private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { - FluidState fluidState = state.getFluidState(); - if (!fluidState.isEmpty()) { - level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); - } - } - - private static Block getBlock(ResourceLocation id) { - Optional block = BuiltInRegistries.BLOCK.getOptional(id); - return block.orElse(null); - } -} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java new file mode 100644 index 00000000..932bd883 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java @@ -0,0 +1,238 @@ +package com.craisinlord.antarchy.content.worldgen.cavaryn; + +import com.craisinlord.antarchy.Antarchy; +import com.mojang.serialization.Codec; + +import java.util.*; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; +import net.minecraft.world.level.material.FluidState; + +public final class CavarynBileVeinFeature extends Feature { + private static final ResourceLocation BILE_VEIN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile_vein"); + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final int SEARCH_RADIUS = 10; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final float BRANCH_CHANCE = 0.12f; + private static final float LIQUID_POCKET_CHANCE = 0.04f; + + public CavarynBileVeinFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + Block bileVeinBlock = getBlock(BILE_VEIN_ID); + Block bileBlock = getBlock(BILE_ID); + if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + return false; + } + + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + + BlockPos start = findStart(level, context.origin(), random); + if (start == null) { + return false; + } + + return growVeinNetwork(level, start, bileVeinBlock, bileBlock, random); + } + + // Find a solid block that sits at a cave boundary + private static BlockPos findStart(WorldGenLevel level, BlockPos origin, RandomSource random) { + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int attempt = 0; attempt < SEARCH_ATTEMPTS; attempt++) { + int x = origin.getX() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int z = origin.getZ() + random.nextInt(SEARCH_RADIUS * 2 + 1) - SEARCH_RADIUS; + int y = origin.getY() + random.nextInt(VERTICAL_SCAN * 2 + 1) - VERTICAL_SCAN; + y = Mth.clamp(y, level.getMinBuildHeight() + 2, level.getMaxBuildHeight() - 3); + mutable.set(x, y, z); + + if (!isVeinCandidate(level.getBlockState(mutable))) { + continue; + } + + for (Direction dir : Direction.values()) { + if (level.getBlockState(mutable.relative(dir)).canBeReplaced()) { + return mutable.immutable(); + } + } + } + return null; + } + + private boolean growVeinNetwork(WorldGenLevel level, BlockPos start, Block veinBlock, Block bileBlock, RandomSource random) { + Set visited = new HashSet<>(); + List pendingBranches = new ArrayList<>(); + boolean placedAny = false; + + Direction mainDir = Direction.values()[random.nextInt(6)]; + placedAny |= growArm(level, start, mainDir, 45 + random.nextInt(25), visited, pendingBranches, veinBlock, bileBlock, random); + + for (BranchStart branch : pendingBranches) { + Direction branchDir = perpendiculars(branch.dir())[random.nextInt(4)]; + int branchLen = 15 + random.nextInt(20); + growArm(level, branch.pos(), branchDir, branchLen, visited, null, veinBlock, bileBlock, random); + } + + return placedAny; + } + + private boolean growArm( + WorldGenLevel level, + BlockPos start, + Direction initialDir, + int maxSteps, + Set visited, + List branches, + Block veinBlock, + Block bileBlock, + RandomSource random + ) { + BlockPos current = start; + Direction dir = initialDir; + boolean placedAny = false; + + for (int step = 0; step < maxSteps; step++) { + if (visited.contains(current)) { + current = current.relative(biasedNextDir(dir, random)); + continue; + } + + BlockState state = level.getBlockState(current); + if (!isVeinCandidate(state)) { + // Try to redirect + BlockPos redirect = findSolidNeighbor(current, dir, visited, level, random); + if (redirect == null) { + break; + } + current = redirect; + state = level.getBlockState(current); + if (!isVeinCandidate(state)) { + break; + } + } + + visited.add(current); + level.setBlock(current, veinBlock.defaultBlockState(), 2); + placedAny = true; + + if (random.nextFloat() < LIQUID_POCKET_CHANCE) { + tryPlaceLiquidPocket(level, current, bileBlock, visited, random); + } + + if (branches != null && random.nextFloat() < BRANCH_CHANCE) { + Direction[] perps = perpendiculars(dir); + branches.add(new BranchStart(current, perps[random.nextInt(perps.length)])); + } + + dir = biasedNextDir(dir, random); + current = current.relative(dir); + } + + return placedAny; + } + + private static Direction biasedNextDir(Direction current, RandomSource random) { + int roll = random.nextInt(10); + if (roll < 6) { + return current; + } + return perpendiculars(current)[roll - 6]; + } + + private static BlockPos findSolidNeighbor(BlockPos from, Direction preferredDir, Set visited, WorldGenLevel level, RandomSource random) { + Direction[] perps = perpendiculars(preferredDir); + for (int i = perps.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = perps[i]; + perps[i] = perps[j]; + perps[j] = tmp; + } + for (Direction d : perps) { + BlockPos candidate = from.relative(d); + if (!visited.contains(candidate) && isVeinCandidate(level.getBlockState(candidate))) { + return candidate; + } + } + return null; + } + + private static void tryPlaceLiquidPocket(WorldGenLevel level, BlockPos veinPos, Block bileBlock, Set visited, RandomSource random) { + Direction[] dirs = Direction.values().clone(); + for (int i = dirs.length - 1; i > 0; i--) { + int j = random.nextInt(i + 1); + Direction tmp = dirs[i]; + dirs[i] = dirs[j]; + dirs[j] = tmp; + } + for (Direction d : dirs) { + BlockPos candidate = veinPos.relative(d); + if (visited.contains(candidate)) { + continue; + } + BlockState candidateState = level.getBlockState(candidate); + if (!isVeinCandidate(candidateState)) { + continue; + } + if (isEnclosed(level, candidate) || random.nextFloat() < 0.05f) { + BlockState bileState = bileBlock.defaultBlockState(); + level.setBlock(candidate, bileState, 2); + scheduleFluidTick(level, candidate, bileState); + visited.add(candidate); + return; + } + } + } + + private static boolean isEnclosed(WorldGenLevel level, BlockPos pos) { + for (Direction d : Direction.values()) { + BlockState neighbor = level.getBlockState(pos.relative(d)); + if (neighbor.isAir() || neighbor.canBeReplaced()) { + return false; + } + } + return true; + } + + private static boolean isVeinCandidate(BlockState state) { + return state.blocksMotion() && !state.is(Blocks.BEDROCK) && state.getFluidState().isEmpty(); + } + + private static Direction[] perpendiculars(Direction dir) { + return switch (dir.getAxis()) { + case X -> new Direction[]{Direction.UP, Direction.DOWN, Direction.NORTH, Direction.SOUTH}; + case Z -> new Direction[]{Direction.UP, Direction.DOWN, Direction.EAST, Direction.WEST}; + case Y -> new Direction[]{Direction.NORTH, Direction.SOUTH, Direction.EAST, Direction.WEST}; + }; + } + + private static void scheduleFluidTick(WorldGenLevel level, BlockPos pos, BlockState state) { + FluidState fluidState = state.getFluidState(); + if (!fluidState.isEmpty()) { + level.scheduleTick(pos, fluidState.getType(), fluidState.getType().getTickDelay(level)); + } + } + + private static Block getBlock(ResourceLocation id) { + Optional block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); + } + + private record BranchStart(BlockPos pos, Direction dir) {} +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java index f44424c3..07b9917e 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynEggPatchFeature.java @@ -1,23 +1,33 @@ package com.craisinlord.antarchy.content.worldgen.cavaryn; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import com.craisinlord.antarchy.content.block.CreepingHorrorEggBlock; import com.craisinlord.antarchy.content.block.LurkingTerrorEggBlock; import com.mojang.serialization.Codec; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; public final class CavarynEggPatchFeature extends Feature { + private static final ResourceLocation AMBER_MOSS_BLOCK_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_moss_block"); private static final int SEARCH_RADIUS = 8; - private static final int SEARCH_ATTEMPTS = 20; - private static final int FLOOR_SCAN_RANGE = 10; + private static final int SEARCH_ATTEMPTS = 24; + private static final int VERTICAL_SCAN = 12; + private static final int MAX_RADIUS_Y = 3; public CavarynEggPatchFeature(Codec codec) { super(codec); @@ -29,77 +39,118 @@ public final class CavarynEggPatchFeature extends Feature= Math.max(level.getMinBuildHeight() + 1, startY - FLOOR_SCAN_RANGE); y--) { - mutable.set(x, y, z); - BlockState floorState = level.getBlockState(mutable); - BlockState airState = level.getBlockState(mutable.above()); - if (floorState.getFluidState().isEmpty() - && floorState.blocksMotion() - && floorState.isFaceSturdy(level, mutable, Direction.UP) - && airState.canBeReplaced()) { - return mutable.immutable(); - } + mutable.set(x, y, z); + if (isSolidEnoughForCavity(level, mutable)) { + return mutable.immutable(); } } - return null; } - private boolean placePatch(WorldGenLevel level, BlockPos center, RandomSource random, EggType eggType) { - int radius = 2 + random.nextInt(3); - boolean placedAny = false; - List eggSpots = new java.util.ArrayList<>(); + private static boolean isSolidEnoughForCavity(WorldGenLevel level, BlockPos center) { + BlockState centerState = level.getBlockState(center); + if (!centerState.blocksMotion() || centerState.is(Blocks.BEDROCK)) { + return false; + } - for (int dx = -radius; dx <= radius; dx++) { - for (int dz = -radius; dz <= radius; dz++) { - double distance = dx * dx + dz * dz; - if (distance > radius * radius + random.nextInt(2)) { - continue; + int solidCount = 0; + BlockPos.MutableBlockPos mutable = new BlockPos.MutableBlockPos(); + for (int dx = -2; dx <= 2; dx += 2) { + for (int dy = -1; dy <= 1; dy++) { + for (int dz = -2; dz <= 2; dz += 2) { + mutable.set(center.getX() + dx, center.getY() + dy, center.getZ() + dz); + if (level.getBlockState(mutable).blocksMotion()) { + solidCount++; + } } + } + } + return solidCount >= 9; + } - BlockPos floorPos = center.offset(dx, 0, dz); - BlockState floorState = level.getBlockState(floorPos); - BlockPos eggPos = floorPos.above(); - BlockState aboveState = level.getBlockState(eggPos); - if (!isValidEggFloor(level, floorPos, floorState, aboveState)) { - continue; + private boolean carveCavityAndPlaceEggs(WorldGenLevel level, BlockPos center, RandomSource random, EggType eggType, Block amberMossBlock) { + int rx = 3 + random.nextInt(3); + int ry = 2 + random.nextInt(2); + int rz = 3 + random.nextInt(3); + + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + double norm = (double)(dx * dx) / (rx * rx) + + (double)(dy * dy) / (ry * ry) + + (double)(dz * dz) / (rz * rz); + if (norm > 1.0) { + continue; + } + BlockPos pos = center.offset(dx, dy, dz); + BlockState existing = level.getBlockState(pos); + if (!existing.is(Blocks.BEDROCK) && existing.blocksMotion() && existing.getFluidState().isEmpty()) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), 2); + } } - eggSpots.add(eggPos); } } - if (eggSpots.isEmpty()) { - return placedAny; + List eggPositions = new ArrayList<>(); + for (int dx = -rx; dx <= rx; dx++) { + for (int dy = -ry - 1; dy <= ry; dy++) { + for (int dz = -rz; dz <= rz; dz++) { + BlockPos pos = center.offset(dx, dy, dz); + if (!level.getBlockState(pos).isAir()) { + continue; + } + BlockPos below = pos.below(); + BlockState belowState = level.getBlockState(below); + if (belowState.blocksMotion() && !belowState.isAir() && belowState.isFaceSturdy(level, below, Direction.UP)) { + eggPositions.add(pos); + } + } + } } - int eggCount = Math.min(eggSpots.size(), 2 + random.nextInt(3)); - for (int i = 0; i < eggCount; i++) { - BlockPos eggPos = eggSpots.get(random.nextInt(eggSpots.size())); - if (!level.getBlockState(eggPos).canBeReplaced()) { + if (eggPositions.isEmpty()) { + return false; + } + + boolean placedAny = false; + for (BlockPos eggPos : eggPositions) { + if (random.nextFloat() > 0.65f) { continue; } + // Replace the floor block with amber moss so eggs hatch faster + if (amberMossBlock != null) { + BlockPos floorPos = eggPos.below(); + BlockState floorState = level.getBlockState(floorPos); + if (floorState.blocksMotion() && !floorState.is(Blocks.BEDROCK) && floorState.getFluidState().isEmpty()) { + level.setBlock(floorPos, amberMossBlock.defaultBlockState(), 2); + } + } + BlockState eggState = eggType == EggType.CREEPING_HORROR ? AntarchyObjects.CREEPING_HORROR_EGGS.get().defaultBlockState() : AntarchyObjects.LURKING_TERROR_EGGS.get().defaultBlockState(); - eggState = eggState.setValue(eggType == EggType.CREEPING_HORROR ? CreepingHorrorEggBlock.EGGS : LurkingTerrorEggBlock.EGGS, 1 + random.nextInt(4)); + eggState = eggState.setValue( + eggType == EggType.CREEPING_HORROR ? CreepingHorrorEggBlock.EGGS : LurkingTerrorEggBlock.EGGS, + 1 + random.nextInt(4)); level.setBlock(eggPos, eggState, 3); placedAny = true; } @@ -107,12 +158,9 @@ public final class CavarynEggPatchFeature extends Feature block = BuiltInRegistries.BLOCK.getOptional(id); + return block.orElse(null); } private enum EggType { diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 8940673d..545bfb05 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -118,12 +118,15 @@ public class ElythiaBiomeSource extends BiomeSource { // and ambient effects work correctly above the water surface. Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { - return this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); + Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); + // MultiNoise can return a land biome at sea-level depth — force ocean if so + if (isOceanBiome(seaLevelBiome)) return seaLevelBiome; + return oceanHolder != null ? oceanHolder : seaLevelBiome; } - // Land column below or at sea level: force ocean for any biome not allowed there. - // Use <= so quart 19 (blocks 76-79, partly underwater) is covered. - if (y <= this.seaLevelQuartY && oceanHolder != null && !allowedBelowSeaLevel(biome)) { + // Land column at or below sea level: force ocean for any biome not allowed there. + // +1 quart above seaLevelQuartY so blocks 76-83 (around the waterline) are all caught. + if (y <= this.seaLevelQuartY + 1 && oceanHolder != null && !allowedBelowSeaLevel(biome)) { return oceanHolder; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java new file mode 100644 index 00000000..78ba675b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -0,0 +1,144 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.craisinlord.antarchy.content.AntarchyObjects; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class FallenOuranwoodFeature extends Feature { + + public FallenOuranwoodFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + Direction.Axis axis = random.nextBoolean() ? Direction.Axis.X : Direction.Axis.Z; + int length = 36 + random.nextInt(44); // 36–79 blocks long + int outerRadius = 1 + random.nextInt(3); // 1–3 (cross-section up to 7-wide) + boolean hollow = outerRadius >= 2; + + Block ouranwoodLog = BuiltInRegistries.BLOCK.getOptional( + ResourceLocation.fromNamespaceAndPath("antarchy", "ouranwood_log")) + .orElse(AntarchyObjects.MOSSY_OURANWOOD_LOG.get()); + + BlockState mossyLogState = AntarchyObjects.MOSSY_OURANWOOD_LOG.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + BlockState freshLogState = ouranwoodLog.defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, axis); + BlockState woodState = AntarchyObjects.MOSSY_OURANWOOD_WOOD.get().defaultBlockState() + .setValue(RotatedPillarBlock.AXIS, Direction.Axis.Y); + + // Pre-generate a smoothed damage profile along the length (0=solid, 1=gap) + float[] damage = new float[length]; + for (int i = 0; i < length; i++) damage[i] = random.nextFloat(); + for (int pass = 0; pass < 4; pass++) { + for (int i = 1; i < length - 1; i++) { + damage[i] = (damage[i - 1] + damage[i] * 2 + damage[i + 1]) / 4f; + } + } + // Bias upward so more sections are heavily damaged + for (int i = 0; i < length; i++) damage[i] = damage[i] * damage[i]; + + int anchorY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, origin.getX(), origin.getZ()); + boolean placed = false; + + for (int step = 0; step < length; step++) { + int bx = axis == Direction.Axis.X ? origin.getX() + step : origin.getX(); + int bz = axis == Direction.Axis.Z ? origin.getZ() + step : origin.getZ(); + + float dmg = damage[step]; + + // Full gap sections — log has completely rotted through here + if (dmg > 0.78f) continue; + + int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz); + int centerY = Math.max(anchorY, Math.min(anchorY + 2, surfaceY)) + outerRadius; + + for (int dy = -outerRadius; dy <= outerRadius; dy++) { + for (int dp = -outerRadius; dp <= outerRadius; dp++) { + double dist = Math.sqrt(dy * dy + dp * dp); + if (dist > outerRadius + 0.5) continue; + + boolean isShell = dist >= outerRadius - 0.5; + + // Hollow interior: always skip center when hollow + if (hollow && dist < outerRadius - 0.5) continue; + + // Heavy-damage sections: only keep fragments of the shell + if (dmg > 0.55f && !isShell) continue; + if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) continue; + + // All sections: random rot holes punched through the shell + if (isShell && random.nextFloat() < dmg * 0.4f) continue; + + int px = axis == Direction.Axis.X ? bx : bx + dp; + int pz = axis == Direction.Axis.Z ? bz : bz + dp; + BlockPos pos = new BlockPos(px, centerY + dy, pz); + + if (!canReplace(level.getBlockState(pos))) continue; + + // Block material mix: mostly mossy log, some fresh log patches, some moss + float r = random.nextFloat(); + BlockState toPlace; + if (r < 0.08f) { + toPlace = Blocks.MOSS_BLOCK.defaultBlockState(); + } else if (r < 0.22f) { + toPlace = freshLogState; // fresher wood, less decayed patch + } else if (r < 0.32f) { + toPlace = woodState; + } else { + toPlace = mossyLogState; + } + + level.setBlock(pos, toPlace, 2); + placed = true; + } + } + } + + // Moss patches scattered along the log's footprint + int mossCount = 20 + random.nextInt(25); + for (int i = 0; i < mossCount; i++) { + int mx = origin.getX() + random.nextInt(length + 6) - 3; + int mz = axis == Direction.Axis.X + ? origin.getZ() + random.nextInt(9) - 4 + : origin.getZ() + random.nextInt(length + 6) - 3; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz); + BlockPos mossPos = new BlockPos(mx, my, mz); + + if (!canReplace(level.getBlockState(mossPos))) continue; + BlockState below = level.getBlockState(mossPos.below()); + if (!below.isFaceSturdy(level, mossPos.below(), Direction.UP)) continue; + + level.setBlock(mossPos, + random.nextFloat() < 0.35f + ? Blocks.MOSS_BLOCK.defaultBlockState() + : Blocks.MOSS_CARPET.defaultBlockState(), + 2); + } + + return placed; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() || (state.getBlock() instanceof LeavesBlock); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java new file mode 100644 index 00000000..f671b975 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -0,0 +1,190 @@ +package com.craisinlord.antarchy.content.worldgen.elythia; + +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.HugeMushroomBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +public class FungalMushroomFeature extends Feature { + + public FungalMushroomFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + RandomSource random = context.random(); + BlockPos origin = context.origin(); + + boolean isRed = random.nextBoolean(); + Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK; + Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM; + + // 1-in-3 chance of a large mushroom (~3x the small variant) + boolean isLarge = random.nextInt(3) == 0; + + int stemSize = isLarge ? (2 + random.nextInt(3)) : (random.nextBoolean() ? 2 : 3); + int stemHeight = isLarge ? (18 + random.nextInt(19)) : (6 + random.nextInt(7)); // large: 18–36, small: 6–12 + + // Lean: stem drifts in a random horizontal direction over its height + double leanAngle = random.nextDouble() * Math.PI * 2; + double leanDX = Math.cos(leanAngle); + double leanDZ = Math.sin(leanAngle); + double maxLean = isLarge + ? (6.0 + random.nextDouble() * 10.0) // large: 6–16 block lean + : (2.0 + random.nextDouble() * 3.5); // small: 2–5.5 block lean + + int baseY = origin.getY(); + int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin + + // Pore-only stem state (inner faces; sides visible from outside) + BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, false) + .setValue(HugeMushroomBlock.SOUTH, false) + .setValue(HugeMushroomBlock.EAST, false) + .setValue(HugeMushroomBlock.WEST, false) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + BlockState stemSide = Blocks.MUSHROOM_STEM.defaultBlockState() + .setValue(HugeMushroomBlock.NORTH, true) + .setValue(HugeMushroomBlock.SOUTH, true) + .setValue(HugeMushroomBlock.EAST, true) + .setValue(HugeMushroomBlock.WEST, true) + .setValue(HugeMushroomBlock.UP, false) + .setValue(HugeMushroomBlock.DOWN, false); + + // Place leaning stem + for (int dy = 0; dy < stemHeight; dy++) { + double leanProgress = (double) dy / stemHeight; + int leanX = (int) Math.round(leanDX * maxLean * leanProgress); + int leanZ = (int) Math.round(leanDZ * maxLean * leanProgress); + + for (int dx = 0; dx < stemSize; dx++) { + for (int dz = 0; dz < stemSize; dz++) { + BlockPos pos = new BlockPos( + origin.getX() + stemOffset + dx + leanX, + baseY + dy, + origin.getZ() + stemOffset + dz + leanZ); + if (canReplace(level.getBlockState(pos))) { + // Outer ring shows bark, interior is pores + boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); + level.setBlock(pos, isEdge ? stemSide : stemPore, 2); + } + } + } + } + + // Cap: cone-shaped, follows the lean, with irregular per-block radius noise + double capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean; + double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean; + int capTopY = baseY + stemHeight; + int baseCapRadius = isLarge + ? (stemSize + 7 + random.nextInt(6)) // large: ~11–18 at base + : (stemSize + 2 + random.nextInt(2)); // small: 4–6 at base + + // Per-position radius jitter table — sampled before the loop for consistency + // Each (dx, dz) slot gets a random ±1.5 bias baked in + int jitterRange = baseCapRadius + 4; + float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1]; + for (float[] row : jitter) { + for (int j = 0; j < row.length; j++) { + row[j] = random.nextFloat() * 3.0f - 1.5f; // ±1.5 blocks + } + } + + int capLayers = baseCapRadius + 2; + for (int cl = 0; cl < capLayers; cl++) { + int capY = capTopY + cl; + double nomRadius = baseCapRadius - cl; + if (nomRadius < 0) break; + + // The cap center also shifts slightly with lean for a drooping overhang feel + double layerCapX = capCenterX + leanDX * cl * 0.3; + double layerCapZ = capCenterZ + leanDZ * cl * 0.3; + + for (int dx = -(jitterRange); dx <= jitterRange; dx++) { + for (int dz = -(jitterRange); dz <= jitterRange; dz++) { + double dist = Math.sqrt( + (origin.getX() + dx - layerCapX) * (origin.getX() + dx - layerCapX) + + (origin.getZ() + dz - layerCapZ) * (origin.getZ() + dz - layerCapZ)); + + float j = jitter[dx + jitterRange][dz + jitterRange]; + double effectiveRadius = nomRadius + j; + + if (dist > effectiveRadius + 0.5) continue; + if (effectiveRadius < 0) continue; + + BlockPos capPos = new BlockPos(origin.getX() + dx, capY, origin.getZ() + dz); + if (!canReplace(level.getBlockState(capPos))) continue; + + boolean isOuter = dist >= effectiveRadius - 0.7; + boolean isTop = cl == capLayers - 1; + + BlockState capState = capBlock.defaultBlockState() + .setValue(HugeMushroomBlock.UP, isTop || isOuter) + .setValue(HugeMushroomBlock.NORTH, isOuter) + .setValue(HugeMushroomBlock.SOUTH, isOuter) + .setValue(HugeMushroomBlock.EAST, isOuter) + .setValue(HugeMushroomBlock.WEST, isOuter) + .setValue(HugeMushroomBlock.DOWN, false); + + level.setBlock(capPos, capState, 2); + } + } + } + + // Mycelium patches around base + int myceliumCount = isLarge ? (25 + random.nextInt(25)) : (12 + random.nextInt(12)); + for (int i = 0; i < myceliumCount; i++) { + int radius = isLarge ? (stemSize + 8 + random.nextInt(8)) : (stemSize + 3 + random.nextInt(3)); + int mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int mz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1; + BlockPos myceliumPos = new BlockPos(mx, my, mz); + + BlockState existing = level.getBlockState(myceliumPos); + if (existing.is(Blocks.GRASS_BLOCK) || existing.is(Blocks.DIRT) + || existing.is(Blocks.MOSS_BLOCK) || existing.is(Blocks.ROOTED_DIRT)) { + level.setBlock(myceliumPos, Blocks.MYCELIUM.defaultBlockState(), 2); + } + } + + // Small mushrooms scattered around + int smallCount = isLarge ? (10 + random.nextInt(15)) : (5 + random.nextInt(8)); + for (int i = 0; i < smallCount; i++) { + int radius = isLarge ? (stemSize + 10 + random.nextInt(10)) : (stemSize + 4 + random.nextInt(4)); + int sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; + int sz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; + int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz); + BlockPos smallPos = new BlockPos(sx, sy, sz); + + if (!canReplace(level.getBlockState(smallPos))) continue; + BlockState below = level.getBlockState(smallPos.below()); + if (!below.isFaceSturdy(level, smallPos.below(), Direction.UP)) continue; + + Block plant = random.nextBoolean() ? smallMushroom + : (isRed ? Blocks.BROWN_MUSHROOM : Blocks.RED_MUSHROOM); + BlockState plantState = plant.defaultBlockState(); + if (plantState.canSurvive(level, smallPos)) { + level.setBlock(smallPos, plantState, 2); + } + } + + return true; + } + + private static boolean canReplace(BlockState state) { + return state.isAir() || state.canBeReplaced() + || (state.getBlock() instanceof net.minecraft.world.level.block.LeavesBlock); + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json b/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json new file mode 100644 index 00000000..1ab1a4b4 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/bile_vein.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/bile_vein" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 95dd34f6..752948e3 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -27,6 +27,7 @@ "block.antarchy.amber_moss_block": "Amber Moss Block", "block.antarchy.amber_moss_carpet": "Amber Moss Carpet", "block.antarchy.amber_lichen": "Amber Lichen", + "block.antarchy.bile_vein": "Bile Vein", "block.antarchy.duplicator_sapling": "Duplicator Sapling", "block.antarchy.creepvine": "Creepvine", "block.antarchy.duct_tape": "Duct Tape", @@ -272,6 +273,7 @@ "item.antarchy.amber_moss_block": "Amber Moss Block", "item.antarchy.amber_moss_carpet": "Amber Moss Carpet", "item.antarchy.amber_lichen": "Amber Lichen", + "item.antarchy.bile_vein": "Bile Vein", "item.antarchy.creepvine": "Creepvine", "item.antarchy.chiten": "Chiten", "item.antarchy.chiten_block": "Chiten Block", @@ -416,6 +418,7 @@ "message.antarchy.big_bertha.mode.nightmare": "Nightmare", "message.antarchy.big_bertha.mode.kraken": "Kraken", "message.antarchy.big_bertha.mode.molevore": "Molevore", + "message.antarchy.big_bertha.mode.toreterror": "Toreterror", "message.antarchy.ultimate_tool.mode_3x3": "Switched to 3x3 Mining", "message.antarchy.ultimate_tool.mode_default": "Switched to Default Mining", "advancements.antarchy.hey_listen.title": "Hey Listen", @@ -442,6 +445,7 @@ "tooltip.antarchy.big_bertha.mode.nightmare": "Players suffer Dread; hits inflict weakness.", "tooltip.antarchy.big_bertha.mode.kraken": "Hits slam targets back and call lightning.", "tooltip.antarchy.big_bertha.mode.molevore": "Right-click to spin forward and drill through Molevore blocks.", + "tooltip.antarchy.big_bertha.mode.toreterror": "Right-click to launch into the air and crash down with an AOE shockwave.", "tooltip.antarchy.ultimate_tools_3x3": "Shift-right-click to toggle 3x3 Mining.", "tooltip.antarchy.moggles.reveal": "Gives night vision and points to nearby caves.", "tooltip.antarchy.moggles.underground": "Works only while you have no sky access.", diff --git a/common/src/main/resources/assets/antarchy/models/block/bile_vein.json b/common/src/main/resources/assets/antarchy/models/block/bile_vein.json new file mode 100644 index 00000000..1bbd5a7f --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/bile_vein.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/bile/bile_vein" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/bile_vein.json b/common/src/main/resources/assets/antarchy/models/item/bile_vein.json new file mode 100644 index 00000000..1a1067eb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/bile_vein.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/bile_vein" +} diff --git a/common/src/main/resources/assets/antarchy/particles/stinky_fly.json b/common/src/main/resources/assets/antarchy/particles/stinky_fly.json new file mode 100644 index 00000000..516d8df2 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/particles/stinky_fly.json @@ -0,0 +1,5 @@ +{ + "textures": [ + "antarchy:stinky_fly" + ] +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png new file mode 100644 index 0000000000000000000000000000000000000000..2a99d09cf9fbf26bcf71d372d542d3d95e9ade50 GIT binary patch literal 954 zcmV;r14aCaP)v|9-@sS!sof|jf{GMD&=%~b{$GZpbE_3jC&`?X zNoLaDj;GJ-B6#)subtTAXLS)IW_|H;a>uo!`t$Gon`w#x@BFL^*uT!Jf-j$|aE1-W zisNI^N!Tq1%;@}i{YKT#EqNzkeEVJ%d_9?)sQ2$xA+uq>tGc;~*)WKerOe>RmQ2jv z>1oyNTU8Pfs#H9jfk-G@%C#njtRjiD#wW&yZh=9xt|{9AKqv`&ZNv5OQI&BQ2k~x!m;)|T z61EmXR2}fOX-^x2c)yJ&fs5oz!be8527HN#>3R<05D7}eMz*ISHi!eBy>5Xc=%TE! zlKIHiKt*&t2ML~hsQw+d35lmANdotP(-nAIj#HHzh#4;Tl4MpfFNNO;TndrwP7A~c z{3=_4n9$ttdyrOPPP0mc>@-OtHZR0u5Ps~1UR}jY~ zA@C#OM`&JvZy&Fp(X)70^B{@LNUPYG=XD6l3ZPz~6F@UnIbaa>evVuHXS zv8}4I_8c(42h*BOwmSi~B!O4M>k1ev)(g}U@nsl1Rdxb~J_AoFCaLK}P6928#qU8< zmNHiuE(sA$9}!3@P6Pk_9uR?q$evVNs^W_SPPf3&tDrSLTZ~8&C-UtFJqICLZDd_- z6=)%QS-S!ockUkk@kAWBI2Bw@Lf3PU-jpgxKx~CvTwVtU==v4hxZXgJz*pD`5=$iJ zMfi9QIrw!JkPJb|NNi$bp6>zQh2r-eFr1!?VG}wX*?ztU8TZ6H0U;m)TaPYH5;0#Z z$jM^tfxO>wtE_xt<-4?0A`#fbCdThMh+{*LD0X}a!Jb6obiV-r0RR8RfQ7RF000I_ cL_t&o0Q!3#ggJ>~`Tzg`07*qoM6N<$f>Y?O%>V!Z literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta new file mode 100644 index 00000000..b44a2ee6 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/bile/bile_vein.png.mcmeta @@ -0,0 +1,16 @@ +{ + "animation": { + "frametime": 16, + "interpolate": true, + "frames": [ + 0, + 1, + 0, + 2, + 0, + 1, + 2, + 1 + ] + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png b/common/src/main/resources/assets/antarchy/textures/block/broodstone/broodstone.png new file mode 100644 index 0000000000000000000000000000000000000000..19504eca97716a0cca9b4f26292bfdea10cb744d GIT binary patch literal 468 zcmV;_0W1EAP)~2FhW+n!&Ya}6gbr{3$X|O zyoFJT3FR^rF}f3{UQhRm?rd0KCQOpz#GIyc3Y@T@y6)S`-H7hSMN}9$I(Cc8BCLf4 zBuNRUx9<72Ou-T?Eox8+gd~zqPRlg~dvb8QO0l;_@g*Xuj7Vg|iog^i^p?+^;mOB$ z@bbJa2_TzD5#0!NBW4Tt|IXr5Mpli$Sje%s{^ox|abiMT96=Kkco6HXn>UeDq}UxN zi^pGq$4ux9BoJB5wvz*6%idtW00030|F4K#=l}o!21!IgR09A9_aWC07GxFx0000< KMNUMnLSTY#AYgr+Ar*{QP8kX^Fz_65=#u)g z`k-&M=>flM{HnT6TWk*=Y{?fr%*ep-|G)6uEmlA+Y#=Sn3}>#e2=Xm;It3JA@O1Ta JS?83{1OPzxAH)Cv literal 0 HcmV?d00001 diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json b/common/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json new file mode 100644 index 00000000..32eb33c8 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/bile_vein.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:bile_vein" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/bile_vein" +} diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json index 0a5093bc..723be7ad 100644 --- a/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/biome/cavaryn.json @@ -37,11 +37,10 @@ [], [], [ - "antarchy:cavaryn_bile_pools", - "antarchy:cavaryn_amber_moss_patch", + "antarchy:cavaryn_bile_veins", + "antarchy:cavaryn_bile_cysts", "antarchy:cavaryn_wall_amber_moss", "antarchy:cavaryn_creepvine", - "minecraft:glow_lichen", "antarchy:cavaryn_chiten_spikes", "antarchy:cavaryn_terror_egg_patch" ], @@ -63,15 +62,16 @@ "maxCount": 5 } ], - "creature": [], - "ambient": [ + "creature": [ { - "type": "minecraft:bat", + "type": "antarchy:stink_bug", "weight": 10, - "minCount": 4, - "maxCount": 8 + "minCount": 1, + "maxCount": 3 } ], + "ambient": [ + ], "axolotls": [], "underground_water_creature": [], "water_creature": [], diff --git a/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json new file mode 100644 index 00000000..56fe8dc0 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/biome/fungal_ouranwood_forest.json @@ -0,0 +1,102 @@ +{ + "has_precipitation": false, + "temperature": 0.78, + "downfall": 0.95, + "effects": { + "fog_color": 8084735, + "water_color": 5021432, + "water_fog_color": 2502722, + "sky_color": 8084735, + "foliage_color": 2867501, + "grass_color": 4304168, + "grass_color_modifier": "none", + "particle": { + "probability": 0.009, + "options": { + "type": "minecraft:spore_blossom_air" + } + }, + "mood_sound": { + "sound": "minecraft:ambient.crimson_forest.mood", + "tick_delay": 6000, + "block_search_extent": 8, + "offset": 2.0 + } + }, + "spawn_costs": {}, + "carvers": { + "air": [], + "liquid": [] + }, + "features": [ + [], + [], + [], + [], + [], + [], + [ + "minecraft:ore_coal_upper", + "minecraft:ore_coal_lower", + "minecraft:ore_iron_upper", + "minecraft:ore_iron_middle", + "minecraft:ore_iron_small", + "minecraft:ore_gold", + "minecraft:ore_gold_lower", + "minecraft:ore_redstone", + "minecraft:ore_redstone_lower", + "minecraft:ore_diamond", + "minecraft:ore_diamond_medium", + "minecraft:ore_diamond_large", + "minecraft:ore_diamond_buried", + "minecraft:ore_lapis", + "minecraft:ore_lapis_buried", + "minecraft:ore_copper" + ], + [ + "antarchy:elythia_underground", + "minecraft:large_dripstone", + "minecraft:pointed_dripstone" + ], + [], + [ + "antarchy:ouranwood_trees_sparse", + "antarchy:elythia_forest_flora", + "antarchy:elythia_brown_ant_nests", + "antarchy:fallen_ouranwood_tree", + "antarchy:fungal_mushroom" + ], + [] + ], + "creature_spawn_probability": 0.07, + "spawners": { + "monster": [], + "creature": [ + { + "type": "antarchy:caterpillar", + "weight": 5, + "minCount": 1, + "maxCount": 2 + }, + { + "type": "antarchy:flying_squirrel", + "weight": 2, + "minCount": 1, + "maxCount": 2 + } + ], + "ambient": [ + { + "type": "antarchy:butterfly", + "weight": 7, + "minCount": 1, + "maxCount": 2 + } + ], + "axolotls": [], + "underground_water_creature": [], + "water_creature": [], + "water_ambient": [], + "misc": [] + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json new file mode 100644 index 00000000..1616e268 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_cysts.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_bile_cysts", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json deleted file mode 100644 index e5a8f052..00000000 --- a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_pools.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "type": "antarchy:cavaryn_bile_pools", - "config": {} -} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json new file mode 100644 index 00000000..6a2a5e5d --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/cavaryn_bile_veins.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:cavaryn_bile_veins", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json new file mode 100644 index 00000000..5c93038c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fallen_ouranwood_tree.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fallen_ouranwood_tree", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json new file mode 100644 index 00000000..5c113be3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/fungal_mushroom.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:fungal_mushroom", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json index 6a197ae1..9fd2adce 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/cavaryn.json @@ -2,7 +2,7 @@ "sea_level": 32, "disable_mob_generation": false, "aquifers_enabled": true, - "ore_veins_enabled": true, + "ore_veins_enabled": false, "legacy_random_source": false, "default_block": { "Name": "antarchy:myrmite" @@ -99,73 +99,9 @@ } } }, - "vein_toggle": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 208, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_veininess", - "xz_scale": 1.5, - "y_scale": 1.5 - }, - "when_out_of_range": 0 - } - }, - "vein_ridged": { - "type": "minecraft:add", - "argument1": -0.07999999821186066, - "argument2": { - "type": "minecraft:max", - "argument1": { - "type": "minecraft:abs", - "argument": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 208, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_a", - "xz_scale": 4, - "y_scale": 4 - }, - "when_out_of_range": 0 - } - } - }, - "argument2": { - "type": "minecraft:abs", - "argument": { - "type": "minecraft:interpolated", - "argument": { - "type": "minecraft:range_choice", - "input": "minecraft:y", - "min_inclusive": 0, - "max_exclusive": 208, - "when_in_range": { - "type": "minecraft:noise", - "noise": "minecraft:ore_vein_b", - "xz_scale": 4, - "y_scale": 4 - }, - "when_out_of_range": 0 - } - } - } - } - }, - "vein_gap": { - "type": "minecraft:noise", - "noise": "minecraft:ore_gap", - "xz_scale": 1, - "y_scale": 1 - } + "vein_toggle": 0, + "vein_ridged": 0, + "vein_gap": 0 }, "spawn_target": [ { diff --git a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json index 0b3e9e86..3c660ef9 100644 --- a/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json +++ b/common/src/main/resources/data/antarchy/worldgen/noise_settings/elythia.json @@ -430,7 +430,7 @@ }, "then_run": { "type": "minecraft:block", - "result_state": { "Name": "minecraft:gravel" } + "result_state": { "Name": "minecraft:sand" } } } }, @@ -511,7 +511,7 @@ }, "then_run": { "type": "minecraft:block", - "result_state": { "Name": "minecraft:gravel" } + "result_state": { "Name": "minecraft:sand" } } }, { diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json similarity index 90% rename from common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json rename to common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json index f7f99b3a..4a0cdc9f 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_pools.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_cysts.json @@ -1,5 +1,5 @@ { - "feature": "antarchy:cavaryn_bile_pools", + "feature": "antarchy:cavaryn_bile_cysts", "placement": [ { "type": "minecraft:count", diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json new file mode 100644 index 00000000..ffd3ef6c --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_bile_veins.json @@ -0,0 +1,27 @@ +{ + "feature": "antarchy:cavaryn_bile_veins", + "placement": [ + { + "type": "minecraft:count", + "count": 5 + }, + { + "type": "minecraft:in_square" + }, + { + "type": "minecraft:height_range", + "height": { + "type": "minecraft:uniform", + "min_inclusive": { + "above_bottom": 8 + }, + "max_inclusive": { + "below_top": 16 + } + } + }, + { + "type": "minecraft:biome" + } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json index 053fcd8a..01c6693b 100644 --- a/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/cavaryn_terror_egg_patch.json @@ -3,7 +3,7 @@ "placement": [ { "type": "minecraft:count", - "count": 2 + "count": 1 }, { "type": "minecraft:in_square" diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json new file mode 100644 index 00000000..de592a7f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fallen_ouranwood_tree.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:fallen_ouranwood_tree", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 5 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json new file mode 100644 index 00000000..a720f1e1 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/fungal_mushroom.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:fungal_mushroom", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 4 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "WORLD_SURFACE_WG" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json index 71f8d9f6..3abcdbf5 100644 --- a/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json +++ b/common/src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json @@ -37,6 +37,7 @@ "antarchy:nyxite_brick_slab", "antarchy:nyxite_brick_wall", "antarchy:myrmite", + "antarchy:bile_vein", "antarchy:chiten_block", "antarchy:chiten_spike", "antarchy:shellstone", diff --git a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json index 05865e45..33cea4cb 100644 --- a/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json +++ b/common/src/main/resources/data/minecraft/tags/block/needs_stone_tool.json @@ -19,6 +19,7 @@ "antarchy:shellstone_brick_stairs", "antarchy:shellstone_brick_slab", "antarchy:shellstone_brick_wall", - "antarchy:chiten_block" + "antarchy:chiten_block", + "antarchy:bile_vein" ] } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java index 6e6147d5..c28299ce 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -19,7 +19,8 @@ import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBilePoolFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; import com.craisinlord.antarchy.content.worldgen.thoraxis.NyxiteSpikeConfiguration; @@ -612,13 +613,17 @@ public final class AntarchyFabricContent { public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", - () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 0))); + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 1))); + public static final DeferredBlock BILE_VEIN = BLOCKS.register("bile_vein", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK))); public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", () -> new VineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.VINE))); public static final DeferredHolder, SimpleParticleType> DREAM_FIRE_FLAME = PARTICLE_TYPES.register("dream_fire_flame", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", () -> simpleParticleType()); + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> simpleParticleType()); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -1060,8 +1065,10 @@ public final class AntarchyFabricContent { () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); - public static final DeferredHolder, CavarynBilePoolFeature> CAVARYN_BILE_POOLS = FEATURES.register("cavaryn_bile_pools", - () -> new CavarynBilePoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", + () -> new CavarynBileVeinFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynBileCystFeature> CAVARYN_BILE_CYSTS = FEATURES.register("cavaryn_bile_cysts", + () -> new CavarynBileCystFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynCreepvineFeature> CAVARYN_CREEPVINE = FEATURES.register("cavaryn_creepvine", () -> new CavarynCreepvineFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynWallAmberMossFeature> CAVARYN_WALL_AMBER_MOSS = FEATURES.register("cavaryn_wall_amber_moss", @@ -1226,6 +1233,7 @@ public final class AntarchyFabricContent { public static final DeferredItem AMBER_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AMBER_MOSS_BLOCK); public static final DeferredItem AMBER_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AMBER_MOSS_CARPET); public static final DeferredItem AMBER_LICHEN_ITEM = ITEMS.registerSimpleBlockItem(AMBER_LICHEN); + public static final DeferredItem BILE_VEIN_ITEM = ITEMS.registerSimpleBlockItem(BILE_VEIN); public static final DeferredItem CREEPVINE_ITEM = ITEMS.registerSimpleBlockItem(CREEPVINE); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(DREAM_TORCH.get(), DREAM_WALL_TORCH.get(), new Item.Properties(), Direction.UP)); @@ -1994,6 +2002,7 @@ public final class AntarchyFabricContent { "chiseled_titanium", "uranium_bulb", "titanium_bulb", "uranium_door", "titanium_door", "uranium_trapdoor", "titanium_trapdoor", "uranium_bars", "titanium_bars" -> 8; + case "bile_vein" -> 9; case "infested_rooted_dirt", "infested_coarse_dirt", "triffid_goo_block", "cloud_block", "creeping_horror_egg", "lurking_terror_egg" -> 9; case "dream_torch", "dream_lantern", "dream_campfire", "dream_fire", "dream_fire_ceiling" -> 10; @@ -2493,6 +2502,7 @@ public final class AntarchyFabricContent { () -> WASP_NEST_BLOCK_ENTITY.get(), () -> HUSHWEED_BLOCK_ENTITY.get(), () -> STINKY_GAS.get(), + () -> STINKY_FLY.get(), () -> attributeHolder(DOUBLE_DAMAGE_CHANCE), () -> attributeHolder(BLOODGLASS_MAX_HEARTS), () -> mobEffectHolder(BLOODGLASS_WARD) 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 bf0241bb..04d4786e 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 @@ -181,6 +181,7 @@ public final class AntarchyFabricClientBootstrap { ParticleFactoryRegistry registry = ParticleFactoryRegistry.getInstance(); registry.register(AntarchyFabricContent.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); registry.register(AntarchyFabricContent.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + registry.register(AntarchyFabricContent.STINKY_FLY.get(), FireflyParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); registry.register(AntarchyFabricContent.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -209,6 +210,7 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.AMBER_MOSS_CARPET.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.AMBER_LICHEN.get(), RenderType.cutout()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.BILE_VEIN.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CREEPVINE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.NYXITE_SPIKE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CHITEN_SPIKE.get(), RenderType.cutout()); diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java index 472d9277..c96f551f 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/AntimetalScaffoldingMixin.java @@ -77,7 +77,7 @@ public abstract class AntimetalScaffoldingMixin { BlockState below = level.getBlockState(cursor); int distance = 7; if (below.is((ScaffoldingBlock) (Object) this)) { - distance = below.getValue(ScaffoldingBlock.DISTANCE); + distance = below.getValue(ScaffoldingBlock.DISTANCE) + 1; } else if (below.isFaceSturdy(level, cursor, Direction.UP)) { return 0; } diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java index 5a041348..8e2a362a 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/mixin/client/ToreterrorCameraShakeMixin.java @@ -1,6 +1,7 @@ package com.craisinlord.antarchy.fabric.mixin.client; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.item.BigBerthaItem; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.math.Axis; import net.minecraft.client.Minecraft; @@ -17,6 +18,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(GameRenderer.class) public abstract class ToreterrorCameraShakeMixin { private static final double MAX_SHAKE_RANGE = 48.0D; + private static final int TORETERROR_SHAKE_TICKS = 25; @Shadow @Final private Minecraft minecraft; @@ -37,6 +39,10 @@ public abstract class ToreterrorCameraShakeMixin { shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 2.0F); } + if (BigBerthaItem.clientShakeTicks > 0) { + shakeStrength += (float) BigBerthaItem.clientShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + if (shakeStrength <= 0.0F) return; float time = (float) (minecraft.player.tickCount + partialTick); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java index b8869f66..4af30751 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -250,6 +250,7 @@ public class AntarchyNeoforge { () -> AntarchyNeoforgeBlocks.WASP_NEST_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeBlocks.HUSHWEED_BLOCK_ENTITY.get(), () -> AntarchyNeoforgeMisc.STINKY_GAS.get(), + () -> AntarchyNeoforgeMisc.STINKY_FLY.get(), () -> AntarchyNeoforgeMisc.DOUBLE_DAMAGE_CHANCE, () -> AntarchyNeoforgeMisc.BLOODGLASS_MAX_HEARTS, () -> AntarchyNeoforgeMisc.BLOODGLASS_WARD diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java index aa9aba07..f6fda2b9 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/AntarchyNeoForgeClient.java @@ -200,6 +200,7 @@ public final class AntarchyNeoForgeClient { public static void registerParticleProviders(RegisterParticleProvidersEvent event) { event.registerSpriteSet(AntarchyNeoforgeMisc.DREAM_FIRE_FLAME.get(), DreamFlameParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_GAS.get(), HypnoticGasParticle.Provider::new); + event.registerSpriteSet(AntarchyNeoforgeMisc.STINKY_FLY.get(), FireflyParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS.get(), HypnoticGasParticle.Provider::new); event.registerSpriteSet(AntarchyNeoforgeMisc.HYPNOTIC_GAS_DOWN.get(), sprites -> new HypnoticGasParticle.Provider(sprites, true)); event.registerSpecial(AntarchyNeoforgeMisc.HYPNOTIC_GAS_CLOUD.get(), new HypnoticGasCloudParticle.Provider()); @@ -397,6 +398,7 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.UMBRAL_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.AMBER_LICHEN.get(), RenderType.cutout()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.BILE_VEIN.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CREEPVINE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.NYXITE_SPIKE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CHITEN_SPIKE.get(), RenderType.cutout()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java index 31759cc0..480428cc 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/client/ToreterrorCameraShakeHandler.java @@ -2,6 +2,7 @@ package com.craisinlord.antarchy.neoforge.client; import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.entity.ToreterrorEntity; +import com.craisinlord.antarchy.content.item.BigBerthaItem; import net.minecraft.client.Minecraft; import net.minecraft.util.Mth; import net.minecraft.world.phys.Vec3; @@ -13,6 +14,7 @@ import net.neoforged.neoforge.client.event.ViewportEvent; @EventBusSubscriber(modid = Antarchy.MODID, value = Dist.CLIENT) public final class ToreterrorCameraShakeHandler { private static final double MAX_SHAKE_RANGE = 48.0D; + private static final int TORETERROR_SHAKE_TICKS = 25; private ToreterrorCameraShakeHandler() { } @@ -35,6 +37,10 @@ public final class ToreterrorCameraShakeHandler { shakeStrength += (float) ((1.0D - distance / MAX_SHAKE_RANGE) * 2.0D); } + if (BigBerthaItem.clientShakeTicks > 0) { + shakeStrength += (float) BigBerthaItem.clientShakeTicks / TORETERROR_SHAKE_TICKS * 2.0F; + } + if (shakeStrength <= 0.0F) return; float time = (float) (mc.player.tickCount + event.getPartialTick()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java index 4f6cd7a1..22abf3e2 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeBlocks.java @@ -194,7 +194,9 @@ public final class AntarchyNeoforgeBlocks { public static final DeferredBlock AMBER_MOSS_CARPET = BLOCKS.register("amber_moss_carpet", () -> new UmbralMossCarpetBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.MOSS_CARPET).noOcclusion())); public static final DeferredBlock AMBER_LICHEN = BLOCKS.register("amber_lichen", - () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 0))); + () -> new GlowLichenBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.GLOW_LICHEN).lightLevel(state -> 1))); + public static final DeferredBlock BILE_VEIN = BLOCKS.register("bile_vein", + () -> new Block(BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK))); public static final DeferredBlock CREEPVINE = BLOCKS.register("creepvine", () -> new VineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.VINE))); public static final DeferredBlock DREAM_TORCH = BLOCKS.register("dream_torch", diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java index e81c6828..249350ac 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeCreativeModeTabs.java @@ -245,6 +245,7 @@ public class AntarchyNeoforgeCreativeModeTabs { event.accept(AntarchyNeoforgeItems.MEDIUM_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.LARGE_BLOOD_CRYSTAL_BUD_ITEM.get()); event.accept(AntarchyNeoforgeItems.MYRMITE_ITEM.get()); + event.accept(AntarchyNeoforgeItems.BILE_VEIN_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHITEN_BLOCK_ITEM.get()); event.accept(AntarchyNeoforgeItems.CHITEN_SPIKE_ITEM.get()); event.accept(AntarchyNeoforgeItems.AMBER_MOSS_BLOCK_ITEM.get()); @@ -388,7 +389,7 @@ public class AntarchyNeoforgeCreativeModeTabs { case "duplicator_sapling", "ouranwood_acorn" -> 10; // 11 - Plants and flowers - case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "amber_lichen", "creepvine", + case "orange_milkweed", "pink_milkweed", "torchflower_bush", "hushweed", "amber_lichen", "bile_vein", "creepvine", "triffid_goo_block", "wasp_nest", "red_ant_nest", "brown_ant_nest", "rainbow_ant_nest", "termite_nest" -> 11; diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index d099b76b..efa03b38 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java @@ -272,6 +272,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem AMBER_MOSS_BLOCK_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_MOSS_BLOCK); public static final DeferredItem AMBER_MOSS_CARPET_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_MOSS_CARPET); public static final DeferredItem AMBER_LICHEN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.AMBER_LICHEN); + public static final DeferredItem BILE_VEIN_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.BILE_VEIN); public static final DeferredItem CREEPVINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.CREEPVINE); public static final DeferredItem DREAM_TORCH_ITEM = ITEMS.register("dream_torch", () -> new StandingAndWallBlockItem(AntarchyNeoforgeBlocks.DREAM_TORCH.get(), AntarchyNeoforgeBlocks.DREAM_WALL_TORCH.get(), new Item.Properties(), net.minecraft.core.Direction.UP)); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index 85643a47..43f507fd 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -13,7 +13,8 @@ import com.craisinlord.antarchy.content.worldgen.ants.BrownAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RainbowAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.RedAntNestFeature; import com.craisinlord.antarchy.content.worldgen.ants.TermiteNestFeature; -import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBilePoolFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileCystFeature; +import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynBileVeinFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynCreepvineFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynEggPatchFeature; import com.craisinlord.antarchy.content.worldgen.cavaryn.CavarynWallAmberMossFeature; @@ -164,6 +165,8 @@ public final class AntarchyNeoforgeMisc { () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> STINKY_GAS = PARTICLE_TYPES.register("stinky_gas", () -> new SimpleParticleType(true)); + public static final DeferredHolder, SimpleParticleType> STINKY_FLY = PARTICLE_TYPES.register("stinky_fly", + () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS = PARTICLE_TYPES.register("hypnotic_gas", () -> new SimpleParticleType(true)); public static final DeferredHolder, SimpleParticleType> HYPNOTIC_GAS_CLOUD = PARTICLE_TYPES.register("hypnotic_gas_cloud", @@ -250,8 +253,10 @@ public final class AntarchyNeoforgeMisc { () -> new NyxiteSpikeFeature(NyxiteSpikeConfiguration.CODEC)); public static final DeferredHolder, ChitenSpikeFeature> CAVARYN_CHITEN_SPIKES = FEATURES.register("cavaryn_chiten_spikes", () -> new ChitenSpikeFeature(ChitenSpikeConfiguration.CODEC)); - public static final DeferredHolder, CavarynBilePoolFeature> CAVARYN_BILE_POOLS = FEATURES.register("cavaryn_bile_pools", - () -> new CavarynBilePoolFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynBileVeinFeature> CAVARYN_BILE_VEINS = FEATURES.register("cavaryn_bile_veins", + () -> new CavarynBileVeinFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, CavarynBileCystFeature> CAVARYN_BILE_CYSTS = FEATURES.register("cavaryn_bile_cysts", + () -> new CavarynBileCystFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynCreepvineFeature> CAVARYN_CREEPVINE = FEATURES.register("cavaryn_creepvine", () -> new CavarynCreepvineFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, CavarynWallAmberMossFeature> CAVARYN_WALL_AMBER_MOSS = FEATURES.register("cavaryn_wall_amber_moss", From ca77d1b4804a8c00dece7a4ebde6cdd4208d2cf1 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Sun, 28 Jun 2026 09:49:18 -0500 Subject: [PATCH 08/25] BOMBER sounds, cavaryn tweaks, other random bs --- .../antarchy/config/AntarchySettings.java | 2 +- .../antarchy/content/AntarchySoundEvents.java | 9 ++ .../renderer/UpwardFallingBlockRenderer.java | 1 - .../antarchy/content/entity/BomberEntity.java | 79 ++++++++++++------ .../content/entity/ant/AntTeleportHelper.java | 15 +++- .../content/fluid/BileLiquidBlock.java | 13 ++- .../cavaryn/CavarynBileCystFeature.java | 24 +----- .../cavaryn/CavarynBileVeinFeature.java | 6 +- .../cavaryn/CavarynEggPatchFeature.java | 1 - .../cavaryn/CavarynWallAmberMossFeature.java | 9 +- .../worldgen/elythia/CoralSpikeFeature.java | 3 - .../worldgen/elythia/ElythiaBiomeSource.java | 12 ++- .../elythia/FallenOuranwoodFeature.java | 8 +- .../elythia/FungalMushroomFeature.java | 52 +++++------- .../elythia/OuranwoodCocoonTreeFeature.java | 3 - .../elythia/OuranwoodTreeFeature.java | 3 - .../mixins/client/SplashManagerMixin.java | 4 +- .../resources/antarchy-common.mixins.json | 1 - .../antarchy/animations/bomber.animation.json | 7 +- .../antarchy/blockstates/broodstone.json | 7 ++ .../resources/assets/antarchy/lang/en_us.json | 5 ++ .../antarchy/models/block/broodstone.json | 6 ++ .../antarchy/models/item/broodstone.json | 3 + .../resources/assets/antarchy/sounds.json | 48 +++++++++++ .../antarchy/sounds/mob/bomber/explode1.ogg | Bin 0 -> 94160 bytes .../antarchy/sounds/mob/bomber/explode2.ogg | Bin 0 -> 90938 bytes .../antarchy/sounds/mob/bomber/knock1.ogg | Bin 0 -> 34792 bytes .../antarchy/sounds/mob/bomber/knock2.ogg | Bin 0 -> 26296 bytes .../antarchy/sounds/mob/bomber/knock3.ogg | Bin 0 -> 35988 bytes .../antarchy/sounds/mob/bomber/knock4.ogg | Bin 0 -> 34895 bytes .../antarchy/sounds/mob/bomber/knock5.ogg | Bin 0 -> 26556 bytes .../antarchy/sounds/mob/bomber/walk1.ogg | Bin 0 -> 7677 bytes .../antarchy/sounds/mob/bomber/walk2.ogg | Bin 0 -> 7651 bytes .../antarchy/sounds/mob/bomber/walk3.ogg | Bin 0 -> 7550 bytes .../antarchy/sounds/mob/bomber/walk4.ogg | Bin 0 -> 7682 bytes .../lurking_terror_fly_loop.ogg | Bin 0 -> 33914 bytes .../antarchy/textures/item/bile_bucket.png | Bin 0 -> 401 bytes .../data/antarchy/dimension/cavaryn.json | 29 ++++++- .../data/antarchy/dimension/elythia.json | 3 +- .../data/antarchy/dimension_type/cavaryn.json | 2 +- .../loot_table/blocks/broodstone.json | 20 +++++ .../tags/block/amber_moss_replaceable.json | 1 + .../tags/worldgen/biome/is_cavaryn.json | 6 ++ .../worldgen/biome/brooding_tunnels.json | 79 ++++++++++++++++++ .../data/antarchy/worldgen/biome/cavaryn.json | 9 +- .../worldgen/biome/elythia_ocean.json | 2 +- .../density_function/elythia_surface.json | 4 +- .../worldgen/noise_settings/cavaryn.json | 13 +++ .../worldgen/noise_settings/elythia.json | 2 +- .../brooding_tunnels_creepvine.json | 27 ++++++ .../placed_feature/cavaryn_bile_cysts.json | 2 +- .../placed_feature/cavaryn_bile_veins.json | 2 +- .../resources/data/c/tags/block/stones.json | 5 ++ .../tags/block/mineable/pickaxe.json | 1 + .../antarchy/fabric/AntarchyFabric.java | 5 ++ .../fabric/AntarchyFabricContent.java | 15 +++- .../mixin/client/AntiwaterFogMixin.java | 62 +++++++------- .../antarchy/neoforge/AntarchyNeoforge.java | 3 + .../client/AntarchyNeoForgeClient.java | 12 +++ .../client/MogglesClientRenderer.java | 1 - .../registry/AntarchyNeoforgeBlocks.java | 4 +- .../AntarchyNeoforgeCreativeModeTabs.java | 3 +- .../registry/AntarchyNeoforgeItems.java | 3 +- .../registry/AntarchyNeoforgeSounds.java | 3 + .../remove_glow_lichen_from_cavaryn.json | 8 ++ 65 files changed, 474 insertions(+), 173 deletions(-) create mode 100644 common/src/main/resources/assets/antarchy/blockstates/broodstone.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/broodstone.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/broodstone.json create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock3.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock4.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock5.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk1.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk2.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk3.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/bomber/walk4.ogg create mode 100644 common/src/main/resources/assets/antarchy/sounds/mob/lurking_terror/lurking_terror_fly_loop.ogg create mode 100644 common/src/main/resources/assets/antarchy/textures/item/bile_bucket.png create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/broodstone.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/is_cavaryn.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/biome/brooding_tunnels.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/brooding_tunnels_creepvine.json create mode 100644 common/src/main/resources/data/c/tags/block/stones.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/remove_glow_lichen_from_cavaryn.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index e3843401..7e971b76 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -31,7 +31,7 @@ public final class AntarchySettings { private static double waspHealth = 16.0D; private static double waspAttackDamage = 4.0D; private static double waspMovementSpeed = 0.39D; - private static double bomberHealth = 10.0D; + private static double bomberHealth = 15.0D; private static double bomberAttackDamage = 4.0D; private static double bomberExplosionDamage = 8.0D; private static double bomberExplosionRadius = 4.0D; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java index cd113d7a..ee33fc27 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchySoundEvents.java @@ -119,6 +119,9 @@ public final class AntarchySoundEvents { public static Supplier MOLEVORE_HURT = (Supplier) UNBOUND; public static Supplier MOLEVORE_ATTACK = (Supplier) UNBOUND; public static Supplier MOLEVORE_DIG = (Supplier) UNBOUND; + public static Supplier BOMBER_WALK = (Supplier) UNBOUND; + public static Supplier BOMBER_KNOCK = (Supplier) UNBOUND; + public static Supplier BOMBER_EXPLODE = (Supplier) UNBOUND; public static Supplier DUCT_TAPE_USE = (Supplier) UNBOUND; private AntarchySoundEvents() { @@ -235,6 +238,9 @@ public final class AntarchySoundEvents { Supplier molevoreHurt, Supplier molevoreAttack, Supplier molevoreDig, + Supplier bomberWalk, + Supplier bomberKnock, + Supplier bomberExplode, Supplier ductTapeUse ) { SQUIDZOOKA_FIRE = squidzookaFire; @@ -347,6 +353,9 @@ public final class AntarchySoundEvents { MOLEVORE_HURT = molevoreHurt; MOLEVORE_ATTACK = molevoreAttack; MOLEVORE_DIG = molevoreDig; + BOMBER_WALK = bomberWalk; + BOMBER_KNOCK = bomberKnock; + BOMBER_EXPLODE = bomberExplode; DUCT_TAPE_USE = ductTapeUse; } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java index 6081a863..3b4f647f 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/client/renderer/UpwardFallingBlockRenderer.java @@ -24,7 +24,6 @@ public class UpwardFallingBlockRenderer extends EntityRenderer FUSE_TICKS_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.INT); private static final EntityDataAccessor DETONATING_DATA = SynchedEntityData.defineId(BomberEntity.class, EntityDataSerializers.BOOLEAN); - private static final int DEFAULT_FUSE_TICKS = 80; + private static final int DEFAULT_FUSE_TICKS = 120; private static final int EXPLODE_ANIM_START_TICKS = 25; private static final int FLASH_INTERVAL_TICKS = 5; @@ -117,7 +125,9 @@ public class BomberEntity extends Monster implements GeoEntity { Objects.requireNonNull(this.getAttribute(Attributes.MAX_HEALTH)).setBaseValue(maxHealth); this.setHealth((float) maxHealth); Objects.requireNonNull(this.getAttribute(Attributes.ATTACK_DAMAGE)).setBaseValue(attackDamage); - return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + SpawnGroupData spawnData = super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); + this.primeFuse(); + return spawnData; } @Override @@ -135,16 +145,6 @@ public class BomberEntity extends Monster implements GeoEntity { public boolean hurt(DamageSource source, float amount) { if (source.is(DamageTypeTags.IS_FIRE) || source.is(DamageTypeTags.IS_EXPLOSION)) { this.primeFuse(); - return false; - } - if (this.detonating) { - Entity attacker = source.getDirectEntity(); - if (attacker != null) { - Vec3 knockDir = this.position().subtract(attacker.position()).normalize(); - this.push(knockDir.x * 0.5, 0.2, knockDir.z * 0.5); - this.hurtMarked = true; - } - return false; } Entity directEntity = source.getDirectEntity(); @@ -155,6 +155,11 @@ public class BomberEntity extends Monster implements GeoEntity { return super.hurt(source, amount); } + @Override + protected SoundEvent getHurtSound(DamageSource damageSource) { + return AntarchySoundEvents.BOMBER_KNOCK.get(); + } + @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack stack = player.getItemInHand(hand); @@ -185,7 +190,10 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public void registerControllers(AnimatableManager.ControllerRegistrar controllers) { - controllers.add(new AnimationController<>(this, "main_controller", 0, this::mainAnimController)); + controllers.add(new AnimationController<>(this, "movement_controller", 0, this::movementAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); + controllers.add(new AnimationController<>(this, "explode_controller", 0, this::explodeAnimController) + .setSoundKeyframeHandler(new AutoPlayingSoundKeyframeHandler<>())); } @Override @@ -198,10 +206,6 @@ public class BomberEntity extends Monster implements GeoEntity { super.tick(); if (!this.level().isClientSide && this.detonating) { - this.getNavigation().stop(); - this.setDeltaMovement(0.0D, 0.0D, 0.0D); - this.hasImpulse = false; - if (this.fuseTicks > 0) { this.fuseTicks--; this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); @@ -227,12 +231,20 @@ public class BomberEntity extends Monster implements GeoEntity { && (this.getFuseTicks() / FLASH_INTERVAL_TICKS) % 2 == 0; } - private PlayState mainAnimController(AnimationState state) { + private PlayState movementAnimController(AnimationState state) { + if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { + return PlayState.STOP; + } + + return state.setAndContinue(this.isMovingForAnimation() ? WALK_ANIM : IDLE_ANIM); + } + + private PlayState explodeAnimController(AnimationState state) { if (this.isDetonating() && this.getFuseTicks() <= EXPLODE_ANIM_START_TICKS) { return state.setAndContinue(EXPLODE_ANIM); } - return state.setAndContinue(state.isMoving() ? WALK_ANIM : IDLE_ANIM); + return PlayState.STOP; } private void primeFuse() { @@ -244,10 +256,7 @@ public class BomberEntity extends Monster implements GeoEntity { this.fuseTicks = DEFAULT_FUSE_TICKS; this.entityData.set(DETONATING_DATA, true); this.entityData.set(FUSE_TICKS_DATA, this.fuseTicks); - this.getNavigation().stop(); - this.setDeltaMovement(Vec3.ZERO); - this.hasImpulse = false; - this.playSound(SoundEvents.TNT_PRIMED, 1.0F, 0.9F + this.random.nextFloat() * 0.2F); + this.playSound(AntarchySoundEvents.BOMBER_EXPLODE.get(), 1.0F, 1.0F); } private void detonate() { @@ -260,7 +269,21 @@ public class BomberEntity extends Monster implements GeoEntity { double y = this.getY(0.0625D); double z = this.getZ(); float radius = (float) AntarchySettings.bomberExplosionRadius(); - serverLevel.explode(this, x, y, z, radius, ExplosionInteraction.TNT); + serverLevel.playSound(null, x, y, z, SoundEvents.GENERIC_EXPLODE.value(), SoundSource.HOSTILE, 0.55F, 1.0F); + serverLevel.explode( + this, + null, + null, + x, + y, + z, + radius, + false, + ExplosionInteraction.TNT, + ParticleTypes.EXPLOSION_EMITTER, + ParticleTypes.EXPLOSION, + BuiltInRegistries.SOUND_EVENT.getHolder(INTENTIONALLY_EMPTY_SOUND_ID).orElseThrow() + ); double extraDamage = AntarchySettings.bomberExplosionDamage(); if (extraDamage > 0.0D) { @@ -283,6 +306,10 @@ public class BomberEntity extends Monster implements GeoEntity { this.discard(); } + private boolean isMovingForAnimation() { + return this.getDeltaMovement().horizontalDistanceSqr() > 1.0E-4D || this.getNavigation().isInProgress(); + } + private final class BomberAttackGoal extends MeleeAttackGoal { private BomberAttackGoal() { super(BomberEntity.this, 1.1D, true); @@ -290,12 +317,12 @@ public class BomberEntity extends Monster implements GeoEntity { @Override public boolean canUse() { - return !BomberEntity.this.detonating && super.canUse(); + return super.canUse(); } @Override public boolean canContinueToUse() { - return !BomberEntity.this.detonating && super.canContinueToUse(); + return super.canContinueToUse(); } } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java index 97d66961..829d89e0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/ant/AntTeleportHelper.java @@ -1,5 +1,6 @@ package com.craisinlord.antarchy.content.entity.ant; +import com.craisinlord.antarchy.config.AntarchySettings; import java.util.LinkedHashSet; import java.util.Set; import net.minecraft.core.BlockPos; @@ -16,6 +17,7 @@ import net.minecraft.world.entity.vehicle.DismountHelper; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.levelgen.Heightmap; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; @@ -161,17 +163,26 @@ public final class AntTeleportHelper { @Nullable private static Vec3 tryFindSafeDismount(ServerPlayer player, ServerLevel destination, BlockPos candidate) { Vec3 safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate, true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } for (Direction direction : Direction.Plane.HORIZONTAL) { safePos = DismountHelper.findSafeDismountLocation(player.getType(), destination, candidate.relative(direction), true); - if (safePos != null) { + if (safePos != null && isValidArrivalPosition(destination, safePos)) { return safePos; } } return null; } + + private static boolean isValidArrivalPosition(ServerLevel destination, Vec3 safePos) { + if (destination.dimension() != AntarchySettings.termiteDestinationDimension()) { + return true; + } + + BlockPos standPos = BlockPos.containing(safePos); + return !destination.getBlockState(standPos.below()).is(Blocks.BEDROCK); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java index 81476b5f..f8596dd0 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/fluid/BileLiquidBlock.java @@ -1,7 +1,10 @@ package com.craisinlord.antarchy.content.fluid; +import com.craisinlord.antarchy.Antarchy; import com.craisinlord.antarchy.content.AntarchyObjects; import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; import net.minecraft.world.entity.Entity; @@ -11,12 +14,13 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.FlowingFluid; -import net.minecraft.world.phys.Vec3; public class BileLiquidBlock extends LiquidBlock { + private static final ResourceLocation BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "bile"); + private static final ResourceLocation FLOWING_BILE_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "flowing_bile"); private static final int EFFECT_DURATION_TICKS = 100; - private static final Vec3 SLOW_MOVEMENT = new Vec3(0.85D, 0.95D, 0.85D); public BileLiquidBlock(FlowingFluid fluid, BlockBehaviour.Properties properties) { super(fluid, properties); @@ -36,7 +40,10 @@ public class BileLiquidBlock extends LiquidBlock { return; } } + } - entity.makeStuckInBlock(state, SLOW_MOVEMENT); + public static boolean isBile(FluidState fluidState) { + ResourceLocation fluidId = BuiltInRegistries.FLUID.getKey(fluidState.getType()); + return BILE_ID.equals(fluidId) || FLOWING_BILE_ID.equals(fluidId); } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java index 2352b44e..43ed184a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileCystFeature.java @@ -14,7 +14,6 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.LiquidBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; @@ -27,8 +26,7 @@ public final class CavarynBileCystFeature extends Feature codec) { super(codec); @@ -38,7 +36,7 @@ public final class CavarynBileCystFeature extends Feature context) { Block bileVeinBlock = getBlock(BILE_VEIN_ID); Block bileBlock = getBlock(BILE_ID); - if (bileVeinBlock == null || !(bileBlock instanceof LiquidBlock)) { + if (bileVeinBlock == null || bileBlock == null) { return false; } @@ -53,8 +51,6 @@ public final class CavarynBileCystFeature extends Feature placed = new ArrayList<>(); @@ -122,7 +113,6 @@ public final class CavarynBileCystFeature extends Feature= 0.30f) { return true; } - // Ooze bile out of exposed faces — "popped pimple" seep for (BlockPos cystPos : placed) { for (Direction dir : Direction.values()) { BlockPos adj = cystPos.relative(dir); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java index 932bd883..5cf07aa4 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/cavaryn/CavarynBileVeinFeature.java @@ -28,7 +28,7 @@ public final class CavarynBileVeinFeature extends Feature codec) { super(codec); @@ -53,7 +53,6 @@ public final class CavarynBileVeinFeature extends Feature { private static final ResourceLocation AMBER_LICHEN_ID = ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "amber_lichen"); - private static final ResourceLocation GLOW_LICHEN_ID = ResourceLocation.withDefaultNamespace("glow_lichen"); private static final int SEARCH_RADIUS = 8; private static final int SEARCH_ATTEMPTS = 28; private static final int VERTICAL_SCAN = 10; @@ -34,8 +33,7 @@ public final class CavarynWallAmberMossFeature extends Feature patchPositions, Direction supportDirection, Block amberLichenBlock, - Block glowLichenBlock, RandomSource random ) { for (BlockPos patchPos : patchPositions) { @@ -132,7 +129,7 @@ public final class CavarynWallAmberMossFeature extends Feature { int baseRadius = 2 + random.nextInt(2); // 2–3 wide at base int totalHeight = 20 + random.nextInt(15); // 20–34 blocks tall - // Curve: lean toward a random horizontal direction, accelerating toward the tip double curveAngle = random.nextDouble() * Math.PI * 2; double curveDX = Math.cos(curveAngle); double curveDZ = Math.sin(curveAngle); @@ -96,7 +95,6 @@ public class CoralSpikeFeature extends Feature { level.setBlock(pos, coral.block().defaultBlockState(), 2); placed = true; - // Coral plants growing off the top of outer-surface blocks if (dist >= radius - 0.6 && radius > 0) { BlockPos above = pos.above(); if (canReplace(level.getBlockState(above))) { @@ -110,7 +108,6 @@ public class CoralSpikeFeature extends Feature { } } - // Wall fans on the outer surface if (dist >= radius - 0.5) { for (Direction dir : Direction.Plane.HORIZONTAL) { if (random.nextFloat() >= 0.4f) continue; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java index 545bfb05..3b9d1ab1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/ElythiaBiomeSource.java @@ -102,7 +102,7 @@ public class ElythiaBiomeSource extends BiomeSource { // At continentalness < -0.80 the terrain is reliably below sea level. // Transition-zone columns (-0.80 to -0.85) are treated as land to avoid // ocean biome appearing over above-sea-level terrain. - private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.80f); + private static final long OCEAN_CONTINENTALNESS_THRESHOLD = Climate.quantizeCoord(-0.87f); @Override public Holder getNoiseBiome(int x, int y, int z, Climate.Sampler sampler) { @@ -116,17 +116,21 @@ public class ElythiaBiomeSource extends BiomeSource { // Use continentalness (XZ-only noise) to classify the column. // Ocean columns get the ocean biome at every Y so structures, particles, // and ambient effects work correctly above the water surface. + // Cave biomes are always preserved even in ocean columns. Climate.TargetPoint target = sampler.sample(x, this.seaLevelQuartY, z); if (target.continentalness() < OCEAN_CONTINENTALNESS_THRESHOLD) { + if (biome.is(MOLEWORM_CAVES) || biome.is(ELYTHIA_LUSH_CAVES)) return biome; Holder seaLevelBiome = this.delegate.getNoiseBiome(x, this.seaLevelQuartY, z, sampler); // MultiNoise can return a land biome at sea-level depth — force ocean if so if (isOceanBiome(seaLevelBiome)) return seaLevelBiome; return oceanHolder != null ? oceanHolder : seaLevelBiome; } - // Land column at or below sea level: force ocean for any biome not allowed there. - // +1 quart above seaLevelQuartY so blocks 76-83 (around the waterline) are all caught. - if (y <= this.seaLevelQuartY + 1 && oceanHolder != null && !allowedBelowSeaLevel(biome)) { + // Land column in the shallow-underwater zone: force ocean for surface biomes that + // ended up below sea level (e.g. meadow in a depression). Only applies within + // 6 quarts (~24 blocks) of sea level — deep underground is unaffected. + if (y >= this.seaLevelQuartY - 6 && y <= this.seaLevelQuartY + && oceanHolder != null && !allowedBelowSeaLevel(biome)) { return oceanHolder; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java index 78ba675b..d7a1861a 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FallenOuranwoodFeature.java @@ -66,7 +66,6 @@ public class FallenOuranwoodFeature extends Feature { float dmg = damage[step]; - // Full gap sections — log has completely rotted through here if (dmg > 0.78f) continue; int surfaceY = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, bx, bz); @@ -79,14 +78,11 @@ public class FallenOuranwoodFeature extends Feature { boolean isShell = dist >= outerRadius - 0.5; - // Hollow interior: always skip center when hollow if (hollow && dist < outerRadius - 0.5) continue; - // Heavy-damage sections: only keep fragments of the shell if (dmg > 0.55f && !isShell) continue; if (dmg > 0.55f && random.nextFloat() < (dmg - 0.55f) * 3.5f) continue; - // All sections: random rot holes punched through the shell if (isShell && random.nextFloat() < dmg * 0.4f) continue; int px = axis == Direction.Axis.X ? bx : bx + dp; @@ -95,13 +91,12 @@ public class FallenOuranwoodFeature extends Feature { if (!canReplace(level.getBlockState(pos))) continue; - // Block material mix: mostly mossy log, some fresh log patches, some moss float r = random.nextFloat(); BlockState toPlace; if (r < 0.08f) { toPlace = Blocks.MOSS_BLOCK.defaultBlockState(); } else if (r < 0.22f) { - toPlace = freshLogState; // fresher wood, less decayed patch + toPlace = freshLogState; } else if (r < 0.32f) { toPlace = woodState; } else { @@ -114,7 +109,6 @@ public class FallenOuranwoodFeature extends Feature { } } - // Moss patches scattered along the log's footprint int mossCount = 20 + random.nextInt(25); for (int i = 0; i < mossCount; i++) { int mx = origin.getX() + random.nextInt(length + 6) - 3; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java index f671b975..a6da40dd 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/FungalMushroomFeature.java @@ -30,24 +30,17 @@ public class FungalMushroomFeature extends Feature { Block capBlock = isRed ? Blocks.RED_MUSHROOM_BLOCK : Blocks.BROWN_MUSHROOM_BLOCK; Block smallMushroom = isRed ? Blocks.RED_MUSHROOM : Blocks.BROWN_MUSHROOM; - // 1-in-3 chance of a large mushroom (~3x the small variant) - boolean isLarge = random.nextInt(3) == 0; + int stemSize = random.nextBoolean() ? 2 : 3; + int stemHeight = 6 + random.nextInt(7); - int stemSize = isLarge ? (2 + random.nextInt(3)) : (random.nextBoolean() ? 2 : 3); - int stemHeight = isLarge ? (18 + random.nextInt(19)) : (6 + random.nextInt(7)); // large: 18–36, small: 6–12 - - // Lean: stem drifts in a random horizontal direction over its height double leanAngle = random.nextDouble() * Math.PI * 2; double leanDX = Math.cos(leanAngle); double leanDZ = Math.sin(leanAngle); - double maxLean = isLarge - ? (6.0 + random.nextDouble() * 10.0) // large: 6–16 block lean - : (2.0 + random.nextDouble() * 3.5); // small: 2–5.5 block lean + double maxLean = 2.0 + random.nextDouble() * 3.5; int baseY = origin.getY(); int stemOffset = stemSize == 2 ? 0 : -1; // center 3x3 on origin - // Pore-only stem state (inner faces; sides visible from outside) BlockState stemPore = Blocks.MUSHROOM_STEM.defaultBlockState() .setValue(HugeMushroomBlock.NORTH, false) .setValue(HugeMushroomBlock.SOUTH, false) @@ -63,7 +56,6 @@ public class FungalMushroomFeature extends Feature { .setValue(HugeMushroomBlock.UP, false) .setValue(HugeMushroomBlock.DOWN, false); - // Place leaning stem for (int dy = 0; dy < stemHeight; dy++) { double leanProgress = (double) dy / stemHeight; int leanX = (int) Math.round(leanDX * maxLean * leanProgress); @@ -71,34 +63,32 @@ public class FungalMushroomFeature extends Feature { for (int dx = 0; dx < stemSize; dx++) { for (int dz = 0; dz < stemSize; dz++) { - BlockPos pos = new BlockPos( - origin.getX() + stemOffset + dx + leanX, - baseY + dy, - origin.getZ() + stemOffset + dz + leanZ); - if (canReplace(level.getBlockState(pos))) { - // Outer ring shows bark, interior is pores - boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); - level.setBlock(pos, isEdge ? stemSide : stemPore, 2); + int wx = origin.getX() + stemOffset + dx + leanX; + int wz = origin.getZ() + stemOffset + dz + leanZ; + BlockPos pos = new BlockPos(wx, baseY + dy, wz); + if (!canReplace(level.getBlockState(pos))) continue; + boolean isEdge = (dx == 0 || dx == stemSize - 1 || dz == 0 || dz == stemSize - 1); + BlockState stemState = isEdge ? stemSide : stemPore; + level.setBlock(pos, stemState, 2); + BlockPos below = pos.below(); + while (canReplace(level.getBlockState(below)) && below.getY() > level.getMinBuildHeight()) { + level.setBlock(below, stemState, 2); + below = below.below(); } } } } - // Cap: cone-shaped, follows the lean, with irregular per-block radius noise double capCenterX = origin.getX() + (stemSize == 2 ? 0.5 : 0) + leanDX * maxLean; double capCenterZ = origin.getZ() + (stemSize == 2 ? 0.5 : 0) + leanDZ * maxLean; int capTopY = baseY + stemHeight; - int baseCapRadius = isLarge - ? (stemSize + 7 + random.nextInt(6)) // large: ~11–18 at base - : (stemSize + 2 + random.nextInt(2)); // small: 4–6 at base + int baseCapRadius = stemSize + 2 + random.nextInt(2); - // Per-position radius jitter table — sampled before the loop for consistency - // Each (dx, dz) slot gets a random ±1.5 bias baked in int jitterRange = baseCapRadius + 4; float[][] jitter = new float[jitterRange * 2 + 1][jitterRange * 2 + 1]; for (float[] row : jitter) { for (int j = 0; j < row.length; j++) { - row[j] = random.nextFloat() * 3.0f - 1.5f; // ±1.5 blocks + row[j] = random.nextFloat() * 1.0f - 0.5f; } } @@ -143,10 +133,9 @@ public class FungalMushroomFeature extends Feature { } } - // Mycelium patches around base - int myceliumCount = isLarge ? (25 + random.nextInt(25)) : (12 + random.nextInt(12)); + int myceliumCount = 12 + random.nextInt(12); for (int i = 0; i < myceliumCount; i++) { - int radius = isLarge ? (stemSize + 8 + random.nextInt(8)) : (stemSize + 3 + random.nextInt(3)); + int radius = stemSize + 3 + random.nextInt(3); int mx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int mz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; int my = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, mx, mz) - 1; @@ -159,10 +148,9 @@ public class FungalMushroomFeature extends Feature { } } - // Small mushrooms scattered around - int smallCount = isLarge ? (10 + random.nextInt(15)) : (5 + random.nextInt(8)); + int smallCount = 5 + random.nextInt(8); for (int i = 0; i < smallCount; i++) { - int radius = isLarge ? (stemSize + 10 + random.nextInt(10)) : (stemSize + 4 + random.nextInt(4)); + int radius = stemSize + 4 + random.nextInt(4); int sx = origin.getX() + random.nextInt(radius * 2 + 1) - radius; int sz = origin.getZ() + random.nextInt(radius * 2 + 1) - radius; int sy = level.getHeight(Heightmap.Types.WORLD_SURFACE_WG, sx, sz); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java index fe086d50..7fca2748 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodCocoonTreeFeature.java @@ -26,19 +26,16 @@ public class OuranwoodCocoonTreeFeature extends OuranwoodTreeFeature { private void spawnGuaranteedCocoon(WorldGenLevel level, BlockPos origin, OuranwoodTreeConfiguration config, RandomSource random) { if (!(level.getLevel() instanceof ServerLevel serverLevel)) return; - // Pick a branch direction and a Y somewhere in the lower-mid trunk Direction dir = Direction.Plane.HORIZONTAL.getRandomDirection(random); int branchY = 10 + random.nextInt(8); int branchLength = 4 + random.nextInt(3); // 4–6 logs out from the trunk - // Place the branch logs, then re-assert the anchor tip so it's always a log for (int i = 1; i <= branchLength; i++) { BlockPos p = origin.above(branchY).relative(dir, i); setBlock(level, p, config.trunkProvider().getState(random, p)); } BlockPos anchor = origin.above(branchY).relative(dir, branchLength); - // Clear everything below the anchor and spawn the cocooned brutalfly BrutalflyCocoonFeature.clearCocoonVolume(level, anchor); BrutalflyEntity brutalfly = AntarchyObjects.BRUTALFLY.get().create(serverLevel); if (brutalfly == null) return; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java index 98e24455..db2bd8d6 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/elythia/OuranwoodTreeFeature.java @@ -553,8 +553,6 @@ public class OuranwoodTreeFeature extends Feature { return; } - // Place the marker block at the first floor position; it will spawn squirrels and - // convert itself to COARSE_DIRT shortly after the chunk loads. // The tick is scheduled here on the WorldGenLevel because onPlace() is never // called during world generation, so the block cannot self-schedule. int squirrelCount = 1 + random.nextInt(3); @@ -824,7 +822,6 @@ public class OuranwoodTreeFeature extends Feature { } } - // Set correct surface type on top soil block (from refreshTerrainSurface) BlockPos topSoilPos = null; for (int y = maxY; y >= minY; y--) { BlockPos pos = new BlockPos(worldX, y, worldZ); 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 83f930db..e812287b 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 @@ -13,9 +13,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import java.util.List; @Mixin(SplashManager.class) -/* - * Adds Antarchy splash text without replacing vanilla handling. - */ public abstract class SplashManagerMixin { @Shadow @Final @@ -35,5 +32,6 @@ public abstract class SplashManagerMixin { this.splashes.add("Rainbow sugar yummy"); this.splashes.add("Now with inverted gravity!"); this.splashes.add("Everything we need is already here"); + this.splashes.add("Rub some bacon on it!"); } } diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index 6b8422cb..1dea3fec 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -1,7 +1,6 @@ { "required": true, "package": "com.craisinlord.antarchy.mixins", - "refmap": "antarchy.refmap.json", "plugin": "com.craisinlord.antarchy.mixins.AntarchyMixinPlugin", "compatibilityLevel": "JAVA_21", "mixins": [ diff --git a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json index 5571a40d..4bd766fb 100644 --- a/common/src/main/resources/assets/antarchy/animations/bomber.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/bomber.animation.json @@ -64,6 +64,11 @@ "walk": { "loop": true, "animation_length": 0.5, + "sound_effects": { + "0.0": { + "effect": "antarchy:bomber_walk|0.9|1.0" + } + }, "bones": { "root": { "rotation": { @@ -313,4 +318,4 @@ } } } -} \ No newline at end of file +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/broodstone.json b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json new file mode 100644 index 00000000..4ae6f1c1 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/broodstone.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/broodstone" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/lang/en_us.json b/common/src/main/resources/assets/antarchy/lang/en_us.json index 752948e3..ca6c9f4f 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -35,6 +35,7 @@ "block.antarchy.infested_coarse_dirt": "Infested Coarse Dirt", "block.antarchy.nyxite": "Nyxite", "block.antarchy.myrmite": "Myrmite", + "block.antarchy.broodstone": "Broodstone", "block.antarchy.polished_nyxite": "Polished Nyxite", "block.antarchy.chiseled_nyxite": "Chiseled Nyxite", "block.antarchy.nyxite_bricks": "Nyxite Bricks", @@ -279,6 +280,7 @@ "item.antarchy.chiten_block": "Chiten Block", "item.antarchy.chiten_spike": "Chiten Spike", "item.antarchy.myrmite": "Myrmite", + "item.antarchy.broodstone": "Broodstone", "item.antarchy.torchflower_bush": "Torchflower Bush", "block.antarchy.torchflower_bush": "Torchflower Bush", "item.antarchy.mud_pie": "Mud Pie", @@ -647,6 +649,9 @@ "subtitles.antarchy.basilisk_hiss": "Basilisk hisses", "subtitles.antarchy.basilisk_hurt": "Basilisk hurts", "subtitles.antarchy.basilisk_death": "Basilisk dies", + "subtitles.antarchy.bomber_walk": "Bomber walks", + "subtitles.antarchy.bomber_knock": "Bomber gets hit", + "subtitles.antarchy.bomber_explode": "Bomber fuse hisses", "item.minecraft.potion.effect.inversion": "Potion of Inversion", "item.minecraft.potion.effect.long_inversion": "Potion of Inversion", "item.minecraft.splash_potion.effect.inversion": "Splash Potion of Inversion", diff --git a/common/src/main/resources/assets/antarchy/models/block/broodstone.json b/common/src/main/resources/assets/antarchy/models/block/broodstone.json new file mode 100644 index 00000000..b282bd92 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/broodstone.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cube_all", + "textures": { + "all": "antarchy:block/broodstone/broodstone" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/item/broodstone.json b/common/src/main/resources/assets/antarchy/models/item/broodstone.json new file mode 100644 index 00000000..c212825a --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/broodstone.json @@ -0,0 +1,3 @@ +{ + "parent": "antarchy:block/broodstone" +} diff --git a/common/src/main/resources/assets/antarchy/sounds.json b/common/src/main/resources/assets/antarchy/sounds.json index 2881e343..100a1def 100644 --- a/common/src/main/resources/assets/antarchy/sounds.json +++ b/common/src/main/resources/assets/antarchy/sounds.json @@ -418,6 +418,54 @@ } ] }, + "bomber_walk": { + "subtitle": "subtitles.antarchy.bomber_walk", + "sounds": [ + { + "name": "antarchy:mob/bomber/walk1" + }, + { + "name": "antarchy:mob/bomber/walk2" + }, + { + "name": "antarchy:mob/bomber/walk3" + }, + { + "name": "antarchy:mob/bomber/walk4" + } + ] + }, + "bomber_knock": { + "subtitle": "subtitles.antarchy.bomber_knock", + "sounds": [ + { + "name": "antarchy:mob/bomber/knock1" + }, + { + "name": "antarchy:mob/bomber/knock2" + }, + { + "name": "antarchy:mob/bomber/knock3" + }, + { + "name": "antarchy:mob/bomber/knock4" + }, + { + "name": "antarchy:mob/bomber/knock5" + } + ] + }, + "bomber_explode": { + "subtitle": "subtitles.antarchy.bomber_explode", + "sounds": [ + { + "name": "antarchy:mob/bomber/explode1" + }, + { + "name": "antarchy:mob/bomber/explode2" + } + ] + }, "thoraxis_nightmare_wastes_ambient": { "subtitle": "subtitles.antarchy.thoraxis_nightmare_wastes_ambient", "sounds": [ diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..1e9320a86397ed78d4bede017c175eefbaeabaff GIT binary patch literal 94160 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 liLz^}LPegyrG3 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 z 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 F0uD#;x+(ww literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/explode2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..82fa12a400b6b0eb24f8e10ed4fc8c91bd15305e GIT binary patch literal 90938 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

2~p`= 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

!di!h=o3<4si!>R3Qr6-oYY~(Ir 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4086db9d3ab42f47b20705ef13ea693b8eca51f4 GIT binary patch literal 34792 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg b/common/src/main/resources/assets/antarchy/sounds/mob/bomber/knock2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..dd5fd457b6509d61d6f63b0aa7f549743a5aeb74 GIT binary patch literal 26296 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 OYU4_$z`uXsxS) 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