From fb8fd3c927ae81c71f819eb5a07b09647b3f8fb4 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 24 Jun 2026 23:03:09 -0500 Subject: [PATCH] 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);