From 4e67661448e2f3f5d9aa4a61a6e16867b061df18 Mon Sep 17 00:00:00 2001 From: craisinlord Date: Wed, 8 Jul 2026 01:35:41 -0500 Subject: [PATCH] ruined arena new ant sacrifice portals dorrie overhaul new foliage in overworld biomes --- .../antarchy/config/AntarchySettings.java | 25 + .../antarchy/content/AntarchyTags.java | 3 + .../block/AntDimensionPortalBlock.java | 154 + .../antarchy/content/block/BigBushBlock.java | 37 + .../content/block/BigBushPartBlock.java | 23 + .../content/block/OuranwoodVineBlock.java | 41 + .../block/OuranwoodVinePlantBlock.java | 42 + .../content/entity/AlphaMantisEntity.java | 8 +- .../antarchy/content/entity/DorrieEntity.java | 162 +- .../antarchy/content/entity/MantisEntity.java | 5 +- .../portal/PermanentPortalManager.java | 129 + .../content/portal/PermanentPortalShape.java | 203 + .../portal/PermanentPortalTeleporter.java | 150 + .../content/portal/PermanentPortalType.java | 111 + .../worldgen/BigBushWorldgenFeature.java | 73 + .../VeryTallGrassWorldgenFeature.java | 35 + .../BoneMealItemTorchflowerBushMixin.java | 53 + .../resources/antarchy-common.mixins.json | 1 + .../antarchy/animations/dorrie.animation.json | 5980 ++++++++++------- .../antarchy/blockstates/cavaryn_portal.json | 6 + .../antarchy/blockstates/elythia_portal.json | 6 + .../antarchy/blockstates/ouranwood_vine.json | 7 + .../blockstates/ouranwood_vine_plant.json | 7 + .../antarchy/blockstates/thoraxis_portal.json | 6 + .../assets/antarchy/geo/dorrie.geo.json | 326 +- .../resources/assets/antarchy/lang/en_us.json | 9 + .../models/block/cavaryn_portal_x.json | 17 + .../models/block/cavaryn_portal_z.json | 17 + .../models/block/elythia_portal_x.json | 17 + .../models/block/elythia_portal_z.json | 17 + .../antarchy/models/block/ouranwood_vine.json | 6 + .../models/block/ouranwood_vine_plant.json | 6 + .../models/block/thoraxis_portal_x.json | 17 + .../models/block/thoraxis_portal_z.json | 17 + .../antarchy/models/item/ouranwood_vine.json | 6 + .../textures/block/cavaryn_portal.png | Bin 0 -> 22645 bytes .../textures/block/cavaryn_portal.png.mcmeta | 3 + .../textures/block/elythia_portal.png | Bin 0 -> 25544 bytes .../textures/block/elythia_portal.png.mcmeta | 3 + .../block/ouranwood/ouranwood_vine.png | Bin 0 -> 625 bytes .../block/ouranwood/ouranwood_vine_plant.png | Bin 0 -> 511 bytes .../textures/block/thoraxis_portal.png | Bin 0 -> 24361 bytes .../textures/block/thoraxis_portal.png.mcmeta | 3 + .../antarchy/textures/entity/dorrie.png | Bin 13568 -> 8734 bytes .../textures/entity/dorrie_saddle.png | Bin 15697 -> 11820 bytes .../data/antarchy/advancement/bugged_out.json | 34 + .../antarchy/advancement/challenge_games.json | 42 + .../loot_table/blocks/ouranwood_vine.json | 25 + .../chests/ruined_arena/generic.json | 18 +- .../spawners/fallen_kingdom_castle/hard.json | 2 +- .../fallen_kingdom_castle/medium.json | 2 +- .../spawners/ruined_arena/hard.json | 16 +- .../spawners/ruined_arena/medium.json | 19 +- .../structure/ruined_arena/ruined_arena.nbt | Bin 267168 -> 267191 bytes .../tags/block/cavaryn_portal_frames.json | 6 + .../tags/block/elythia_portal_frames.json | 6 + .../tags/block/thoraxis_portal_frames.json | 6 + .../biome/big_bush_2x2_spawn_biomes.json | 10 + .../worldgen/biome/big_bush_spawn_biomes.json | 8 + .../biome/mega_taiga_spawn_biomes.json | 7 + .../biome/very_short_grass_spawn_biomes.json | 19 + .../biome/very_tall_grass_spawn_biomes.json | 9 + .../worldgen/configured_feature/big_bush.json | 25 + .../configured_feature/big_bush_2x2.json | 4 + .../configured_feature/big_bush_3x3.json | 4 + .../configured_feature/very_short_grass.json | 25 + .../configured_feature/very_tall_grass.json | 4 + .../worldgen/placed_feature/big_bush.json | 9 + .../worldgen/placed_feature/big_bush_2x2.json | 9 + .../worldgen/placed_feature/big_bush_3x3.json | 9 + .../placed_feature/very_short_grass.json | 9 + .../placed_feature/very_tall_grass.json | 9 + .../worldgen/structure/ruined_arena.json | 2 +- .../fabric/AntarchyConfigModuleFabric.java | 4 + .../antarchy/fabric/AntarchyFabric.java | 65 + .../fabric/AntarchyFabricContent.java | 44 + .../antarchy/fabric/AntarchyFabricEvents.java | 2 + .../client/AntarchyFabricClientBootstrap.java | 5 + .../AntarchyConfigModuleNeoforge.java | 4 + .../antarchy/neoforge/AntarchyMiscConfig.java | 20 + .../antarchy/neoforge/AntarchyNeoforge.java | 9 + .../client/AntarchyNeoForgeClient.java | 5 + .../registry/AntarchyNeoForgeEvents.java | 6 + .../registry/AntarchyNeoforgeBlocks.java | 31 + .../AntarchyNeoforgeCreativeModeTabs.java | 1 + .../registry/AntarchyNeoforgeItems.java | 1 + .../registry/AntarchyNeoforgeMisc.java | 8 + .../neoforge/biome_modifier/big_bush.json | 8 + .../neoforge/biome_modifier/big_bush_2x2.json | 8 + .../neoforge/biome_modifier/big_bush_3x3.json | 8 + .../biome_modifier/very_short_grass.json | 8 + .../biome_modifier/very_tall_grass.json | 8 + 92 files changed, 5802 insertions(+), 2512 deletions(-) create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/BigBushWorldgenFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/content/worldgen/VeryTallGrassWorldgenFeature.java create mode 100644 common/src/main/java/com/craisinlord/antarchy/mixins/BoneMealItemTorchflowerBushMixin.java create mode 100644 common/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/elythia_portal.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json create mode 100644 common/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json create mode 100644 common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json create mode 100644 common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json create mode 100644 common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta create mode 100644 common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png create mode 100644 common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta create mode 100644 common/src/main/resources/data/antarchy/advancement/bugged_out.json create mode 100644 common/src/main/resources/data/antarchy/advancement/challenge_games.json create mode 100644 common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json create mode 100644 common/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_2x2_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/mega_taiga_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/very_short_grass_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/tags/worldgen/biome/very_tall_grass_spawn_biomes.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_2x2.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_3x3.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/very_short_grass.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/configured_feature/very_tall_grass.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_2x2.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_3x3.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/very_short_grass.json create mode 100644 common/src/main/resources/data/antarchy/worldgen/placed_feature/very_tall_grass.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_2x2.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_3x3.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_short_grass.json create mode 100644 neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_tall_grass.json diff --git a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java index 09881a9e..a5ab19e5 100644 --- a/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java +++ b/common/src/main/java/com/craisinlord/antarchy/config/AntarchySettings.java @@ -447,6 +447,10 @@ public final class AntarchySettings { private static double primordialArmorKnockbackPerPiece = 0.5D; private static int fallenKingCrownArmorValue = 2; private static double fallenKingCrownArmorToughness = 0.0D; + private static boolean permanentPortalsEnabled = true; + private static boolean elythiaPortalEnabled = true; + private static boolean thoraxisPortalEnabled = true; + private static boolean cavarynPortalEnabled = true; private static boolean elythiaFireflyParticlesEnabled = true; private static int bloodCrystalArmorShieldRechargeTicks = 600; private static int bloodCrystalAppleShieldCount = 2; @@ -957,6 +961,22 @@ public final class AntarchySettings { rainbowAntsLeadToInfinityDimensions = value; } + public static void setPermanentPortalsEnabled(boolean value) { + permanentPortalsEnabled = value; + } + + public static void setElythiaPortalEnabled(boolean value) { + elythiaPortalEnabled = value; + } + + public static void setThoraxisPortalEnabled(boolean value) { + thoraxisPortalEnabled = value; + } + + public static void setCavarynPortalEnabled(boolean value) { + cavarynPortalEnabled = value; + } + public static void setBrownAntRequiresReagent(boolean value) { brownAntRequiresReagent = value; } @@ -2434,6 +2454,11 @@ public final class AntarchySettings { public static double fallenKingCrownArmorToughness() { return fallenKingCrownArmorToughness; } public static void setFallenKingCrownArmorToughness(double value) { fallenKingCrownArmorToughness = value; } + public static boolean permanentPortalsEnabled() { return permanentPortalsEnabled; } + public static boolean elythiaPortalEnabled() { return elythiaPortalEnabled; } + public static boolean thoraxisPortalEnabled() { return thoraxisPortalEnabled; } + public static boolean cavarynPortalEnabled() { return cavarynPortalEnabled; } + public static boolean elythiaFireflyParticlesEnabled() { return elythiaFireflyParticlesEnabled; } public static void setElythiaFireflyParticlesEnabled(boolean value) { elythiaFireflyParticlesEnabled = value; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java index 821c5ef7..cc7c90ff 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/AntarchyTags.java @@ -31,6 +31,9 @@ public final class AntarchyTags { public static final TagKey TERMITE_FOODS = TagKey.create(Registries.BLOCK, id("termite_foods")); public static final TagKey UMBRAL_MOSS_REPLACEABLE = TagKey.create(Registries.BLOCK, id("umbral_moss_replaceable")); public static final TagKey HERCULES_BEETLE_CHARGE_IMMUNE_BLOCKS = TagKey.create(Registries.BLOCK, id("hercules_beetle_charge_immune_blocks")); + public static final TagKey ELYTHIA_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("elythia_portal_frames")); + public static final TagKey THORAXIS_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("thoraxis_portal_frames")); + public static final TagKey CAVARYN_PORTAL_FRAMES = TagKey.create(Registries.BLOCK, id("cavaryn_portal_frames")); private Blocks() { } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java new file mode 100644 index 00000000..eca7464d --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/AntDimensionPortalBlock.java @@ -0,0 +1,154 @@ +package com.craisinlord.antarchy.content.block; + +import com.craisinlord.antarchy.content.portal.PermanentPortalManager; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.util.RandomSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.RenderShape; +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.EnumProperty; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +public final class AntDimensionPortalBlock extends Block { + public static final EnumProperty AXIS = BlockStateProperties.HORIZONTAL_AXIS; + private static final VoxelShape X_SHAPE = Block.box(0.0D, 0.0D, 6.0D, 16.0D, 16.0D, 10.0D); + private static final VoxelShape Z_SHAPE = Block.box(6.0D, 0.0D, 0.0D, 10.0D, 16.0D, 16.0D); + + private final PermanentPortalType type; + private final MapCodec codec; + + public AntDimensionPortalBlock(PermanentPortalType type, BlockBehaviour.Properties properties) { + super(properties); + this.type = type; + this.codec = Block.simpleCodec(ignored -> this); + this.registerDefaultState(this.stateDefinition.any().setValue(AXIS, Direction.Axis.X)); + } + + @Override + public MapCodec codec() { + return this.codec; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + builder.add(AXIS); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return state.getValue(AXIS) == Direction.Axis.X ? X_SHAPE : Z_SHAPE; + } + + @Override + protected VoxelShape getCollisionShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + protected VoxelShape getVisualShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.empty(); + } + + @Override + protected VoxelShape getBlockSupportShape(BlockState state, BlockGetter level, BlockPos pos) { + return Shapes.empty(); + } + + @Override + protected RenderShape getRenderShape(BlockState state) { + return RenderShape.MODEL; + } + + @Override + protected boolean skipRendering(BlockState state, BlockState adjacentBlockState, Direction side) { + return adjacentBlockState.is(this) || super.skipRendering(state, adjacentBlockState, side); + } + + @Override + public void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + if (!level.isClientSide()) { + PermanentPortalManager.handleEntityInsidePortal(entity, this.type); + } + } + + @Override + protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { + super.onPlace(state, level, pos, oldState, movedByPiston); + if (!level.isClientSide() && !state.is(oldState.getBlock())) { + level.scheduleTick(pos, this, 1); + } + } + + @Override + protected BlockState updateShape( + BlockState state, + Direction direction, + BlockState neighborState, + LevelAccessor level, + BlockPos pos, + BlockPos neighborPos + ) { + if (level instanceof ServerLevel serverLevel) { + serverLevel.scheduleTick(pos, this, 1); + } + return super.updateShape(state, direction, neighborState, level, pos, neighborPos); + } + + @Override + protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { + if (!PermanentPortalManager.isPortalStillValid(level, pos, this.type, state.getValue(AXIS))) { + level.setBlock(pos, Blocks.AIR.defaultBlockState(), Block.UPDATE_ALL); + } + } + + @Override + public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) { + if (random.nextInt(100) == 0) { + level.playLocalSound(pos.getX() + 0.5D, pos.getY() + 0.5D, pos.getZ() + 0.5D, SoundEvents.PORTAL_AMBIENT, SoundSource.BLOCKS, 0.35F, 0.9F + random.nextFloat() * 0.2F, false); + } + + ParticleOptions particle = switch (this.type) { + case ELYTHIA -> ParticleTypes.SPORE_BLOSSOM_AIR; + case THORAXIS -> ParticleTypes.PORTAL; + case CAVARYN -> ParticleTypes.MYCELIUM; + }; + + for (int i = 0; i < 4; i++) { + double x = pos.getX() + random.nextDouble(); + double y = pos.getY() + random.nextDouble(); + double z = pos.getZ() + random.nextDouble(); + if (state.getValue(AXIS) == Direction.Axis.X) { + z = pos.getZ() + 0.5D + (random.nextDouble() - 0.5D) * 0.25D; + } else { + x = pos.getX() + 0.5D + (random.nextDouble() - 0.5D) * 0.25D; + } + level.addParticle( + particle, + x, + y, + z, + (random.nextDouble() - 0.5D) * 0.2D, + (random.nextDouble() - 0.5D) * 0.2D, + (random.nextDouble() - 0.5D) * 0.2D + ); + } + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java index ef1d89ca..8d4264e8 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushBlock.java @@ -8,6 +8,11 @@ import net.minecraft.core.registries.BuiltInRegistries; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -22,6 +27,7 @@ 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.DirectionProperty; import net.minecraft.world.level.block.state.properties.IntegerProperty; +import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -251,4 +257,35 @@ public class BigBushBlock extends BushBlock implements BonemealableBlock { } placeStage(level, target.origin(), target.state()); } + + /** Pops a bonus item when bone meal is used on a fully-grown (age 2) bush; shared with {@link BigBushPartBlock}. */ + public static boolean grantBonemealBonus(Level level, BlockPos originPos, BlockState originState, Player player, ItemStack stack) { + if (!(originState.getBlock() instanceof BigBushBlock bigBush) || originState.getValue(AGE) != 2) { + return false; + } + if (!level.isClientSide) { + bigBush.popResource(level, originPos, new ItemStack(bigBush, 1)); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + level.levelEvent(1505, originPos, 15); + } + return true; + } + + @Override + protected ItemInteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (stack.is(Items.BONE_MEAL) && grantBonemealBonus(level, pos, state, player, stack)) { + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java index e9ea7036..a57ff233 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/BigBushPartBlock.java @@ -5,8 +5,11 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Items; import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.Level; import net.minecraft.world.level.LevelAccessor; @@ -16,6 +19,7 @@ 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.BooleanProperty; +import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -119,6 +123,25 @@ public class BigBushPartBlock extends Block { } } + @Override + protected ItemInteractionResult useItemOn( + ItemStack stack, + BlockState state, + Level level, + BlockPos pos, + Player player, + InteractionHand hand, + BlockHitResult hitResult + ) { + if (stack.is(Items.BONE_MEAL)) { + BlockPos origin = findOrigin(level, pos); + if (origin != null && BigBushBlock.grantBonemealBonus(level, origin, level.getBlockState(origin), player, stack)) { + return ItemInteractionResult.sidedSuccess(level.isClientSide); + } + } + return super.useItemOn(stack, state, level, pos, player, hand, hitResult); + } + @Override public ItemStack getCloneItemStack(LevelReader level, BlockPos pos, BlockState state) { BlockPos origin = findOrigin(level, pos); diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java new file mode 100644 index 00000000..a8c023c9 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVineBlock.java @@ -0,0 +1,41 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.WeepingVinesBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +@SuppressWarnings({"rawtypes", "unchecked"}) +public class OuranwoodVineBlock extends WeepingVinesBlock { + public static final MapCodec CODEC = simpleCodec(OuranwoodVineBlock::new); + private static Block bodyBlock; + + public OuranwoodVineBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return (MapCodec) CODEC; + } + + @Override + protected Block getBodyBlock() { + return bodyBlock; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.block(); + } + + public static void bindBodyBlock(Block block) { + bodyBlock = block; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java new file mode 100644 index 00000000..4d663c0b --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/block/OuranwoodVinePlantBlock.java @@ -0,0 +1,42 @@ +package com.craisinlord.antarchy.content.block; + +import com.mojang.serialization.MapCodec; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.GrowingPlantHeadBlock; +import net.minecraft.world.level.block.WeepingVinesBlock; +import net.minecraft.world.level.block.WeepingVinesPlantBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.BlockBehaviour; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; + +@SuppressWarnings({"rawtypes", "unchecked"}) +public class OuranwoodVinePlantBlock extends WeepingVinesPlantBlock { + public static final MapCodec CODEC = simpleCodec(OuranwoodVinePlantBlock::new); + private static GrowingPlantHeadBlock headBlock; + + public OuranwoodVinePlantBlock(BlockBehaviour.Properties properties) { + super(properties); + } + + @Override + public MapCodec codec() { + return (MapCodec) CODEC; + } + + @Override + protected GrowingPlantHeadBlock getHeadBlock() { + return headBlock; + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + return Shapes.block(); + } + + public static void bindHeadBlock(WeepingVinesBlock block) { + headBlock = block; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java index fdddadf9..a1ed6773 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/AlphaMantisEntity.java @@ -52,7 +52,10 @@ public class AlphaMantisEntity extends MantisEntity { } public static boolean checkAlphaMantisSpawnRules(EntityType entityType, ServerLevelAccessor level, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - if (spawnReason == MobSpawnType.SPAWN_EGG || spawnReason == MobSpawnType.SPAWNER || spawnReason == MobSpawnType.COMMAND) { + if (spawnReason == MobSpawnType.SPAWN_EGG + || spawnReason == MobSpawnType.SPAWNER + || spawnReason == MobSpawnType.TRIAL_SPAWNER + || spawnReason == MobSpawnType.COMMAND) { return true; } @@ -73,14 +76,12 @@ public class AlphaMantisEntity extends MantisEntity { return false; } - // Only one alpha at a time in the area if (!level.getLevel().getEntitiesOfClass(AlphaMantisEntity.class, new AABB(pos).inflate(128.0D), Entity::isAlive).isEmpty()) { return false; } boolean ignoreLightLevel = AntarchySettings.mantisIgnoreLightLevel(); - // Daytime overworld spawns can't pass the vanilla darkness check, so no light gate here if (level.getLevel().isDay() && level.getBiome(pos).is(AntarchyTags.Biomes.MANTIS_OVERWORLD_SPAWN_BIOMES)) { return level.canSeeSky(pos); } @@ -181,7 +182,6 @@ public class AlphaMantisEntity extends MantisEntity { @Override public void setTarget(@Nullable LivingEntity target) { super.setTarget(target); - // A boss that despawns mid-fight is no boss — stay loaded once engaged if (target != null) { this.setPersistenceRequired(); } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java index 8fa42815..613e1fd1 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/DorrieEntity.java @@ -23,6 +23,7 @@ import net.minecraft.world.entity.LivingEntity; 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.MoveControl; import net.minecraft.world.entity.ai.control.SmoothSwimmingLookControl; import net.minecraft.world.entity.ai.control.SmoothSwimmingMoveControl; import net.minecraft.world.entity.ai.goal.BreathAirGoal; @@ -30,8 +31,10 @@ 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.WaterAvoidingRandomStrollGoal; import net.minecraft.world.entity.ai.goal.RandomSwimmingGoal; import net.minecraft.world.entity.ai.goal.TryFindWaterGoal; +import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.ai.navigation.WaterBoundPathNavigation; import net.minecraft.world.entity.animal.Animal; @@ -39,6 +42,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; +import net.minecraft.world.level.pathfinder.PathType; import net.minecraft.world.phys.Vec3; import org.jetbrains.annotations.Nullable; import software.bernie.geckolib.animatable.GeoEntity; @@ -59,18 +63,29 @@ public class DorrieEntity extends Animal implements GeoEntity { SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.BOOLEAN); private static final EntityDataAccessor JUMP_CHARGE = SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); + private static final EntityDataAccessor QUIRK_TICKS = + SynchedEntityData.defineId(DorrieEntity.class, EntityDataSerializers.INT); private static final int MAX_CHARGE_TICKS = 40; private static final float WATER_RIDE_SPEED = 1.26F; private static final float LAND_BEACH_SPEED = 0.04F; + private static final int QUIRK_DURATION_TICKS = 65; + private static final int MIN_QUIRK_COOLDOWN_TICKS = 180; + private static final int MAX_QUIRK_COOLDOWN_TICKS = 320; + private static final double MOVING_ANIM_THRESHOLD_SQ = 0.0025D; - private static final RawAnimation IDLE_ANIM = RawAnimation.begin().thenLoop("idle"); + private static final RawAnimation IDLE_GROUND_ANIM = RawAnimation.begin().thenLoop("idle_ground"); + private static final RawAnimation IDLE_WATER_ANIM = RawAnimation.begin().thenLoop("idle_water"); + private static final RawAnimation WALK_ANIM = RawAnimation.begin().thenLoop("walk"); private static final RawAnimation SWIM_ANIM = RawAnimation.begin().thenLoop("swim"); - private static final RawAnimation JUMP_START_ANIM = RawAnimation.begin().thenPlay("jump_1"); - private static final RawAnimation JUMP_LOOP_ANIM = RawAnimation.begin().thenLoop("jump_2"); - private static final RawAnimation JUMP_LAND_ANIM = RawAnimation.begin().thenPlay("jump_3"); + private static final RawAnimation JUMP_START_ANIM = RawAnimation.begin().thenPlay("jump_start"); + private static final RawAnimation JUMP_LOOP_ANIM = RawAnimation.begin().thenLoop("jump_idle"); + private static final RawAnimation JUMP_LAND_ANIM = RawAnimation.begin().thenPlay("jump_end"); + private static final RawAnimation QUIRK_ANIM = RawAnimation.begin().thenPlay("quirk"); private final AnimatableInstanceCache geoCache = GeckoLibUtil.createInstanceCache(this); + private final MoveControl landMoveControl; + private final MoveControl waterMoveControl; private static final int RIDES_TO_TAME = 4; private static final int BUCK_DELAY_TICKS = 60; @@ -83,11 +98,17 @@ public class DorrieEntity extends Animal implements GeoEntity { private int rideAttempts = 0; private int buckTimer = 0; private int swimForwardTicks = 0; + private int quirkCooldownTicks = MIN_QUIRK_COOLDOWN_TICKS; + private boolean usingLandNavigation = true; public DorrieEntity(EntityType entityType, Level level) { super(entityType, level); - this.moveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 1.0F, true); + this.landMoveControl = new MoveControl(this); + this.waterMoveControl = new SmoothSwimmingMoveControl(this, 85, 10, 0.02F, 1.0F, true); + this.moveControl = this.landMoveControl; this.lookControl = new SmoothSwimmingLookControl(this, 10); + this.setPathfindingMalus(PathType.WATER, 0.0F); + this.setPathfindingMalus(PathType.WATER_BORDER, 0.0F); } @Override @@ -96,11 +117,12 @@ public class DorrieEntity extends Animal implements GeoEntity { builder.define(HAS_SADDLE, false); builder.define(TAMED, false); builder.define(JUMP_CHARGE, 0); + builder.define(QUIRK_TICKS, 0); } @Override protected PathNavigation createNavigation(Level level) { - return new WaterBoundPathNavigation(this, level); + return this.createLandNavigation(level); } @Override @@ -110,8 +132,9 @@ public class DorrieEntity extends Animal implements GeoEntity { this.goalSelector.addGoal(2, new TryFindWaterGoal(this)); this.goalSelector.addGoal(3, new HuntCheepGoal(this)); this.goalSelector.addGoal(4, new RandomSwimmingGoal(this, 1.0D, 10)); - this.goalSelector.addGoal(5, new LookAtPlayerGoal(this, Player.class, 6.0F)); - this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); + this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.45D, 60)); + this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); + this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); } public static AttributeSupplier.Builder createAttributes() { @@ -146,6 +169,14 @@ public class DorrieEntity extends Animal implements GeoEntity { this.entityData.set(JUMP_CHARGE, charge); } + public int getQuirkTicks() { + return this.entityData.get(QUIRK_TICKS); + } + + private void setQuirkTicks(int ticks) { + this.entityData.set(QUIRK_TICKS, ticks); + } + @Override public void addAdditionalSaveData(CompoundTag tag) { super.addAdditionalSaveData(tag); @@ -173,7 +204,18 @@ public class DorrieEntity extends Animal implements GeoEntity { return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (this.hasSaddle() && stack.isEmpty() && !player.isPassengerOfSameVehicle(this)) { + if (this.hasSaddle() && !player.isPassengerOfSameVehicle(this)) { + if (!stack.isEmpty()) { + return super.mobInteract(player, hand); + } + + if (!player.isShiftKeyDown()) { + if (!this.level().isClientSide) { + player.startRiding(this); + } + return InteractionResult.sidedSuccess(this.level().isClientSide); + } + if (!this.level().isClientSide) { this.setSaddle(false); this.spawnAtLocation(new ItemStack(Items.SADDLE)); @@ -193,13 +235,6 @@ public class DorrieEntity extends Animal implements GeoEntity { return InteractionResult.sidedSuccess(this.level().isClientSide); } - if (this.hasSaddle() && !player.isPassengerOfSameVehicle(this)) { - if (!this.level().isClientSide) { - player.startRiding(this); - } - return InteractionResult.sidedSuccess(this.level().isClientSide); - } - return super.mobInteract(player, hand); } @@ -234,6 +269,7 @@ public class DorrieEntity extends Animal implements GeoEntity { @Override public void tick() { super.tick(); + this.updateNavigationMode(); if (this.getControllingPassenger() instanceof Player player) { this.setYRot(player.getYRot()); @@ -275,6 +311,10 @@ public class DorrieEntity extends Animal implements GeoEntity { setJumpCharge((int) ((chargeTicks / (float) MAX_CHARGE_TICKS) * 100)); } + if (!this.level().isClientSide) { + this.tickQuirkAnimation(); + } + if (this.isInWater() && !isLeaping) { Vec3 mov = this.getDeltaMovement(); double push = this.isUnderWater() ? 0.07D : 0.015D; @@ -384,13 +424,29 @@ public class DorrieEntity extends Animal implements GeoEntity { } private PlayState mainAnimController(AnimationState state) { + state.getController().setAnimationSpeed(1.0D); + if (landAnimTicks > 0) { return state.setAndContinue(JUMP_LAND_ANIM); } if (isLeaping) { return state.setAndContinue(wasInAir ? JUMP_LOOP_ANIM : JUMP_START_ANIM); } - return state.setAndContinue(state.isMoving() ? SWIM_ANIM : IDLE_ANIM); + if (this.getQuirkTicks() > 0) { + return state.setAndContinue(QUIRK_ANIM); + } + + boolean moving = this.isMovingForAnimation(state); + if (this.isInWater() || this.isInLava()) { + return state.setAndContinue(moving ? SWIM_ANIM : IDLE_WATER_ANIM); + } + + if (moving) { + state.getController().setAnimationSpeed(0.75D); + return state.setAndContinue(WALK_ANIM); + } + + return state.setAndContinue(IDLE_GROUND_ANIM); } @Override @@ -407,6 +463,78 @@ public class DorrieEntity extends Animal implements GeoEntity { return !stack.isEmpty() && stack.is(BuiltInRegistries.ITEM.getOptional(CHEEP_ITEM_ID).orElse(Items.AIR)); } + private PathNavigation createLandNavigation(Level level) { + GroundPathNavigation navigation = new GroundPathNavigation(this, level); + navigation.setCanFloat(true); + navigation.setCanOpenDoors(false); + navigation.setCanPassDoors(true); + return navigation; + } + + private PathNavigation createWaterNavigation(Level level) { + return new WaterBoundPathNavigation(this, level); + } + + private void updateNavigationMode() { + boolean shouldUseLandNavigation = !this.isInWater() && !this.isUnderWater() && !this.isInLava(); + if (this.navigation == null || this.usingLandNavigation != shouldUseLandNavigation) { + this.usingLandNavigation = shouldUseLandNavigation; + if (this.navigation != null) { + this.navigation.stop(); + } + this.navigation = shouldUseLandNavigation + ? this.createLandNavigation(this.level()) + : this.createWaterNavigation(this.level()); + this.moveControl = shouldUseLandNavigation ? this.landMoveControl : this.waterMoveControl; + } + } + + private void tickQuirkAnimation() { + if (this.getQuirkTicks() > 0) { + if (this.canUseQuirkAnimation()) { + this.setQuirkTicks(this.getQuirkTicks() - 1); + } else { + this.setQuirkTicks(0); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + return; + } + + if (this.quirkCooldownTicks > 0) { + this.quirkCooldownTicks--; + return; + } + + if (this.canUseQuirkAnimation()) { + this.setQuirkTicks(QUIRK_DURATION_TICKS); + this.quirkCooldownTicks = this.nextQuirkCooldown(); + } + } + + private int nextQuirkCooldown() { + return MIN_QUIRK_COOLDOWN_TICKS + this.random.nextInt(MAX_QUIRK_COOLDOWN_TICKS - MIN_QUIRK_COOLDOWN_TICKS + 1); + } + + private boolean canUseQuirkAnimation() { + return this.isInWater() + && this.getControllingPassenger() == null + && !this.isLeaping + && this.landAnimTicks <= 0 + && !this.isCharging + && !this.isMovingForAnimation(null); + } + + private boolean isMovingForAnimation(@Nullable AnimationState state) { + if (state != null && state.isMoving()) { + return true; + } + if (this.getControllingPassenger() instanceof Player player) { + return Math.abs(player.zza) > 0.05F || Math.abs(player.xxa) > 0.05F; + } + return this.getDeltaMovement().horizontalDistanceSqr() > MOVING_ANIM_THRESHOLD_SQ + || this.getNavigation().isInProgress(); + } + private static class HuntCheepGoal extends Goal { private static final int COOLDOWN_TICKS = 600; private static final double HUNT_RANGE = 16.0D; diff --git a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java index 4e435a6e..033bf901 100644 --- a/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java +++ b/common/src/main/java/com/craisinlord/antarchy/content/entity/MantisEntity.java @@ -90,7 +90,10 @@ public class MantisEntity extends Monster implements GeoEntity { } 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) { + if (spawnReason == MobSpawnType.SPAWN_EGG + || spawnReason == MobSpawnType.SPAWNER + || spawnReason == MobSpawnType.TRIAL_SPAWNER + || spawnReason == MobSpawnType.COMMAND) { return true; } diff --git a/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java new file mode 100644 index 00000000..04cf7aab --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalManager.java @@ -0,0 +1,129 @@ +package com.craisinlord.antarchy.content.portal; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundEvents; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public final class PermanentPortalManager { + private static final int TELEPORT_DELAY_TICKS = 20; + private static final int ACTIVATION_SEARCH_RADIUS = 2; + private static final Map WARMUPS = new HashMap<>(); + + private PermanentPortalManager() { + } + + public static void handleSacrifice(LivingEntity entity) { + PermanentPortalType type = PermanentPortalType.fromSacrifice(entity); + if (type == null || !(entity.level() instanceof ServerLevel serverLevel)) { + return; + } + + PermanentPortalShape shape = findInactiveShape(serverLevel, entity.getBoundingBox(), type); + if (shape == null) { + return; + } + + shape.fill(serverLevel); + Vec3 center = shape.center(); + serverLevel.playSound(null, center.x, center.y, center.z, SoundEvents.END_PORTAL_SPAWN, SoundSource.BLOCKS, 0.9F, 0.9F); + spawnActivationParticles(serverLevel, type, center); + } + + public static void handleEntityInsidePortal(Entity entity, PermanentPortalType type) { + if (!(entity.level() instanceof ServerLevel serverLevel) || !type.isEnabled() || entity.isPassenger() || entity.isVehicle()) { + return; + } + if (entity.isOnPortalCooldown()) { + WARMUPS.remove(entity.getUUID()); + return; + } + + long gameTime = serverLevel.getGameTime(); + PortalWarmup warmup = WARMUPS.computeIfAbsent(entity.getUUID(), ignored -> new PortalWarmup()); + if (warmup.type != type || warmup.lastSeenTick < gameTime - 1) { + warmup.ticks = 0; + } + warmup.type = type; + if (warmup.lastSeenTick != gameTime) { + warmup.ticks++; + warmup.lastSeenTick = gameTime; + } + + if (warmup.ticks < TELEPORT_DELAY_TICKS) { + return; + } + + WARMUPS.remove(entity.getUUID()); + PermanentPortalTeleporter.teleport(entity, type); + if (entity.level() instanceof ServerLevel currentLevel) { + currentLevel.playSound(null, entity.getX(), entity.getY(), entity.getZ(), SoundEvents.ENDERMAN_TELEPORT, SoundSource.PLAYERS, 0.8F, 1.0F); + } + } + + public static boolean isPortalStillValid(ServerLevel level, BlockPos pos, PermanentPortalType type, Direction.Axis axis) { + PermanentPortalShape shape = PermanentPortalShape.findActive(level, pos, type, axis); + return shape != null && shape.contains(pos); + } + + @Nullable + private static PermanentPortalShape findInactiveShape(ServerLevel level, AABB bounds, PermanentPortalType type) { + int minX = (int) Math.floor(bounds.minX + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int minY = (int) Math.floor(bounds.minY + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int minZ = (int) Math.floor(bounds.minZ + 0.001D) - ACTIVATION_SEARCH_RADIUS; + int maxX = (int) Math.floor(bounds.maxX - 0.001D) + ACTIVATION_SEARCH_RADIUS; + int maxY = (int) Math.floor(bounds.maxY - 0.001D) + ACTIVATION_SEARCH_RADIUS; + int maxZ = (int) Math.floor(bounds.maxZ - 0.001D) + ACTIVATION_SEARCH_RADIUS; + + for (int x = minX; x <= maxX; x++) { + for (int y = minY; y <= maxY; y++) { + for (int z = minZ; z <= maxZ; z++) { + BlockPos candidate = new BlockPos(x, y, z); + PermanentPortalShape xShape = PermanentPortalShape.findInactive(level, candidate, type, Direction.Axis.X); + if (xShape != null && xShape.intersects(bounds)) { + return xShape; + } + PermanentPortalShape zShape = PermanentPortalShape.findInactive(level, candidate, type, Direction.Axis.Z); + if (zShape != null && zShape.intersects(bounds)) { + return zShape; + } + } + } + } + + return null; + } + + private static void spawnActivationParticles(ServerLevel level, PermanentPortalType type, Vec3 center) { + switch (type) { + case ELYTHIA -> { + level.sendParticles(ParticleTypes.SPORE_BLOSSOM_AIR, center.x, center.y, center.z, 24, 0.8D, 1.2D, 0.8D, 0.02D); + level.sendParticles(ParticleTypes.HAPPY_VILLAGER, center.x, center.y, center.z, 12, 0.6D, 1.0D, 0.6D, 0.02D); + } + case THORAXIS -> { + level.sendParticles(ParticleTypes.PORTAL, center.x, center.y, center.z, 32, 0.8D, 1.2D, 0.8D, 0.15D); + level.sendParticles(ParticleTypes.REVERSE_PORTAL, center.x, center.y, center.z, 10, 0.5D, 0.8D, 0.5D, 0.01D); + } + case CAVARYN -> { + level.sendParticles(ParticleTypes.MYCELIUM, center.x, center.y, center.z, 24, 0.8D, 1.2D, 0.8D, 0.01D); + level.sendParticles(ParticleTypes.FALLING_SPORE_BLOSSOM, center.x, center.y, center.z, 16, 0.6D, 1.0D, 0.6D, 0.01D); + } + } + } + + private static final class PortalWarmup { + private PermanentPortalType type; + private long lastSeenTick; + private int ticks; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java new file mode 100644 index 00000000..879dc473 --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalShape.java @@ -0,0 +1,203 @@ +package com.craisinlord.antarchy.content.portal; + +import java.util.function.Consumer; +import java.util.function.Predicate; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.tags.TagKey; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public final class PermanentPortalShape { + public static final int MIN_WIDTH = 2; + public static final int MIN_HEIGHT = 3; + public static final int MAX_SIZE = 21; + + private final PermanentPortalType type; + private final Direction.Axis axis; + private final BlockPos bottomLeft; + private final int width; + private final int height; + + private PermanentPortalShape(PermanentPortalType type, Direction.Axis axis, BlockPos bottomLeft, int width, int height) { + this.type = type; + this.axis = axis; + this.bottomLeft = bottomLeft; + this.width = width; + this.height = height; + } + + @Nullable + public static PermanentPortalShape findInactive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { + return find(level, interiorPos, type, axis, state -> state.isAir()); + } + + @Nullable + public static PermanentPortalShape findActive(BlockGetter level, BlockPos interiorPos, PermanentPortalType type, Direction.Axis axis) { + Block portalBlock = type.portalBlock(); + return find(level, interiorPos, type, axis, state -> state.is(portalBlock)); + } + + @Nullable + private static PermanentPortalShape find( + BlockGetter level, + BlockPos interiorPos, + PermanentPortalType type, + Direction.Axis axis, + Predicate interiorPredicate + ) { + if (axis == Direction.Axis.Y || !interiorPredicate.test(level.getBlockState(interiorPos))) { + return null; + } + + Direction widthDirection = axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + Direction leftDirection = widthDirection.getOpposite(); + BlockPos cursor = interiorPos; + + for (int i = 0; i < MAX_SIZE && interiorPredicate.test(level.getBlockState(cursor.below())); i++) { + cursor = cursor.below(); + } + + for (int i = 0; i < MAX_SIZE && interiorPredicate.test(level.getBlockState(cursor.relative(leftDirection))); i++) { + cursor = cursor.relative(leftDirection); + } + + int width = measureWidth(level, cursor, widthDirection, type.frameTag(), interiorPredicate); + if (width < MIN_WIDTH) { + return null; + } + + int height = measureHeight(level, cursor, widthDirection, width, type.frameTag(), interiorPredicate); + if (height < MIN_HEIGHT) { + return null; + } + + return new PermanentPortalShape(type, axis, cursor.immutable(), width, height); + } + + private static int measureWidth( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + TagKey frameTag, + Predicate interiorPredicate + ) { + if (!level.getBlockState(bottomLeft.relative(widthDirection.getOpposite())).is(frameTag)) { + return 0; + } + + int width = 0; + while (width < MAX_SIZE && interiorPredicate.test(level.getBlockState(bottomLeft.relative(widthDirection, width)))) { + if (!level.getBlockState(bottomLeft.relative(widthDirection, width).below()).is(frameTag)) { + return 0; + } + width++; + } + + if (width < MIN_WIDTH || width > MAX_SIZE) { + return 0; + } + + return level.getBlockState(bottomLeft.relative(widthDirection, width)).is(frameTag) ? width : 0; + } + + private static int measureHeight( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + int width, + TagKey frameTag, + Predicate interiorPredicate + ) { + BlockPos leftFrameBase = bottomLeft.relative(widthDirection.getOpposite()); + BlockPos rightFrameBase = bottomLeft.relative(widthDirection, width); + + for (int height = 0; height < MAX_SIZE; height++) { + if (!level.getBlockState(leftFrameBase.above(height)).is(frameTag) + || !level.getBlockState(rightFrameBase.above(height)).is(frameTag)) { + return 0; + } + + for (int x = 0; x < width; x++) { + BlockPos interiorPos = bottomLeft.relative(widthDirection, x).above(height); + if (!interiorPredicate.test(level.getBlockState(interiorPos))) { + if (height < MIN_HEIGHT) { + return 0; + } + return hasTopFrame(level, bottomLeft, widthDirection, width, height, frameTag) ? height : 0; + } + } + } + + return hasTopFrame(level, bottomLeft, widthDirection, width, MAX_SIZE, frameTag) ? MAX_SIZE : 0; + } + + private static boolean hasTopFrame( + BlockGetter level, + BlockPos bottomLeft, + Direction widthDirection, + int width, + int topY, + TagKey frameTag + ) { + for (int x = 0; x < width; x++) { + if (!level.getBlockState(bottomLeft.relative(widthDirection, x).above(topY)).is(frameTag)) { + return false; + } + } + return true; + } + + public void fill(ServerLevel level) { + BlockState portalState = this.type.portalBlock().defaultBlockState().setValue(BlockStateProperties.HORIZONTAL_AXIS, this.axis); + this.forEachInterior(pos -> level.setBlock(pos, portalState, Block.UPDATE_ALL)); + } + + public boolean contains(BlockPos pos) { + if (pos.getY() < this.bottomLeft.getY() || pos.getY() >= this.bottomLeft.getY() + this.height) { + return false; + } + + if (this.axis == Direction.Axis.X) { + return pos.getZ() == this.bottomLeft.getZ() + && pos.getX() >= this.bottomLeft.getX() + && pos.getX() < this.bottomLeft.getX() + this.width; + } + + return pos.getX() == this.bottomLeft.getX() + && pos.getZ() >= this.bottomLeft.getZ() + && pos.getZ() < this.bottomLeft.getZ() + this.width; + } + + public boolean intersects(AABB box) { + final boolean[] intersects = {false}; + this.forEachInterior(pos -> { + if (box.intersects(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1.0D, pos.getY() + 1.0D, pos.getZ() + 1.0D)) { + intersects[0] = true; + } + }); + return intersects[0]; + } + + public void forEachInterior(Consumer consumer) { + Direction widthDirection = this.axis == Direction.Axis.X ? Direction.EAST : Direction.SOUTH; + for (int y = 0; y < this.height; y++) { + for (int x = 0; x < this.width; x++) { + consumer.accept(this.bottomLeft.relative(widthDirection, x).above(y)); + } + } + } + + public Vec3 center() { + if (this.axis == Direction.Axis.X) { + return new Vec3(this.bottomLeft.getX() + (this.width / 2.0D), this.bottomLeft.getY() + (this.height / 2.0D), this.bottomLeft.getZ() + 0.5D); + } + return new Vec3(this.bottomLeft.getX() + 0.5D, this.bottomLeft.getY() + (this.height / 2.0D), this.bottomLeft.getZ() + (this.width / 2.0D)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java new file mode 100644 index 00000000..0eabe59c --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalTeleporter.java @@ -0,0 +1,150 @@ +package com.craisinlord.antarchy.content.portal; + +import java.util.LinkedHashSet; +import java.util.Set; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.vehicle.DismountHelper; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.level.portal.DimensionTransition; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.Nullable; + +public final class PermanentPortalTeleporter { + private static final int SEARCH_RADIUS = 8; + private static final int VERTICAL_SEARCH = 24; + + private PermanentPortalTeleporter() { + } + + public static void teleport(Entity entity, PermanentPortalType type) { + if (!(entity.level() instanceof ServerLevel sourceLevel) || !entity.isAlive()) { + return; + } + + ServerLevel destination = resolveDestination(sourceLevel, type); + if (destination == null) { + return; + } + + Vec3 arrival = findArrivalPosition(entity, destination, entity.blockPosition(), type.platformBlock().defaultBlockState()); + Entity movedEntity = moveEntity(entity, destination, arrival); + if (movedEntity != null) { + movedEntity.setPortalCooldown(); + } + } + + @Nullable + private static ServerLevel resolveDestination(ServerLevel sourceLevel, PermanentPortalType type) { + if (sourceLevel.dimension() == type.primaryDimension()) { + return sourceLevel.getServer().overworld(); + } + return sourceLevel.getServer().getLevel(type.primaryDimension()); + } + + private static Vec3 findArrivalPosition(Entity entity, ServerLevel destination, BlockPos preferredPos, BlockState platformState) { + Vec3 safe = findSafeArrivalPosition(entity, destination, preferredPos); + return safe != null ? safe : createFallbackPlatform(destination, preferredPos, platformState); + } + + @Nullable + private static Vec3 findSafeArrivalPosition(Entity entity, ServerLevel destination, BlockPos preferredPos) { + Set candidates = new LinkedHashSet<>(); + addCandidate(candidates, preferredPos); + + for (int radius = 0; radius <= SEARCH_RADIUS; radius++) { + for (int xOff = -radius; xOff <= radius; xOff++) { + for (int zOff = -radius; zOff <= radius; zOff++) { + if (radius > 0 && Math.abs(xOff) != radius && Math.abs(zOff) != radius) { + continue; + } + + BlockPos horizontalPos = preferredPos.offset(xOff, 0, zOff); + addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, horizontalPos)); + addCandidate(candidates, destination.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, horizontalPos)); + for (int yOff = 0; yOff <= VERTICAL_SEARCH; yOff++) { + addCandidate(candidates, horizontalPos.above(yOff)); + if (yOff > 0) { + addCandidate(candidates, horizontalPos.below(yOff)); + } + } + } + } + } + + for (BlockPos candidate : candidates) { + Vec3 safe = tryFindSafePosition(entity, destination, candidate); + if (safe != null) { + return safe; + } + } + + return null; + } + + private static void addCandidate(Set candidates, @Nullable BlockPos pos) { + if (pos == null) { + return; + } + + candidates.add(pos); + candidates.add(pos.above()); + if (pos.getY() > Integer.MIN_VALUE) { + candidates.add(pos.below()); + } + } + + @Nullable + private static Vec3 tryFindSafePosition(Entity entity, ServerLevel destination, BlockPos candidate) { + Vec3 safe = DismountHelper.findSafeDismountLocation(entity.getType(), destination, candidate, true); + if (safe != null) { + return safe; + } + + for (Direction direction : Direction.Plane.HORIZONTAL) { + safe = DismountHelper.findSafeDismountLocation(entity.getType(), destination, candidate.relative(direction), true); + if (safe != null) { + return safe; + } + } + + return null; + } + + private static Vec3 createFallbackPlatform(ServerLevel destination, BlockPos preferredPos, BlockState platformState) { + int minY = destination.getMinBuildHeight() + 2; + int maxY = destination.getMaxBuildHeight() - 4; + BlockPos center = new BlockPos(preferredPos.getX(), Mth.clamp(preferredPos.getY(), minY, maxY), preferredPos.getZ()); + + for (int dx = -1; dx <= 1; dx++) { + for (int dz = -1; dz <= 1; dz++) { + destination.setBlock(center.offset(dx, -1, dz), platformState, Block.UPDATE_ALL); + destination.removeBlock(center.offset(dx, 0, dz), false); + destination.removeBlock(center.offset(dx, 1, dz), false); + } + } + + return Vec3.atBottomCenterOf(center); + } + + @Nullable + private static Entity moveEntity(Entity entity, ServerLevel destination, Vec3 destinationPos) { + if (entity instanceof ServerPlayer player) { + player.teleportTo(destination, destinationPos.x, destinationPos.y, destinationPos.z, player.getYRot(), player.getXRot()); + return player; + } + + if (entity.level() == destination) { + entity.teleportTo(destinationPos.x, destinationPos.y, destinationPos.z); + return entity; + } + + return entity.changeDimension(new DimensionTransition(destination, destinationPos, Vec3.ZERO, entity.getYRot(), entity.getXRot(), DimensionTransition.DO_NOTHING)); + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java new file mode 100644 index 00000000..3737126f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/portal/PermanentPortalType.java @@ -0,0 +1,111 @@ +package com.craisinlord.antarchy.content.portal; + +import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.config.AntarchySettings; +import com.craisinlord.antarchy.content.entity.ant.BrownAntEntity; +import com.craisinlord.antarchy.content.entity.ant.RedAntEntity; +import com.craisinlord.antarchy.content.entity.ant.TermiteEntity; +import java.util.Objects; +import java.util.function.Supplier; +import net.minecraft.resources.ResourceKey; +import net.minecraft.tags.TagKey; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import org.jetbrains.annotations.Nullable; + +public enum PermanentPortalType { + ELYTHIA("elythia", AntarchySettings::brownAntDestinationDimension, AntarchySettings::elythiaPortalEnabled, AntarchyTags.Blocks.ELYTHIA_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof BrownAntEntity; + } + }, + THORAXIS("thoraxis", AntarchySettings::redAntDestinationDimension, AntarchySettings::thoraxisPortalEnabled, AntarchyTags.Blocks.THORAXIS_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof RedAntEntity; + } + }, + CAVARYN("cavaryn", AntarchySettings::termiteDestinationDimension, AntarchySettings::cavarynPortalEnabled, AntarchyTags.Blocks.CAVARYN_PORTAL_FRAMES) { + @Override + boolean matchesSacrifice(LivingEntity entity) { + return entity instanceof TermiteEntity; + } + }; + + private final String id; + private final Supplier> primaryDimensionSupplier; + private final Supplier enabledSupplier; + private final TagKey frameTag; + private Supplier platformBlockSupplier; + private Supplier portalBlockSupplier; + + PermanentPortalType(String id, Supplier> primaryDimensionSupplier, Supplier enabledSupplier, TagKey frameTag) { + this.id = id; + this.primaryDimensionSupplier = primaryDimensionSupplier; + this.enabledSupplier = enabledSupplier; + this.frameTag = frameTag; + } + + public static void bindBlocks( + Supplier elythiaPlatform, + Supplier elythiaPortal, + Supplier thoraxisPlatform, + Supplier thoraxisPortal, + Supplier cavarynPlatform, + Supplier cavarynPortal + ) { + ELYTHIA.bind(elythiaPlatform, elythiaPortal); + THORAXIS.bind(thoraxisPlatform, thoraxisPortal); + CAVARYN.bind(cavarynPlatform, cavarynPortal); + } + + public static boolean portalsEnabled() { + return AntarchySettings.permanentPortalsEnabled(); + } + + @Nullable + public static PermanentPortalType fromSacrifice(LivingEntity entity) { + if (!portalsEnabled()) { + return null; + } + for (PermanentPortalType type : values()) { + if (type.isEnabled() && type.matchesSacrifice(entity)) { + return type; + } + } + return null; + } + + private void bind(Supplier platformBlockSupplier, Supplier portalBlockSupplier) { + this.platformBlockSupplier = Objects.requireNonNull(platformBlockSupplier); + this.portalBlockSupplier = Objects.requireNonNull(portalBlockSupplier); + } + + public String id() { + return this.id; + } + + public boolean isEnabled() { + return portalsEnabled() && this.enabledSupplier.get(); + } + + public ResourceKey primaryDimension() { + return this.primaryDimensionSupplier.get(); + } + + public TagKey frameTag() { + return this.frameTag; + } + + public Block platformBlock() { + return Objects.requireNonNull(this.platformBlockSupplier, "Platform block supplier not bound for " + this.id).get(); + } + + public Block portalBlock() { + return Objects.requireNonNull(this.portalBlockSupplier, "Portal block supplier not bound for " + this.id).get(); + } + + abstract boolean matchesSacrifice(LivingEntity entity); +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/BigBushWorldgenFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/BigBushWorldgenFeature.java new file mode 100644 index 00000000..d2352a2f --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/BigBushWorldgenFeature.java @@ -0,0 +1,73 @@ +package com.craisinlord.antarchy.content.worldgen; + +import com.craisinlord.antarchy.content.block.BigBushBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.util.RandomSource; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +import java.util.ArrayList; +import java.util.List; + +/** Places a {@link BigBushBlock} at a fixed growth stage (age), used for sparse overworld generation. */ +public class BigBushWorldgenFeature extends Feature { + private final int age; + + public BigBushWorldgenFeature(Codec codec, int age) { + super(codec); + this.age = age; + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos origin = context.origin(); + RandomSource random = context.random(); + + Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath("antarchy", "big_bush")); + if (!(block instanceof BigBushBlock)) { + return false; + } + + List facings = new ArrayList<>(Direction.Plane.HORIZONTAL.stream().toList()); + for (int i = facings.size() - 1; i > 0; i--) { + Direction swap = facings.set(random.nextInt(i + 1), facings.get(i)); + facings.set(i, swap); + } + + for (Direction facing : facings) { + BlockState grown = block.defaultBlockState().setValue(BigBushBlock.AGE, age).setValue(BigBushBlock.FACING, facing); + if (canPlace(level, origin, grown)) { + BigBushBlock.placeBushBlocks(level, origin, grown, Block.UPDATE_ALL); + return true; + } + if (age == 0) { + // Facing is irrelevant at age 0 (single block); no need to try every rotation. + break; + } + } + return false; + } + + private boolean canPlace(WorldGenLevel level, BlockPos origin, BlockState grown) { + if (!BigBushBlock.hasFullSupport(grown, level, origin)) { + return false; + } + List positions = new ArrayList<>(BigBushBlock.partPositions(grown, origin)); + positions.add(origin); + for (BlockPos pos : positions) { + if (!level.getBlockState(pos).canBeReplaced()) { + return false; + } + } + return true; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/content/worldgen/VeryTallGrassWorldgenFeature.java b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/VeryTallGrassWorldgenFeature.java new file mode 100644 index 00000000..40d379de --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/content/worldgen/VeryTallGrassWorldgenFeature.java @@ -0,0 +1,35 @@ +package com.craisinlord.antarchy.content.worldgen; + +import com.craisinlord.antarchy.content.block.VeryTallGrassBlock; +import com.mojang.serialization.Codec; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.WorldGenLevel; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.levelgen.feature.Feature; +import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; +import net.minecraft.world.level.levelgen.feature.configurations.NoneFeatureConfiguration; + +/** Places a single 3-tall {@link VeryTallGrassBlock} column, used for sparse overworld generation. */ +public class VeryTallGrassWorldgenFeature extends Feature { + public VeryTallGrassWorldgenFeature(Codec codec) { + super(codec); + } + + @Override + public boolean place(FeaturePlaceContext context) { + WorldGenLevel level = context.level(); + BlockPos pos = context.origin(); + if (!level.getBlockState(pos).isAir() + || !level.getBlockState(pos.above()).isAir() + || !level.getBlockState(pos.above(2)).isAir()) { + return false; + } + BlockPos below = pos.below(); + if (!level.getBlockState(below).isFaceSturdy(level, below, Direction.UP)) { + return false; + } + VeryTallGrassBlock.placeAt(level, pos, Block.UPDATE_ALL); + return true; + } +} diff --git a/common/src/main/java/com/craisinlord/antarchy/mixins/BoneMealItemTorchflowerBushMixin.java b/common/src/main/java/com/craisinlord/antarchy/mixins/BoneMealItemTorchflowerBushMixin.java new file mode 100644 index 00000000..732ec7db --- /dev/null +++ b/common/src/main/java/com/craisinlord/antarchy/mixins/BoneMealItemTorchflowerBushMixin.java @@ -0,0 +1,53 @@ +package com.craisinlord.antarchy.mixins; + +import com.craisinlord.antarchy.content.block.TorchflowerBushBlock; +import net.minecraft.core.BlockPos; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.item.BoneMealItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DoublePlantBlock; +import net.minecraft.world.level.block.state.BlockState; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(BoneMealItem.class) +public abstract class BoneMealItemTorchflowerBushMixin { + @Inject(method = "useOn", at = @At("HEAD"), cancellable = true) + private void antarchy$growTorchflowerBush(UseOnContext context, CallbackInfoReturnable cir) { + Level level = context.getLevel(); + BlockPos pos = context.getClickedPos(); + BlockState clickedState = level.getBlockState(pos); + if (!clickedState.is(Blocks.TORCHFLOWER)) { + return; + } + + Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.fromNamespaceAndPath("antarchy", "torchflower_bush")); + if (!(block instanceof TorchflowerBushBlock)) { + return; + } + + BlockState lowerState = block.defaultBlockState(); + if (!level.getBlockState(pos.above()).canBeReplaced() || !lowerState.canSurvive(level, pos)) { + return; + } + + if (!level.isClientSide) { + DoublePlantBlock.placeAt(level, lowerState, pos, Block.UPDATE_ALL); + if (context.getPlayer() == null || !context.getPlayer().getAbilities().instabuild) { + ItemStack stack = context.getItemInHand(); + stack.shrink(1); + } + level.levelEvent(1505, pos, 15); + } + + cir.setReturnValue(InteractionResult.sidedSuccess(level.isClientSide)); + } +} diff --git a/common/src/main/resources/antarchy-common.mixins.json b/common/src/main/resources/antarchy-common.mixins.json index c4e08990..f9a8a757 100644 --- a/common/src/main/resources/antarchy-common.mixins.json +++ b/common/src/main/resources/antarchy-common.mixins.json @@ -6,6 +6,7 @@ "mixins": [ "AccessorRangedAttribute", "BoneMealItemVeryTallGrassMixin", + "BoneMealItemTorchflowerBushMixin", "BlockEntityTypeSignMixin", "BloodglassMixin", "DreamFireBlockMixin", diff --git a/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json b/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json index c3ac7ebb..542b2c0c 100644 --- a/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json +++ b/common/src/main/resources/assets/antarchy/animations/dorrie.animation.json @@ -1,1075 +1,423 @@ { "format_version": "1.8.0", "animations": { - "idle": { + "idle_ground": { "loop": true, - "animation_length": 3, + "animation_length": 4, "bones": { - "left_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-16.3645, -10.7765, -27.5693] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-7.5897, -8.165, -12.5307] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-16.3645, -10.7765, -27.5693] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 2.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, "head": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 0] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.5": { - "post": { - "vector": [-7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "waist": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { + "1.0": { "post": { "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, "3.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.04362, -0.99905] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -0.95905, -0.95638] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0.04362, -0.99905] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, -1, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -2.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -12.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-16.3645, 10.7765, 27.5693] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [-7.5897, 8.165, 12.5307] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [-16.3645, 10.7765, 27.5693] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "1.5": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "3.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "jump_1": { - "loop": "hold_on_last_frame", - "animation_length": 0.25, - "bones": { - "left_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-16.3645, -10.7765, -27.5693] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [3.8261, -7.6671, 6.293] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5.7195, -7.8752, -9.4221] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm4": { - "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, -27.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, -2, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [20, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { "post": { "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "4.0": { "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [0, -1.95259, 0.43288] - }, - "0.25": { - "vector": [0, 0, 0] - } - } - }, - "neck3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [0, -1.95259, -0.43288] - }, - "0.25": { - "vector": [0, 0, 0] - } - } - }, - "waist": { - "rotation": { - "0.0": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.04362, -0.99905] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { - "post": { - "vector": [0, -2.46, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 5.04, -1] + "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "tail": { + "neck": { "rotation": { "0.0": { "post": { - "vector": [-5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "1.0": { "post": { - "vector": [2.5, 0, 0] + "vector": [15, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { + "3.0": { "post": { "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "4.0": { "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "tail3": { + "neck2": { + "rotation": { + "vector": [-15, 0, 0] + } + }, + "torso": { "rotation": { "0.0": { "post": { - "vector": [-5, 0, 0] + "vector": [1, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.125": { + "2.0": { "post": { - "vector": [7.5, 0, 0] + "vector": [-1, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "4.0": { "post": { - "vector": [-17.5, 0, 0] + "vector": [1, 0, 0] }, "lerp_mode": "catmullrom" } + }, + "position": { + "vector": [0, 0, 0] + } + }, + "right_arm": { + "rotation": { + "vector": [10, -22.5, -25] + } + }, + "right_finger": { + "rotation": { + "vector": [0, 0, 20] + } + }, + "left_arm": { + "rotation": { + "vector": [10, 22.5, 25] + } + }, + "left_finger": { + "rotation": { + "vector": [0, 0, -20] + } + }, + "left_leg": { + "rotation": { + "vector": [-7.5, -22.5, 22.5] + } + }, + "left_toe2": { + "rotation": { + "vector": [0, 0, -15] + } + }, + "right_leg": { + "rotation": { + "vector": [-7.5, 22.5, -22.5] + } + }, + "right_toe2": { + "rotation": { + "vector": [0, 0, 15] + } + } + } + }, + "idle_water": { + "loop": true, + "animation_length": 2, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1.25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [6.56, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "neck": { + "rotation": { + "vector": [12.5, 0, 0] + } + }, + "neck2": { + "rotation": { + "vector": [-15, 0, 0] } }, "right_arm": { "rotation": { "0.0": { + "post": { + "vector": [5, -15, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [16.46, -15, -27.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, -15, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, -15, -25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, -15, -32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, -21.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, 0.15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_thumb": { + "rotation": { + "vector": [15, 17.5, 12.5] + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [5, 15, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [16.46, 15, 27.53] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [5, 15, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-7.5, 15, 25] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [5, 15, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_thumb": { + "rotation": { + "vector": [15, -17.5, -12.5] + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -0.15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 21.29] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -0.15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-17.23, -22.5, 19.2] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-13.93, -22.5, 32.37] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [2.5, -22.5, 32.65] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-12.5, -22.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-22.5, -22.5, 10.37] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.23, -22.5, 19.2] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe": { + "rotation": { + "vector": [15, -17.5, -12.5] + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -18.28] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -13.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 21.72] + }, + "lerp_mode": "catmullrom" + }, + "1.2083": { "post": { "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.125": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.125": { + "1.7917": { "post": { "vector": [0, 0, -12.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm4": { - "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, 27.5] + "vector": [0, 0, -18.28] }, "lerp_mode": "catmullrom" } @@ -1079,253 +427,88 @@ "rotation": { "0.0": { "post": { - "vector": [-16.3645, 10.7765, 27.5693] + "vector": [-17.23, 22.5, -19.2] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.3333": { "post": { - "vector": [3.8261, 7.6671, -6.293] + "vector": [-13.93, 22.5, -32.37] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.7917": { "post": { - "vector": [-5.7195, 7.8752, 9.4221] + "vector": [2.5, 22.5, -32.65] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + }, + "1.3333": { "post": { - "vector": [0.3036, 0.92388, 0.23296] + "vector": [-12.5, 22.5, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [-22.5, 22.5, -10.37] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-17.23, 22.5, -19.2] }, "lerp_mode": "catmullrom" } } }, - "right_leg3": { + "right_toe": { + "rotation": { + "vector": [15, 17.5, 12.5] + } + }, + "right_toe2": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 10] + "vector": [0, 0, 18.28] }, "lerp_mode": "catmullrom" }, - "0.25": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg4": { - "rotation": { - "0.0": { + "0.2083": { "post": { "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, - "0.125": { + "0.5417": { "post": { - "vector": [0, 0, -10] + "vector": [0, 0, 13.31] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.9583": { "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "jump_2": { - "loop": true, - "animation_length": 0.1667, - "bones": { - "left_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.7195, -7.8752, -9.4221] + "vector": [0, 0, -21.72] }, "lerp_mode": "catmullrom" }, - "0.0833": { - "post": { - "vector": [-7.5897, -8.165, -12.5307] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-5.7195, -7.8752, -9.4221] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg4": { - "rotation": { - "0.0": { + "1.2083": { "post": { "vector": [0, 0, -20] }, "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { + }, + "1.7917": { "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] + "vector": [0, 0, 12.5] }, "lerp_mode": "catmullrom" }, - "0.0833": { + "2.0": { "post": { - "vector": [0, 0, -40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "position": { - "0.0": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, 0, 0] - } - }, - "neck3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "vector": [0, 0, 0] - } - }, - "waist": { - "rotation": { - "0.0": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 5.04, -1] + "vector": [0, 0, 18.28] }, "lerp_mode": "catmullrom" } @@ -1334,586 +517,20 @@ "tail": { "rotation": { "0.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.09, -1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail2": { - "rotation": { - "0.0": { - "post": { - "vector": [2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.09, -1] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [0, 0, 40] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.7195, 7.8752, 9.4221] - }, - "lerp_mode": "catmullrom" - }, - "0.0833": { - "post": { - "vector": [-7.5897, 8.165, 12.5307] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [-5.7195, 7.8752, 9.4221] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - }, - "0.1667": { - "post": { - "vector": [0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - } - } - }, - "jump_3": { - "loop": "hold_on_last_frame", - "animation_length": 0.3333, - "bones": { - "left_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.7195, -7.8752, -9.4221] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-1.917, -7.5418, -3.15] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-16.3645, -10.7765, -27.5693] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [-0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -25] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "head": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-17.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "body": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 5, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { "post": { "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + "1.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [0, -0.99144, -0.13053] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "neck3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, -0.99619, -0.08716] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "waist": { - "rotation": { - "0.0": { - "post": { - "vector": [-12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [7.5, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-2.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 5.04, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0.04362, -0.99905] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0.04362, -0.99905] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail": { - "rotation": { - "0.0": { - "post": { - "vector": [-10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.09, -1] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1922,20 +539,54 @@ "tail2": { "rotation": { "0.0": { + "post": { + "vector": [-11.82, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [-11.82, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-2.03, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { "post": { "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "1.7917": { "post": { - "vector": [5, 0, 0] + "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "2.0": { "post": { - "vector": [-5, 0, 0] + "vector": [-2.03, 0, 0] }, "lerp_mode": "catmullrom" } @@ -1943,215 +594,25 @@ "position": { "0.0": { "post": { - "vector": [0, 0.09, -1] + "vector": [0, -2, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.5": { "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [0, -1, 0] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "1.5": { "post": { - "vector": [0, 0.08716, -0.99619] - }, - "lerp_mode": "catmullrom" - } - } - }, - "tail3": { - "rotation": { - "0.0": { - "post": { - "vector": [-17.5, 0, 0] + "vector": [0, -3, 0] }, "lerp_mode": "catmullrom" }, - "0.25": { + "2.0": { "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 37.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 15] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 27.5] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -15] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 22.5] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg": { - "rotation": { - "0.0": { - "post": { - "vector": [-5.7195, 7.8752, 9.4221] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [-1.917, 7.5418, 3.15] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [-16.3645, 10.7765, 27.5693] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0.3, 0.92, 0.23] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg3": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 25] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.25": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "0.3333": { - "post": { - "vector": [0, 0, 20] + "vector": [0, -2, 0] }, "lerp_mode": "catmullrom" } @@ -2163,265 +624,529 @@ "loop": true, "animation_length": 1, "bones": { - "left_leg": { + "head": { "rotation": { "0.0": { "post": { - "vector": [-16.3645, -10.7765, -27.5693] + "vector": [-97.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [5.7195, -7.8752, 9.4221] + "vector": [-90, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.5": { "post": { - "vector": [5.7195, -7.8752, 9.4221] + "vector": [-97.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-90, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-16.3645, -10.7765, -27.5693] + "vector": [-97.5, 0, 0] }, "lerp_mode": "catmullrom" } }, "position": { - "0.0": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [-0.3036, 0.92388, 0.23296] - }, - "lerp_mode": "catmullrom" - } + "vector": [0, 4, -3] } }, - "left_leg3": { + "jaw": { + "rotation": { + "vector": [22.5, 0, 0] + } + }, + "neck": { "rotation": { "0.0": { "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - }, - "0.375": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_leg4": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, 5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, -20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "left_arm": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, -20] + "vector": [87.6, 1.09, -0.68] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [0, 0, 7.5] + "vector": [77.6, 1.09, -0.68] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 7.5] + "vector": [87.6, 1.09, -0.68] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [77.6, 1.09, -0.68] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -20] + "vector": [87.6, 1.09, -0.68] }, "lerp_mode": "catmullrom" } + }, + "position": { + "vector": [0, -1, -1] } }, - "left_arm2": { + "neck2": { + "rotation": { + "vector": [17.39426, 0.53648, 1.1707] + } + }, + "right_arm": { "rotation": { "0.0": { + "vector": [-22.5, -30, 37.5] + }, + "0.125": { + "pre": { + "vector": [-32.56, -19.67, 2.51] + }, "post": { - "vector": [0, 0, -10] + "vector": [-32.56, -19.67, 2.51] }, "lerp_mode": "catmullrom" }, - "0.3333": { + "0.25": { "post": { - "vector": [0, 0, -12.5] + "vector": [-17.92, 13.33, -21.67] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -12.5] + "vector": [12.5, 20, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.41, -24.81, 13.4] }, "lerp_mode": "catmullrom" }, "1.0": { - "post": { - "vector": [0, 0, -10] - }, - "lerp_mode": "catmullrom" + "vector": [-22.5, -30, 37.5] } } }, - "left_arm3": { + "right_finger": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 30] + }, "post": { - "vector": [0, 0, -15] + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 39.72] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [0, 0, 22.5] + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "right_thumb": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [-22.5, 30, -37.5] + }, + "0.125": { + "pre": { + "vector": [-32.56, 19.67, -2.51] + }, + "post": { + "vector": [-32.56, 19.67, -2.51] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-17.92, -13.33, 21.67] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 22.5] + "vector": [12.5, -20, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-7.41, 24.81, -13.4] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [-22.5, 30, -37.5] + } + } + }, + "left_thumb": { + "rotation": { + "vector": [10, 0, 0] + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -30] + }, + "post": { + "vector": [0, 0, -30] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -39.72] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [7.28, -29.82, 30.48] + }, + "0.5": { + "pre": { + "vector": [15, 20, -27.5] + }, + "post": { + "vector": [15, 20, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-19.43, 15.04, 12] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-2.84, -19.9, 33.82] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.28, -29.82, 30.48] + } + } + }, + "left_toe": { + "rotation": { + "vector": [0, -27.5, 0] + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.66] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 12.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, 20] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -15] + "vector": [0, 0, 32.66] }, "lerp_mode": "catmullrom" } } }, - "left_arm4": { + "right_leg": { "rotation": { "0.0": { + "vector": [7.28, 29.82, -30.48] + }, + "0.5": { + "pre": { + "vector": [15, -20, 27.5] + }, "post": { - "vector": [0, 0, -22.5] + "vector": [15, -20, 27.5] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.625": { "post": { - "vector": [0, 0, 12.5] + "vector": [-19.43, -15.04, -12] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [-2.84, 19.9, -33.82] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [7.28, 29.82, -30.48] + } + } + }, + "right_toe": { + "rotation": { + "vector": [0, 27.5, 0] + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.66] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -55] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -12.34] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [0, 0, -20] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [0, 0, -22.5] + "vector": [0, 0, -32.66] }, "lerp_mode": "catmullrom" } } }, - "head": { + "tail": { "rotation": { "0.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [-37.5, 0, 0] + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [-25, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [-27.5, 0, 0] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" } - }, - "position": { + } + }, + "tail2": { + "rotation": { "0.0": { + "vector": [-12.5, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [20, 0, 0] + }, "post": { - "vector": [0, 0, 0] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-20, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { + "vector": [-12.5, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [20, 0, 0] + }, "post": { - "vector": [0, -1.58671, -1.21752] + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-20, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [-12.5, 0, 0] } } }, "body": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [2.5, 0, 0] + }, "post": { - "vector": [0, 0, 0] + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-0.75, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [2.5, 0, 0] + }, "post": { - "vector": [4.5, 0, 0] + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [-0.75, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { - "post": { - "vector": [0, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] } }, "position": { @@ -2431,9 +1156,33 @@ }, "lerp_mode": "catmullrom" }, + "0.1667": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 1.13, 0] + }, + "lerp_mode": "catmullrom" + }, "0.5": { "post": { - "vector": [0, -1, 0] + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [0, 1.13, 0] }, "lerp_mode": "catmullrom" }, @@ -2444,38 +1193,115 @@ "lerp_mode": "catmullrom" } } + } + } + }, + "walk": { + "loop": true, + "animation_length": 1.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [-5, 0, 0] + }, + "0.25": { + "pre": { + "vector": [2.5, 0, 0] + }, + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.9167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [-12.19, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [-40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [-45, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "vector": [-5, 0, 0] + } + } }, "neck": { "rotation": { "0.0": { "post": { - "vector": [12.5, 0, 0] + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [12.02, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [12.5, 0, 0] + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [20.42, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [6.25, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { "post": { - "vector": [12.5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0, 0] + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.125": { "post": { - "vector": [0, 0, 0] + "vector": [40, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.3333": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [17.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2484,114 +1310,486 @@ "neck2": { "rotation": { "0.0": { + "vector": [-10, 0, 0] + }, + "0.375": { + "pre": { + "vector": [-15, 0, 0] + }, + "post": { + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "vector": [-10, 0, 0] + }, + "0.9167": { + "pre": { + "vector": [10, 0, 0] + }, "post": { "vector": [10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.2083": { "post": { - "vector": [2.5, 0, 0] + "vector": [5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -0.98481, 0.17365] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, -0.98481, 0.17365] - }, - "lerp_mode": "catmullrom" + "1.5": { + "vector": [-10, 0, 0] } } }, - "neck3": { + "torso": { "rotation": { "0.0": { "post": { - "vector": [10, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.125": { "post": { - "vector": [17.5, 0, 0] + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, "1.0": { - "post": { - "vector": [10, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, -0.98481, 0.17365] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "1.0": { - "post": { - "vector": [0, -0.98481, 0.17365] + "1.1667": { + "pre": { + "vector": [-2.5, 0, 0] }, - "lerp_mode": "catmullrom" - } - } - }, - "waist": { - "rotation": { - "0.0": { "post": { "vector": [-2.5, 0, 0] }, "lerp_mode": "catmullrom" }, + "1.375": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 0] + }, + "1.125": { + "pre": { + "vector": [0, 1, 0] + }, + "post": { + "vector": [0, 1, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 1.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, -0.25, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [-2.5, 5, -24.5] + }, + "0.125": { + "pre": { + "vector": [4.25, 5.45, -21.2] + }, + "post": { + "vector": [4.25, 5.45, -21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5.39, -2.07, -15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.94, -16.98, -8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, -27.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, -27.5, -27.5] + }, + "1.125": { + "vector": [8.75, -19.37, -25.5] + }, + "1.25": { + "vector": [5, -11.25, -25] + }, + "1.375": { + "vector": [1.25, -3.12, -24.25] + }, + "1.5": { + "vector": [-2.5, 5, -24.5] + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.1667": { + "pre": { + "vector": [0, 0, 12.5] + }, + "post": { + "vector": [0, 0, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, 25] + }, + "1.5": { + "vector": [0, 0, 25] + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [-2.5, -5, 24.5] + }, + "0.125": { + "pre": { + "vector": [4.25, -5.45, 21.2] + }, + "post": { + "vector": [4.25, -5.45, 21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [5.39, 2.07, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [-5.94, 16.98, 8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.7917": { + "post": { + "vector": [7.5, 27.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [12.5, 27.5, 27.5] + }, + "1.125": { + "vector": [8.75, 19.37, 25.5] + }, + "1.25": { + "vector": [5, 11.25, 25] + }, + "1.375": { + "vector": [1.25, 3.12, 24.25] + }, + "1.5": { + "vector": [-2.5, -5, 24.5] + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.1667": { + "pre": { + "vector": [0, 0, -12.5] + }, + "post": { + "vector": [0, 0, -12.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.6667": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "vector": [0, 0, -25] + }, + "1.5": { + "vector": [0, 0, -25] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0.41, 24.33] + }, + "0.0833": { + "vector": [-2.5, -5, 24.5] + }, + "0.2083": { + "pre": { + "vector": [4.25, -5.45, 21.2] + }, + "post": { + "vector": [4.25, -5.45, 21.2] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [5.39, 2.07, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5.94, 16.98, 8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, 27.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [12.5, 27.5, 27.5] + }, + "1.2083": { + "vector": [8.75, 19.37, 25.5] + }, + "1.3333": { + "vector": [5, 11.25, 25] + }, + "1.4583": { + "vector": [1.25, 3.12, 24.25] + }, + "1.5": { + "vector": [0, 0.41, 24.33] + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "vector": [0, 0, -25] + }, "0.25": { + "pre": { + "vector": [0, 0, -15] + }, "post": { - "vector": [10, 0, 0] + "vector": [0, 0, -15] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.4583": { "post": { - "vector": [10, 0, 0] + "vector": [0, 0, -3.12] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.75": { "post": { - "vector": [-2.5, 0, 0] + "vector": [0, 0, -35.31] }, "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, -25] + }, + "1.5": { + "vector": [0, 0, -25] } - }, - "position": { + } + }, + "right_leg": { + "rotation": { "0.0": { + "vector": [0, -0.41, -24.33] + }, + "0.0833": { + "vector": [-2.5, 5, -24.5] + }, + "0.2083": { + "pre": { + "vector": [4.25, 5.45, -21.2] + }, "post": { - "vector": [0, 0.04362, -0.99905] + "vector": [4.25, 5.45, -21.2] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.375": { "post": { - "vector": [0, 0.04362, -0.99905] + "vector": [5.39, -2.07, -15.36] }, "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [-5.94, -16.98, -8.85] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [7.5, -27.5, -20] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [12.5, -27.5, -27.5] + }, + "1.2083": { + "vector": [8.75, -19.37, -25.5] + }, + "1.3333": { + "vector": [5, -11.25, -25] + }, + "1.4583": { + "vector": [1.25, -3.12, -24.25] + }, + "1.5": { + "vector": [0, -0.41, -24.33] + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "vector": [0, 0, 25] + }, + "0.25": { + "pre": { + "vector": [0, 0, 15] + }, + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 3.12] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, 35.31] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "vector": [0, 0, 25] + }, + "1.5": { + "vector": [0, 0, 25] } } }, @@ -2603,15 +1801,15 @@ }, "lerp_mode": "catmullrom" }, - "0.3333": { + "0.5": { "post": { - "vector": [10, 0, 0] + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.8333": { "post": { - "vector": [10, 0, 0] + "vector": [4.35, 0, 0] }, "lerp_mode": "catmullrom" }, @@ -2620,18 +1818,22 @@ "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { + }, + "1.125": { "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [-15, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.3333": { "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [-5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2640,84 +1842,143 @@ "tail2": { "rotation": { "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, 0, 0] + }, + "0.6667": { + "pre": { + "vector": [-10, 0, 0] + }, "post": { - "vector": [-5, 0, 0] + "vector": [-10, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.4167": { + "0.875": { "post": { "vector": [7.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "1.0": { "post": { - "vector": [15, 0, 0] + "vector": [0.71, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.1667": { "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" - } - }, - "position": { - "0.0": { - "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [-20, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "1.2917": { "post": { - "vector": [0, 0.08716, -0.99619] + "vector": [-15, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "1.5": { + "post": { + "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "tail3": { + "body": { + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "1.0": { + "vector": [0, 0, 12] + }, + "1.5": { + "vector": [0, 0, 0] + } + } + } + } + }, + "jump_start": { + "animation_length": 0.5, + "bones": { + "head": { "rotation": { "0.0": { - "post": { - "vector": [-5, 0, 0] - }, - "lerp_mode": "catmullrom" + "vector": [0, 0, 0] }, - "0.5": { + "0.0417": { + "pre": { + "vector": [22.5, 0, 0] + }, "post": { "vector": [22.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.125": { "post": { - "vector": [-5, 0, 0] + "vector": [-25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-32.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "bone": { - "position": { + "jaw": { + "rotation": { + "0.2083": { + "vector": [0, 0, 0] + }, + "0.5": { + "pre": { + "vector": [30, 0, 0] + }, + "post": { + "vector": [30, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { "0.0": { "post": { "vector": [0, 0, 0] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.125": { "post": { - "vector": [0, -6.8, 0] + "vector": [30, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.3333": { "post": { - "vector": [0, 0, 0] + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2727,103 +1988,848 @@ "rotation": { "0.0": { "post": { - "vector": [0, 0, 20] + "vector": [10, -22.5, -26.5] }, "lerp_mode": "catmullrom" }, - "0.25": { + "0.0833": { "post": { - "vector": [0, 0, -7.5] + "vector": [7.5, -22.5, -19] }, "lerp_mode": "catmullrom" }, - "0.5": { + "0.125": { "post": { - "vector": [0, 0, -7.5] + "vector": [15.33, -22.5, -35.35] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.1667": { "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - } - } - }, - "right_arm2": { - "rotation": { - "0.0": { - "post": { - "vector": [0, 0, 10] + "vector": [25, -22.5, -49] }, "lerp_mode": "catmullrom" }, "0.3333": { "post": { - "vector": [0, 0, 12.5] + "vector": [5.16, -22.5, -3.84] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, 12.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] + "vector": [-7.5, -22.5, 23.5] }, "lerp_mode": "catmullrom" } } }, - "right_arm3": { + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 17.5] + }, + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, -18.86] + }, + "0.5": { + "vector": [0, 0, 25] + } + } + }, + "left_arm": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 15] + "vector": [10, 22.5, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [7.5, 22.5, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [15.33, 22.5, 35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [25, 22.5, 49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [5.16, 22.5, 3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -17.5] + }, + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 18.86] + }, + "0.5": { + "vector": [0, 0, -25] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, -22.5, 26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.33, -22.5, 35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, -22.5, 49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.16, -22.5, 3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, -22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, -25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, -17.5] + }, + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, 18.86] + }, + "0.5": { + "vector": [0, 0, -25] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [-10, 22.5, -26.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -19] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [-15.33, 22.5, -35.35] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-25, 22.5, -49] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-5.16, 22.5, -3.84] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 22.5, 23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 25] + }, + "0.0833": { + "pre": { + "vector": [0, 0, 17.5] + }, + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "vector": [0, 0, -18.86] + }, + "0.5": { + "vector": [0, 0, 25] + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [25, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0417": { + "pre": { + "vector": [-20, 0, 0] + }, + "post": { + "vector": [-20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [-17.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.0833": { + "vector": [0, 0, 0] + }, + "0.5": { + "pre": { + "vector": [-5, 0, 0] + }, + "post": { + "vector": [-5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -3, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 10, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 13.5, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "vector": [1, 1, 1] + }, + "0.0833": { + "pre": { + "vector": [1.1, 0.8, 1.1] + }, + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.9, 1.2, 0.9] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "jump_idle": { + "loop": true, + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [11.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [19.53, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.4167": { "post": { - "vector": [0, 0, -22.5] + "vector": [12.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -22.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 15] + "vector": [11.72, 0, 0] }, "lerp_mode": "catmullrom" } } }, - "right_arm4": { + "jaw": { + "rotation": { + "vector": [30, 0, 0] + } + }, + "neck": { "rotation": { "0.0": { "post": { - "vector": [0, 0, 22.5] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [2.5, 0, 0] }, "lerp_mode": "catmullrom" }, "0.5": { "post": { - "vector": [0, 0, -12.5] + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.5, 0, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.0833": { "post": { - "vector": [0, 0, 22.5] + "vector": [-11.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-11.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, -22.5, 18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, -22.5, 18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 35] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-7.5, 22.5, -18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, 22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [-7.5, 22.5, -18.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -35] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, -22.5, -13.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, -22.5, -28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, -17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -32.5] }, "lerp_mode": "catmullrom" } @@ -2833,25 +2839,126 @@ "rotation": { "0.0": { "post": { - "vector": [-16.3645, 10.7765, 27.5693] + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [7.5, 22.5, 13.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [7.5, 22.5, 28.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, "0.25": { "post": { - "vector": [5.7195, 7.8752, -9.4221] + "vector": [0, 0, 17.5] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.3333": { "post": { - "vector": [5.7195, 7.8752, -9.4221] + "vector": [0, 0, 32.5] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.4167": { "post": { - "vector": [-16.3645, 10.7765, 27.5693] + "vector": [0, 0, 17.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail2": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-4, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-6.59, 0, 0] }, "lerp_mode": "catmullrom" } @@ -2859,69 +2966,1404 @@ "position": { "0.0": { "post": { - "vector": [0.3036, 0.92388, 0.23296] + "vector": [0, 14, 0] }, "lerp_mode": "catmullrom" }, - "1.0": { + "0.125": { "post": { - "vector": [0.3036, 0.92388, 0.23296] + "vector": [0, 15, 0] }, "lerp_mode": "catmullrom" - } - } - }, - "right_leg3": { - "rotation": { - "0.0": { + }, + "0.25": { "post": { - "vector": [0, 0, 10] + "vector": [0, 14, 0] }, "lerp_mode": "catmullrom" }, "0.375": { "post": { - "vector": [0, 0, 7.5] + "vector": [0, 15, 0] }, "lerp_mode": "catmullrom" }, - "0.5417": { + "0.5": { "post": { - "vector": [0, 0, 7.5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 10] + "vector": [0, 14, 0] }, "lerp_mode": "catmullrom" } - } - }, - "right_leg4": { - "rotation": { + }, + "scale": { "0.0": { "post": { - "vector": [0, 0, 20] - }, - "lerp_mode": "catmullrom" - }, - "0.5417": { - "post": { - "vector": [0, 0, -5] - }, - "lerp_mode": "catmullrom" - }, - "1.0": { - "post": { - "vector": [0, 0, 20] + "vector": [1, 1, 1] }, "lerp_mode": "catmullrom" } } } } + }, + "jump_end": { + "animation_length": 0.5, + "bones": { + "head": { + "rotation": { + "0.0": { + "post": { + "vector": [11.72, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-13.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [7.76, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "jaw": { + "rotation": { + "0.0": { + "vector": [30, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [42.5, 0, 0] + }, + "post": { + "vector": [42.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [2.41, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [12.24, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "post": { + "vector": [-5.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-26.64, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [-13.79, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "vector": [-15, 0, 0] + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, -22.5, 23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, -22.5, 58.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, -22.5, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [10, -22.5, -25] + }, + "0.4167": { + "pre": { + "vector": [10, -22.5, -25] + }, + "post": { + "vector": [10, -22.5, -25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, -22.5, -25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 4.69] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, 49.12] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "post": { + "vector": [-7.5, 22.5, -23.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [-7.5, 22.5, -58.5] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [-20, 22.5, -1] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "vector": [10, 22.5, 25] + }, + "0.4167": { + "pre": { + "vector": [10, 22.5, 25] + }, + "post": { + "vector": [10, 22.5, 25] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [10, 22.5, 25] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -23.75] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -4.69] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [0, 0, -49.12] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -20] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, -22.5, -21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [6.24, -22.5, -45.71] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, -22.5, 8.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, 15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, -43.55] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, -17.5] + }, + "0.375": { + "vector": [0, 0, -20.49] + }, + "0.4167": { + "pre": { + "vector": [0, 0, -21.77] + }, + "post": { + "vector": [0, 0, -21.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, -15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "post": { + "vector": [7.5, 22.5, 21.94] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [6.24, 22.5, 45.71] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [0.5, 22.5, -8.17] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [-7.5, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [-7.5, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 32.5] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 0, -15.36] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, 0, 43.55] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "vector": [0, 0, 17.5] + }, + "0.375": { + "vector": [0, 0, 20.49] + }, + "0.4167": { + "pre": { + "vector": [0, 0, 21.77] + }, + "post": { + "vector": [0, 0, 21.77] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 15] + }, + "lerp_mode": "catmullrom" + } + } + }, + "tail": { + "rotation": { + "0.0": { + "post": { + "vector": [20, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [37.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [-12.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "vector": [1, 1, 1] + } + }, + "tail2": { + "rotation": { + "vector": [0, 0, 0] + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [-6.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [-14.09, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [2.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [-1.59, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "0.0": { + "post": { + "vector": [0, 14, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0417": { + "post": { + "vector": [0, 9.25, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [0, -3.91, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2083": { + "post": { + "vector": [0, -2, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.2917": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4167": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.4583": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "scale": { + "0.0": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + }, + "0.0833": { + "post": { + "vector": [0.8, 1.4, 0.8] + }, + "lerp_mode": "catmullrom" + }, + "0.125": { + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.1667": { + "post": { + "vector": [1.1, 0.8, 1.1] + }, + "lerp_mode": "catmullrom" + }, + "0.25": { + "post": { + "vector": [1, 1, 1] + }, + "lerp_mode": "catmullrom" + } + } + } + } + }, + "quirk": { + "animation_length": 3.25, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.2083": { + "pre": { + "vector": [7.5, 0, 0] + }, + "post": { + "vector": [7.5, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [7.5, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.8333": { + "post": { + "vector": [15, 0, 27.5] + }, + "lerp_mode": "catmullrom" + }, + "1.125": { + "post": { + "vector": [-18.28, -16.25, -0.94] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [-60.19, -66.12, -63.54] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [-50.7606, -57.0882, -54.3983] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [-1.6, -61.94, -14.84] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [-1.6, -46.94, -14.84] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [-0.8, 19.97, -22.42] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "neck": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.1667": { + "pre": { + "vector": [10, 0, 2.5] + }, + "post": { + "vector": [10, 0, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "0.375": { + "post": { + "vector": [0, 0, 10] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 0, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [80, -17.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [80, -17.5, 42.5] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [80, -35, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.4583": { + "post": { + "vector": [62.5, -35, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [14.43, -14.18, 8.77] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "neck2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.9167": { + "vector": [0, 0, 0] + }, + "1.2083": { + "pre": { + "vector": [9.35, 15.96, 17.33] + }, + "post": { + "vector": [9.35, 15.96, 17.33] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [12.5, 20, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "1.75": { + "post": { + "vector": [12.5, 20, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [12.5, 20, 7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 12.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [-10, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [-10, 0, 30] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [0, -22.5, -22.5] + }, + "0.3333": { + "pre": { + "vector": [0, -22.5, -22.5] + }, + "post": { + "vector": [0, -22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, -22.5, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, -22.5, 74.75] + }, + "lerp_mode": "catmullrom" + }, + "1.375": { + "post": { + "vector": [0, -22.5, 57.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, -22.5, 15] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, -22.5, -7.5] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, -22.5, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -22.5, -67.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, -22.5, -30] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, -22.5, -22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "right_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.4167": { + "vector": [0, 0, 0] + }, + "0.7917": { + "pre": { + "vector": [0, 0, 52.5] + }, + "post": { + "vector": [0, 0, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, 65] + }, + "lerp_mode": "catmullrom" + }, + "1.6667": { + "post": { + "vector": [0, 0, 52.25] + }, + "lerp_mode": "catmullrom" + }, + "2.0417": { + "post": { + "vector": [0, 0, 5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -47.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7083": { + "post": { + "vector": [0, 0, -62.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + }, + "3.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [0, 22.5, 22.5] + }, + "0.2917": { + "pre": { + "vector": [0, 22.5, 22.5] + }, + "post": { + "vector": [0, 22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5417": { + "post": { + "vector": [0, 22.5, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0833": { + "post": { + "vector": [0, 22.5, 52.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 22.5, -15] + }, + "lerp_mode": "catmullrom" + }, + "2.2083": { + "post": { + "vector": [0, 22.5, -50] + }, + "lerp_mode": "catmullrom" + }, + "2.6667": { + "post": { + "vector": [0, 22.5, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "post": { + "vector": [0, 22.5, 12.5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 22.5, 22.5] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_finger": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.3333": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, 0, 37.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0": { + "post": { + "vector": [0, 0, 53.59] + }, + "lerp_mode": "catmullrom" + }, + "1.5417": { + "post": { + "vector": [0, 0, 47] + }, + "lerp_mode": "catmullrom" + }, + "1.9167": { + "post": { + "vector": [0, 0, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -52.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5833": { + "post": { + "vector": [0, 0, -35.94] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, -9.06] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + }, + "3.25": { + "pre": { + "vector": [0, 0, 0] + }, + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, -22.5, 22.5] + }, + "0.375": { + "pre": { + "vector": [0, -22.5, 55] + }, + "post": { + "vector": [0, -22.5, 55] + }, + "lerp_mode": "catmullrom" + }, + "0.625": { + "post": { + "vector": [0, -22.5, 76.16] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, -22.5, 80] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, -22.5, 53.96] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, -22.5, 2.5] + }, + "lerp_mode": "catmullrom" + }, + "1.7917": { + "post": { + "vector": [0, -22.5, -11.38] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, -22.5, -55] + }, + "lerp_mode": "catmullrom" + }, + "2.4167": { + "post": { + "vector": [0, -22.5, -72.5] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, -22.5, -38.59] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, -22.5, 22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, -22.5, 22.5] + } + } + }, + "left_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, -36.39] + }, + "post": { + "vector": [0, 0, -36.39] + }, + "lerp_mode": "catmullrom" + }, + "0.75": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.1667": { + "post": { + "vector": [0, 0, 75] + }, + "lerp_mode": "catmullrom" + }, + "1.7083": { + "post": { + "vector": [0, 0, 44.22] + }, + "lerp_mode": "catmullrom" + }, + "2.1667": { + "post": { + "vector": [0, 0, -32.5] + }, + "lerp_mode": "catmullrom" + }, + "2.5": { + "post": { + "vector": [0, 0, -57.5] + }, + "lerp_mode": "catmullrom" + }, + "2.75": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 22.5, -22.5] + }, + "0.2083": { + "pre": { + "vector": [0, 22.5, -6.5] + }, + "post": { + "vector": [0, 22.5, -6.5] + }, + "lerp_mode": "catmullrom" + }, + "0.5": { + "post": { + "vector": [0, 22.5, 45] + }, + "lerp_mode": "catmullrom" + }, + "0.875": { + "post": { + "vector": [0, 22.5, 60] + }, + "lerp_mode": "catmullrom" + }, + "1.4167": { + "post": { + "vector": [0, 22.5, 20] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 22.5, -27.5] + }, + "lerp_mode": "catmullrom" + }, + "2.3333": { + "post": { + "vector": [0, 22.5, -37.5] + }, + "lerp_mode": "catmullrom" + }, + "2.7917": { + "post": { + "vector": [0, 22.5, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 22.5, -22.5] + } + } + }, + "right_toe2": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.25": { + "pre": { + "vector": [0, 0, -22.5] + }, + "post": { + "vector": [0, 0, -22.5] + }, + "lerp_mode": "catmullrom" + }, + "0.7083": { + "post": { + "vector": [0, 0, 47.5] + }, + "lerp_mode": "catmullrom" + }, + "1.0417": { + "post": { + "vector": [0, 0, 72.5] + }, + "lerp_mode": "catmullrom" + }, + "1.4583": { + "post": { + "vector": [0, 0, 48.48] + }, + "lerp_mode": "catmullrom" + }, + "1.8333": { + "post": { + "vector": [0, 0, -4.5] + }, + "lerp_mode": "catmullrom" + }, + "2.125": { + "post": { + "vector": [0, 0, -19.64] + }, + "lerp_mode": "catmullrom" + }, + "2.375": { + "post": { + "vector": [0, 0, -45] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -70] + }, + "lerp_mode": "catmullrom" + }, + "2.8333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "3.0": { + "vector": [0, 0, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.3333": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + }, + "0.5833": { + "post": { + "vector": [0, 0, -33.75] + }, + "lerp_mode": "catmullrom" + }, + "0.9583": { + "post": { + "vector": [0, 0, -124.34] + }, + "lerp_mode": "catmullrom" + }, + "1.25": { + "post": { + "vector": [0, 0, -167.5] + }, + "lerp_mode": "catmullrom" + }, + "1.5833": { + "post": { + "vector": [0, 0, -180] + }, + "lerp_mode": "catmullrom" + }, + "2.0": { + "post": { + "vector": [0, 0, -180] + }, + "lerp_mode": "catmullrom" + }, + "2.2917": { + "post": { + "vector": [0, 0, -130.25] + }, + "lerp_mode": "catmullrom" + }, + "2.625": { + "post": { + "vector": [0, 0, -39.68] + }, + "lerp_mode": "catmullrom" + }, + "2.9167": { + "post": { + "vector": [0, 0, -5] + }, + "lerp_mode": "catmullrom" + }, + "3.25": { + "post": { + "vector": [0, 0, 0] + }, + "lerp_mode": "catmullrom" + } + }, + "position": { + "vector": [0, -2, 0] + } + } + } } } } \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json b/common/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json new file mode 100644 index 00000000..2dd199fb --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/cavaryn_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/cavaryn_portal_x" }, + "axis=z": { "model": "antarchy:block/cavaryn_portal_z" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/elythia_portal.json b/common/src/main/resources/assets/antarchy/blockstates/elythia_portal.json new file mode 100644 index 00000000..a86cfef0 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/elythia_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/elythia_portal_x" }, + "axis=z": { "model": "antarchy:block/elythia_portal_z" } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json new file mode 100644 index 00000000..dace25bd --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_vine" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json new file mode 100644 index 00000000..ab51785b --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/ouranwood_vine_plant.json @@ -0,0 +1,7 @@ +{ + "variants": { + "": { + "model": "antarchy:block/ouranwood_vine_plant" + } + } +} diff --git a/common/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json b/common/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json new file mode 100644 index 00000000..5801a031 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/blockstates/thoraxis_portal.json @@ -0,0 +1,6 @@ +{ + "variants": { + "axis=x": { "model": "antarchy:block/thoraxis_portal_x" }, + "axis=z": { "model": "antarchy:block/thoraxis_portal_z" } + } +} diff --git a/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json b/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json index 3e6f3cf6..8e16dbbb 100644 --- a/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json +++ b/common/src/main/resources/assets/antarchy/geo/dorrie.geo.json @@ -4,247 +4,195 @@ { "description": { "identifier": "geometry.unknown", - "texture_width": 256, - "texture_height": 256, - "visible_bounds_width": 9, + "texture_width": 128, + "texture_height": 128, + "visible_bounds_width": 7, "visible_bounds_height": 4.5, "visible_bounds_offset": [0, 1.75, 0] }, "bones": [ { - "name": "bone", - "pivot": [0, 8.5, 16.125] - }, - { - "name": "waist", - "parent": "bone", - "pivot": [0, 8.5, 16.125], - "cubes": [ - {"origin": [-10, 1, 15], "size": [20, 19, 6], "uv": [98, 55]} - ] - }, - { - "name": "tail", - "parent": "waist", - "pivot": [0, 7.83333, 20.83333], - "cubes": [ - {"origin": [-7, 2, 21], "size": [14, 17, 17], "uv": [70, 81]} - ] - }, - { - "name": "tail2", - "parent": "tail", - "pivot": [0, 6.5, 37.5], - "cubes": [ - {"origin": [-5, 2, 38], "size": [10, 11, 17], "uv": [62, 115]} - ] - }, - { - "name": "tail3", - "parent": "tail2", - "pivot": [0, 5.5, 54.5], - "cubes": [ - {"origin": [-3, 2, 55], "size": [6, 7, 7], "uv": [34, 163]} - ] + "name": "Dorrie", + "pivot": [0, 0, 0] }, { "name": "body", - "parent": "bone", - "pivot": [0, 11.33767, -10.06778], - "cubes": [ - {"origin": [-13, 0, -19], "size": [26, 21, 34], "uv": [0, 0]}, - {"origin": [-11, 2, -24.6], "size": [22, 21, 13], "pivot": [0, 12.5, -19.6], "rotation": [-12.5, 0, 0], "uv": [0, 81]} - ] + "parent": "Dorrie", + "pivot": [0, 8.2, 4.4] }, { - "name": "neck", + "name": "right_arm", "parent": "body", - "pivot": [0, 20.33333, -19.1], + "pivot": [-8.5, 7.75, -2], "cubes": [ - {"origin": [-8, 10, -26.6], "size": [16, 16, 15], "uv": [0, 115]} + {"origin": [-25.5, 6, -6], "size": [17, 3, 9], "uv": [7, 88]} ] }, { - "name": "neck2", - "parent": "neck", - "pivot": [0, 25.5, -19.1], + "name": "right_thumb", + "parent": "right_arm", + "pivot": [-23.5, 7, -6], "cubes": [ - {"origin": [-6, 26, -25.6], "size": [12, 8, 13], "uv": [120, 12]} + {"origin": [-25.5, 7, -10], "size": [4, 0, 4], "uv": [20, 72]} ] }, { - "name": "neck3", - "parent": "neck2", - "pivot": [0, 34, -19.1], + "name": "right_finger", + "parent": "right_arm", + "pivot": [-25.5, 7, -1.5], "cubes": [ - {"origin": [-5, 34, -24.6], "size": [10, 6, 11], "uv": [0, 146]} - ] - }, - { - "name": "head", - "parent": "neck3", - "pivot": [0.025, 40.75, -18.1], - "cubes": [ - {"origin": [-6.5, 39, -25.6], "size": [13, 12, 13], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [116, 115]}, - {"origin": [-4.9, 39, -37.6], "size": [10, 3, 16], "uv": [120, 33]}, - {"origin": [-5.5, 42, -30.6], "size": [11, 7, 9], "uv": [100, 156]}, - {"origin": [-5.5, 42, -37.6], "size": [11, 7, 8], "inflate": 0.2, "uv": [150, 65]} - ] - }, - { - "name": "googles", - "parent": "head", - "pivot": [0, 47.45804, -21.34628], - "cubes": [ - {"origin": [-5.5, 46.7, -27.4], "size": [11, 3, 1], "inflate": 0.1, "pivot": [0, 47.6, -24.6], "rotation": [9, 0, 0], "uv": [162, 151]}, - {"origin": [-7, 45.7, -19.3], "size": [14, 3, 7], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [140, 156]}, - {"origin": [-7.5, 44.7, -26.6], "size": [15, 5, 8], "pivot": [-0.5, 44.5, -19.1], "rotation": [10, 0, 0], "uv": [150, 52]} - ] - }, - { - "name": "saddle", - "parent": "body", - "pivot": [4.66667, 18.5, 1.16667], - "cubes": [ - {"origin": [-13, 21, -10], "size": [26, 3, 23], "uv": [0, 55]}, - {"origin": [-9, 24, -10], "size": [18, 5, 3], "uv": [132, 106]}, - {"origin": [-13, 24, 9], "size": [26, 4, 4], "uv": [132, 80]}, - {"origin": [-14, -1, 7], "size": [28, 10, 2], "uv": [120, 0]}, - {"origin": [-15, 9, 6], "size": [2, 14, 4], "uv": [88, 164]}, - {"origin": [13, 9, 6], "size": [2, 14, 4], "uv": [88, 164], "mirror": true}, - {"origin": [13, 9, -7], "size": [2, 14, 4], "uv": [88, 164], "mirror": true}, - {"origin": [-15, 9, -7], "size": [2, 14, 4], "uv": [88, 164]}, - {"origin": [-14, -1, -6], "size": [28, 10, 2], "uv": [120, 0]} - ] - }, - { - "name": "left_leg", - "parent": "body", - "pivot": [-10.875, 0.875, 13.375], - "rotation": [0, 45, 0], - "cubes": [ - {"origin": [-14, 0, 9], "size": [5, 3, 9], "uv": [60, 164]} - ] - }, - { - "name": "left_leg2", - "parent": "left_leg", - "pivot": [-14.66667, 0.66667, 13.33333] - }, - { - "name": "left_leg3", - "parent": "left_leg2", - "pivot": [-14.66667, 0.66667, 13.33333], - "cubes": [ - {"origin": [-19, 0, 9], "size": [5, 2, 9], "uv": [140, 166]} - ] - }, - { - "name": "left_leg4", - "parent": "left_leg3", - "pivot": [-19.25, 0.5, 13.25], - "cubes": [ - {"origin": [-27, 0, 9], "size": [8, 1, 9], "uv": [0, 163]}, - {"origin": [-30, 0, 9], "size": [3, 1, 8], "uv": [168, 114]} - ] - }, - { - "name": "right_leg", - "parent": "body", - "pivot": [10.875, 0.875, 13.375], - "rotation": [0, -45, 0], - "cubes": [ - {"origin": [9, 0, 9], "size": [5, 3, 9], "uv": [60, 164], "mirror": true} - ] - }, - { - "name": "right_leg2", - "parent": "right_leg", - "pivot": [14.66667, 0.66667, 13.33333] - }, - { - "name": "right_leg3", - "parent": "right_leg2", - "pivot": [14.66667, 0.66667, 13.33333], - "cubes": [ - {"origin": [14, 0, 9], "size": [5, 2, 9], "uv": [140, 166], "mirror": true} - ] - }, - { - "name": "right_leg4", - "parent": "right_leg3", - "pivot": [19.25, 0.5, 13.25], - "cubes": [ - {"origin": [19, 0, 9], "size": [8, 1, 9], "uv": [0, 163], "mirror": true}, - {"origin": [27, 0, 9], "size": [3, 1, 8], "uv": [168, 114], "mirror": true} + {"origin": [-33.5, 7, -6], "size": [8, 0, 9], "uv": [23, 79]} ] }, { "name": "left_arm", "parent": "body", - "pivot": [-12.41667, 1.66667, -9.25], + "pivot": [8.5, 7.75, -2], "cubes": [ - {"origin": [-15, 0, -18], "size": [4, 6, 15], "uv": [62, 143]} + {"origin": [8.5, 6, -6], "size": [17, 3, 9], "uv": [7, 88], "mirror": true} ] }, { - "name": "left_arm2", + "name": "left_thumb", "parent": "left_arm", - "pivot": [-14.7, 1.4, -9], + "pivot": [23.5, 7, -6], "cubes": [ - {"origin": [-25, 0, -17], "size": [10, 5, 13], "uv": [132, 88]} + {"origin": [21.5, 7, -10], "size": [4, 0, 4], "uv": [20, 72], "mirror": true} ] }, { - "name": "left_arm3", - "parent": "left_arm2", - "pivot": [-25.125, 1.125, -8.625], + "name": "left_finger", + "parent": "left_arm", + "pivot": [25.5, 7, -1.5], "cubes": [ - {"origin": [-35, 0, -17], "size": [10, 3, 13], "uv": [116, 140]} + {"origin": [25.5, 7, -6], "size": [8, 0, 9], "uv": [23, 79], "mirror": true} ] }, { - "name": "left_arm4", - "parent": "left_arm3", - "pivot": [-35.5, 1, -8], - "cubes": [ - {"origin": [-45, 0, -17], "size": [10, 2, 9], "uv": [162, 140]}, - {"origin": [-42, 0, -7], "size": [2, 2, 3], "uv": [100, 143]}, - {"origin": [-40, 0, -8], "size": [5, 2, 4], "uv": [42, 146]} - ] - }, - { - "name": "right_arm", + "name": "left_leg", "parent": "body", - "pivot": [12.41667, 1.66667, -9.25], + "pivot": [4.5, 7.75, 18], "cubes": [ - {"origin": [11, 0, -18], "size": [4, 6, 15], "uv": [62, 143], "mirror": true} + {"origin": [4.5, 6, 14], "size": [17, 3, 9], "uv": [7, 88], "mirror": true} ] }, { - "name": "right_arm2", - "parent": "right_arm", - "pivot": [14.7, 1.4, -9], + "name": "left_toe", + "parent": "left_leg", + "pivot": [19.5, 7, 14], "cubes": [ - {"origin": [15, 0, -17], "size": [10, 5, 13], "uv": [132, 88], "mirror": true} + {"origin": [17.5, 7, 8], "size": [4, 0, 6], "uv": [26, 71], "mirror": true} ] }, { - "name": "right_arm3", - "parent": "right_arm2", - "pivot": [25.125, 1.125, -8.625], + "name": "left_toe2", + "parent": "left_leg", + "pivot": [21.5, 7, 18.5], "cubes": [ - {"origin": [25, 0, -17], "size": [10, 3, 13], "uv": [116, 140], "mirror": true} + {"origin": [21.5, 7, 14], "size": [10, 0, 9], "uv": [41, 80], "mirror": true} ] }, { - "name": "right_arm4", - "parent": "right_arm3", - "pivot": [35.5, 1, -8], + "name": "right_leg", + "parent": "body", + "pivot": [-4.5, 7.75, 18], "cubes": [ - {"origin": [35, 0, -17], "size": [10, 2, 9], "uv": [162, 140], "mirror": true}, - {"origin": [40, 0, -7], "size": [2, 2, 3], "uv": [100, 143], "mirror": true}, - {"origin": [35, 0, -8], "size": [5, 2, 4], "uv": [42, 146], "mirror": true} + {"origin": [-21.5, 6, 14], "size": [17, 3, 9], "uv": [7, 88]} + ] + }, + { + "name": "right_toe", + "parent": "right_leg", + "pivot": [-19.5, 7, 14], + "cubes": [ + {"origin": [-21.5, 7, 8], "size": [4, 0, 6], "uv": [26, 71]} + ] + }, + { + "name": "right_toe2", + "parent": "right_leg", + "pivot": [-21.5, 7, 18.5], + "cubes": [ + {"origin": [-31.5, 7, 14], "size": [10, 0, 9], "uv": [41, 80]} + ] + }, + { + "name": "torso", + "parent": "body", + "pivot": [0, 15, 7], + "cubes": [ + {"origin": [-11.5, 6, 3], "size": [23, 13, 13], "inflate": 0.1, "uv": [0, 126]}, + {"origin": [-10.5, 0, -10], "size": [21, 18, 30], "inflate": 0.1, "uv": [0, 0]}, + {"origin": [-15.75, 9, -5], "size": [5, 9, 14], "uv": [73, 125]} + ] + }, + { + "name": "tail", + "parent": "torso", + "pivot": [0, 12.5, 20], + "cubes": [ + {"origin": [-4, 4, 20], "size": [8, 14, 12], "inflate": 0.05, "uv": [0, 100]} + ] + }, + { + "name": "tail2", + "parent": "tail", + "pivot": [0, 14, 32], + "cubes": [ + {"origin": [-4, 10, 32], "size": [8, 8, 12], "uv": [59, 80]} + ] + }, + { + "name": "neck", + "parent": "torso", + "pivot": [0, 16, -5.175], + "cubes": [ + {"origin": [-6, 12, -10.175], "size": [12, 13, 10], "uv": [66, 57]}, + {"origin": [-6, 14, -10.175], "size": [12, 13, 10], "inflate": 0.1, "uv": [72, 0]} + ] + }, + { + "name": "neck2", + "parent": "neck", + "pivot": [0, 25, -5.175], + "cubes": [ + {"origin": [-4, 24, -9.175], "size": [8, 8, 8], "uv": [0, 71]} + ] + }, + { + "name": "head", + "parent": "neck2", + "pivot": [0, 31, -6.00833], + "cubes": [ + {"origin": [-5, 31, -11.175], "size": [10, 13, 10], "inflate": 0.1, "uv": [0, 48]}, + {"origin": [-8, 31, -9.175], "size": [3, 6, 7], "uv": [40, 60]}, + {"origin": [5, 31, -9.175], "size": [3, 6, 7], "uv": [0, 9]}, + {"origin": [-5, 33, -15.175], "size": [10, 5, 4], "uv": [76, 48]}, + {"origin": [-6, 33, -21.175], "size": [12, 6, 6], "uv": [40, 48]} + ] + }, + { + "name": "goggle", + "parent": "head", + "pivot": [0, 41, -6.175], + "cubes": [ + {"origin": [-6, 37, -12.175], "size": [12, 8, 12], "inflate": 0.1, "uv": [47, 102]} + ] + }, + { + "name": "eyes_closed", + "parent": "head", + "pivot": [0, 40.95, -8.75], + "cubes": [ + {"origin": [-5, 37.95, -10.25], "size": [10, 6, 3], "inflate": 0.1, "uv": [28, 100]} + ] + }, + { + "name": "jaw", + "parent": "head", + "pivot": [0, 33, -11.175], + "cubes": [ + {"origin": [-4, 31, -18.175], "size": [8, 2, 7], "uv": [0, 0]} ] } ] 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 fb9a11cc..2a915733 100644 --- a/common/src/main/resources/assets/antarchy/lang/en_us.json +++ b/common/src/main/resources/assets/antarchy/lang/en_us.json @@ -17,6 +17,7 @@ "block.antarchy.ouranwood_button": "Ouranwood Button", "block.antarchy.ouranwood_leaves": "Ouranwood Leaves", "block.antarchy.ouranwood_acorn": "Ouranwood Acorn", + "block.antarchy.ouranwood_vine": "Ouranwood Vine", "block.antarchy.ouranwood_sign": "Ouranwood Sign", "block.antarchy.ouranwood_hanging_sign": "Ouranwood Hanging Sign", "block.antarchy.orange_milkweed": "Orange Milkweed", @@ -76,10 +77,13 @@ "block.antarchy.nyxite_spike": "Nyxite Spike", "block.antarchy.potent_nyxite": "Potent Nyxite", "block.antarchy.triffid_goo_block": "Triffid Goo Block", + "block.antarchy.elythia_portal": "Elythia Portal", "block.antarchy.cloud_block": "Cloud Block", + "block.antarchy.thoraxis_portal": "Thoraxis Portal", "block.antarchy.antimetal": "Antimetal", "block.antarchy.polished_antimetal": "Polished Antimetal", "block.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", + "block.antarchy.cavaryn_portal": "Cavaryn Portal", "block.antarchy.cornea_stalk": "Cornea Stalk", "block.antarchy.dream_torch": "Dream Torch", "block.antarchy.dream_wall_torch": "Dream Wall Torch", @@ -272,6 +276,7 @@ "item.antarchy.polished_antimetal": "Polished Antimetal", "item.antarchy.antimetal_scaffolding": "Antimetal Scaffolding", "item.antarchy.ouranwood_acorn": "Ouranwood Acorn", + "item.antarchy.ouranwood_vine": "Ouranwood Vine", "item.antarchy.ouranwood_boat": "Ouranwood Boat", "item.antarchy.ouranwood_chest_boat": "Ouranwood Chest Boat", "item.antarchy.big_bush": "Big Bush", @@ -520,6 +525,10 @@ "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.challenge_games.title": "Challenge Games!", + "advancements.antarchy.challenge_games.description": "Enter the Ruined Arena.", + "advancements.antarchy.bugged_out.title": "Bugged Out", + "advancements.antarchy.bugged_out.description": "Defeat the Alpha Mantis.", "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.", diff --git a/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json b/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json new file mode 100644 index 00000000..c3fbe98d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/cavaryn_portal", + "particle": "antarchy:block/cavaryn_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json b/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json new file mode 100644 index 00000000..8f25f81e --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/cavaryn_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/cavaryn_portal", + "particle": "antarchy:block/cavaryn_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json b/common/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json new file mode 100644 index 00000000..b86b9cb8 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/elythia_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/elythia_portal", + "particle": "antarchy:block/elythia_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json b/common/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json new file mode 100644 index 00000000..a666ed72 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/elythia_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/elythia_portal", + "particle": "antarchy:block/elythia_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json new file mode 100644 index 00000000..dcfef446 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_vine" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json b/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json new file mode 100644 index 00000000..e5543ea7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/ouranwood_vine_plant.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:block/cross", + "textures": { + "cross": "antarchy:block/ouranwood/ouranwood_vine_plant" + } +} diff --git a/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json b/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json new file mode 100644 index 00000000..bdc9a94d --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_x.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/thoraxis_portal", + "particle": "antarchy:block/thoraxis_portal" + }, + "elements": [ + { + "from": [0, 0, 7.5], + "to": [16, 16, 8.5], + "faces": { + "north": { "texture": "#portal" }, + "south": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json b/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json new file mode 100644 index 00000000..7e260fd7 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/block/thoraxis_portal_z.json @@ -0,0 +1,17 @@ +{ + "parent": "block/block", + "textures": { + "portal": "antarchy:block/thoraxis_portal", + "particle": "antarchy:block/thoraxis_portal" + }, + "elements": [ + { + "from": [7.5, 0, 0], + "to": [8.5, 16, 16], + "faces": { + "west": { "texture": "#portal" }, + "east": { "texture": "#portal" } + } + } + ] +} diff --git a/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json b/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json new file mode 100644 index 00000000..dbd3bb74 --- /dev/null +++ b/common/src/main/resources/assets/antarchy/models/item/ouranwood_vine.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "antarchy:block/ouranwood/ouranwood_vine" + } +} diff --git a/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png b/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png new file mode 100644 index 0000000000000000000000000000000000000000..55cd182a9370598445fc67ba765779b6483ac3c9 GIT binary patch literal 22645 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 LNkvXXu0mjfskIeN literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png new file mode 100644 index 0000000000000000000000000000000000000000..75b6fa3077b32e02f29e38ef4f0ece0849b79eb0 GIT binary patch literal 511 zcmVNXxT%9_gq+ExKM*2$f(yY+GYQsWj~;Q zR)3(6RkW%ITnItwLXy%z#gwOIFmbM&$7pxq%s6w-z4zSnbiQ0PKjBy{xCyn|{8FwP zSD%5e5V7l~nv@E%9}apdnetSo@vgePQ2Cy#t{&dBgG+)D1P|&X0mmyfIRnf9`241- zv3F{hFFM~HO|u+kA}|4o#kgdxT-~ngod8v=kix1_%|fGH8M`z|>985ERn}4+xZYHgh6iD!=rPL^M!yU|e8D z=^&zjXbtgulvQ`tmWJqP!HG(?O2f)grJfsd4_!!du(e`95>*fs)AEN`??_)HZ0FXb z1)C%`)DekHVXxrJhGj!xtcbcl?R(xpe1la(L{z{FDxSP;OLp6ZFclNg3l4rBUpv|c zqgR0ET?jB*1sJ}WG1AW2wrp${l7ORSl@xGhj0Dq#=otXp7j$61-;Xd60o1j@5R68` zM}@2$^X^GtNFps1jyDXyMhavbi#lMOJmWoD`2!NC7gMvpr|JLz002ovPDHLkV1jEv B*P{Rc literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png b/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e9be40b4e9f694af9e2eaa469856b3e25090b4 GIT binary patch literal 24361 zcmV)`Kz_f8P)*%_bM}0GgIT7IQNLiNK)BVU8w1vo}Lx-0C-!Geb`^PvM;+U0*I^#0GSyK zrh9s(x;ncmS!6_bICtaR)RdUgi*ut?!ZX~>RPR0HJKrJKJd*!CI{*GXKl|g2dGW)~ zIQi!vF!-ncfbReLf1vxn{e3>1*|0iF6YJc@X{`~(&_y6@jqxb*$J-Yvy zfAQB}zbf|2g(!%l%6Yw<&l~0%*zJJ*0jal#ICv0&OW!}tR!=*yLmQ~qkXAq!KfHT7 z97a30{kzw#{lnV%;Q99g$httgRV>tB+xGb-_^<@E*j95*h741PIS1!e-6-+V&Y7lJ zmM*{hwE86CM;GwUz=nhKPB%Cl!#GY;7n$!NJ=TABT^m5}*kHvcVB$ux&lg~u4MOKn zN%YP|=6wn6y4R~UH}}i!d!#paf%kL-!e_9TyZ`d@Q?XXapFtfI0qX|Y12-V_BiPYG zW_}6vRqHQK8=LWN{|l147+K~*buEZohKzlLxE-&z^YXA(dS#gx3OM6mRZ7=gXw3## zwSL~LZr_jgH%RXlFxG`=G?3OzaN`R6qzY8VP^P2j`P6Eb%yWnnzTUd~8Peq*ILz%3T*M2mrs2ti2AS zZ7|;lt3Tdvsz$EV1Mf)bT#-*oC1eh!Z%mN*VW2J14?}hWk<#a*(cnAyG_E$ zS+_BW!z}sfVfuj(ywZ>;d;-i$5Csl$?*IPB*>M+yRfuvOqSCF{ts2uS9nyJd=6c7S z7v6@!(;jduNJ}Y{j7xN>V2aKZjg!yQOk@m9q-2|5A00R1xLZP5r(u?6DKeG*Sb&j$ zCoQ1P|LWg-^Xo>fRFw~x&KpGurYW#ofo~RBuu8#F8Q$CMxSxmq$^k!+#Ki%4SH8!i z#U{$)By0WKuNsHPrF)0;*@p=GV4Xps(Cy{(?IyBXRnL{Xg?vj&Kv15C5OJegtnu3q zPmh^kV)`F{oZm*_lS1meg>u#H)>?a)7{QC90OELzk}%h>bC=LhZSaB&@5RPh@-Ud_er-fd`);?jIkfFF8xo=^kPx!Ecd0@jQejA*n-A z2jHDrt6X-x!2Jc;tp=e*U~wP3%^*1WeLeO4MWs?Gor9e)l9ms3qa(TC1nBqQ3_Ib@ z5AT6z@~WsHE7g&eRX}?U3j7T;L~`tTm)GXa;Ti;ky#v!tKf=(Ow#~0AsnnAHgS^1 z-QQfc3YVR{=SM*f$khpz8kkxtS_SU-$Ag2+^@$g2=Z(s+Rqw?>B6XLPwnO49|K(vl z{qAm2ZI?=n##W{Sl0$pU8-OJx+IV8UtYGd zB+JGWt-efU>cu+Ez8J?lzGJbPmim_Jto9Fy&goXRkZ6p=pB-`aZ$8~htb-*O~NPXUUFrH z0xIG*>8+BXKvxElrBRZGKtxnWWELDZh_`dF&HmsWkY<8*H3$ou2LxBDamIi1cJOuG zvML3rR`++W+gc%~Eg;rXvMrK*LVTctDdhKf6ooU=dq?oDzf$#c2{In8-AFTawfi?; zv=6^LIG;9$hXhDZzb_NjbPP^7Tv-ABNf#?Bv@{>4dyzbQabhe&nB--M? zeO$eFyt@=hb^$)@)=SOh?QFC4kIoL-!ccSNF0+yT) znkUkI#U8=EkiTF6AAwIl{P^i!x}O`CrUmqX0j`r4LPMqyBoIMF8?fEtWwp|5O9KaX zuJ33NDlKkVPz;6BwQ#%@0Vqw7rj56~+O=(;F@Pk3Zv(cAByh$%_wclFyO+JzrI9<) z04<~qc3JFj+9_ek@JN!~zk7KGUB4<=Z%W9DDOi?~8q#o;x4m+DjMB$2oJh$s&_i@D zZy8oy?n-{CIS?L6wAG6_?W@!7>mpH|32qI}I^AgJ#`)dLr?pBy+tDzdT_!uSc=Gz;YL&@~1wjl$5 z`tbB%U-gPtwepDpVaTlGAo1o9t2tFBHbn7!&?fuQhETevV1u@9)`n1t8_>FFRZr3&N+eDWR9yAIyCztUD`2WD@pANo)Ri;Nq^?pb zmx}2zqA4*}aF`$5^~%|kB>4tV1EK3QZ}$1`-VDDjK*{H!n#12*_YP~%e}S0ME?$Hz zR=}y4BBvuuCdlT5!kG?e(sPV1eq8L2rePQ-|Ifc2x_47=f@G!u>>4=h51O3|yD(^i z)hm^}{kCFX6(I_e59f}%HtI!#Z`TK>`t`6f`=9^I?9+DtD5G--*0*)NFnd`pBre7f zlkL`Zw4A2O#q#70qPf-jak=FyWSggd{y6#=h4(T;m4Q4b3D!}(dxjXVWqu??QmybX znQrF>xF#2oG4UShEmtXc?!lfY7babZX1h^oN|??emhqqA%D#YdLHID{B)qwc}?J`%rX=gSvR zPIx|Vn8ZAcQG>DkD|Nl zIbX4?OEY&$x|d>-j0`G#h=7uL!y}x`KDS5dUPr0{P-~b%jn9D7%VGP>=6aq#thSWRfhzQh30NM)aqs#Eqmnny zFM7j{T_os(jqfJY14&YaD7Vdg9dRO@EOPh(%zK!xU&@1u-L~>|9hpX{YxMN87a~S-E94Fj%=Mnrt9Ezi@=Z5%?H|f!5P2^mh0P>`J+{`a)WxcQ$T7y(WYb1n~f07 zW)O=CGP|8GG;&PUKZeJ<6(N*tXK*6Uv`C`+V8``zw=)NIvj>9;Y}9Jdt5qnKA$V`l zs&{2^aU-)$gFellZ*52>4k0%W#F9s_Ih{$mHKC1k(}>$~NOqe|Z0pubAc#O0Phq z@`7wS`7oYy7nwJEm@TAn0thOeIXA&_8}CS}U=)Jlmtg*xg|^Nrph1KIXa#WV0b;~6 z((?&ooC2aq+*kt7(`(ra#7v_bLDx6X-dIp_4%k7yXMveTpr|0@ybRSYfLj+}!_(_- zUoLb*lL<0fFaYc3!OhmM&l~6Y+>lcq*nv4d5VTvB`YF^tFIc)|BFV|1S>DVxBLa>B z&N^V!)jqCANtA-6I=HH-ikg6@41y=b4^;YW zM|b0yn$whMeTdd;XIBBU>tJOm4cAr9H;A?yu>FCISw3&ruc#}bH`$bIKrk1y$eIG~ zWjosJJJ;Q2xmd7Mq#5PKnS7n+pcoP?&k)m3H_uNbh4O`JTvx#>D~O$x%%FQ(U!OFh ztry=NoM#uRTSZ!}L#y&`x7K=HE??9rOjR(xb$mxP6y;01aD4(${>yU1^H$G$oO`RK zth*K2j8)G2?S8&$S^Rdgc;qT)JJTm+e%-7t1zt1!#Fegt`RQFB57J7fv9d{^A^_vTn{17sxMw;V$%_wh((> zp-3b?oIkC%<9feV=@yI9eW3c_@#Wx5e{sFrJL*vLfK}4tGFr_`ZwB@W)P4mZ`c_LMa^Zpk>x^nxu5dnqm^%>e0E~zy%kvmYWFS*@2ty~3 zWXCWgPpAnPaYE{Cfc=(=?a{+*CTk)CsWAXLq>52D%qss^{raypFs%tzZC!Wk>t9CO zkIC_#Bs+3&UIvOKWW^%WtR2#Wq&FQ*Z#BwwMI(`pn?qPrjmq#>mpy;74R%TF6u|Nq zz+lj+bn4RA5K8^4LG?s6Nj0@B$0oDoc3u7JFRR@3L%)34Zi+|&000mGNklsr$LE%3ldgDZ(kqlp-sx^ajQ^8b$Ovw5%1K|~{ z^cwu42;_;%e3jJUv_T1?kU%870G=<-x5(#qPSp(OW_-9q`n*N9YeO_Zh--8z6>qxp&1Tsco-{t^ z$QNKn!8s*m6&@x@6p)@-DzYp|GYVyHg5~yLuFMOQ>1KvB6RV$IHiz-fErS)Q6ly4> zN)~4sCyehXw&!aRZ4FAOLnvJXLf=B{_JDf;{M#sciba~#|GTSNLDlm+@WUExw@QKy zuR*Ick<}=uR-^f5Dj-A?tU-KGk`0#&cq$>ae%7o~ec&&WDg~CO? zaMFR0qaBuk35mKcly(EC(2e#*(H=S@(qOilGB9=laWZT-`f}pK?^e6#I7*WeB@<5m zCHIQGNDgK}H?I55v#ay&xoT-@5XZ+HlpJ{?p942CKTMwH>k*d;<0U>$$){<7M2aC& zDl+`B>&}?2@Wcy~yZPp6hm1z2Sw!`7B#GzAIgCf(GcI+Vfh~4OoMO9FXjbiNK!}{s zYqCrEINv@jh+sgM1=SSbf(*D{(u9vH_aYZaL8r0UGmdHpd=n3)& zxvlx?ymMjY^_<*jg=|IjL6>qzgCC%HCP3+1L`S4ydW=%8aqfV7N2(p3DIS*K+n4+4 z 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 literal 0 HcmV?d00001 diff --git a/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png b/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png index 05cda900da7433971bec3afc2089480098fc9ead..e47505920fe3b23dd606d8749bbd2072c97e8d53 100644 GIT binary patch literal 8734 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 literal 13568 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 S^I*II80eZjD8KIz`hNgWlkt53 diff --git a/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png b/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png index fb471c8903636f8443d6c2d6bc679b5e16852e68..b9f008158eb729c55c83cbd6d1bf92ab290e29f3 100644 GIT binary patch literal 11820 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 I-Q~&u08;Sx#{d8T literal 15697 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 delta 4671 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 f95O1N%{dXQ0J>bvFX5KeK}6Uu_4mLdTVMKr VERY_SHORT_GRASS_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "very_short_grass_spawn_biomes") + ); + private static final TagKey VERY_TALL_GRASS_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "very_tall_grass_spawn_biomes") + ); + private static final TagKey BIG_BUSH_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_spawn_biomes") + ); + private static final TagKey BIG_BUSH_2X2_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_2x2_spawn_biomes") + ); + private static final TagKey MEGA_TAIGA_SPAWN_BIOMES = TagKey.create( + Registries.BIOME, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mega_taiga_spawn_biomes") + ); + private static final ResourceKey VERY_SHORT_GRASS_FEATURE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "very_short_grass") + ); + private static final ResourceKey VERY_TALL_GRASS_FEATURE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "very_tall_grass") + ); + private static final ResourceKey BIG_BUSH_FEATURE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush") + ); + private static final ResourceKey BIG_BUSH_2X2_FEATURE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_2x2") + ); + private static final ResourceKey BIG_BUSH_3X3_FEATURE = ResourceKey.create( + Registries.PLACED_FEATURE, + ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "big_bush_3x3") + ); @Override public void onInitialize() { @@ -91,5 +131,30 @@ public final class AntarchyFabric implements ModInitializer { AntarchyFabricContent.ALPHA_MANTIS.get(), 1, 1, 1 ); + BiomeModifications.addFeature( + BiomeSelectors.tag(VERY_SHORT_GRASS_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + VERY_SHORT_GRASS_FEATURE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(VERY_TALL_GRASS_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + VERY_TALL_GRASS_FEATURE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(BIG_BUSH_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + BIG_BUSH_FEATURE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(BIG_BUSH_2X2_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + BIG_BUSH_2X2_FEATURE + ); + BiomeModifications.addFeature( + BiomeSelectors.tag(MEGA_TAIGA_SPAWN_BIOMES), + GenerationStep.Decoration.VEGETAL_DECORATION, + BIG_BUSH_3X3_FEATURE + ); } } 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 1c190d30..7a41c0bc 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabricContent.java @@ -168,6 +168,7 @@ import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeConfigura import com.craisinlord.antarchy.content.worldgen.thoraxis.ThoraxisSpikeFeature; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserBaseParticleOptions; import com.craisinlord.antarchy.content.client.particle.InvertedGeyserParticleOptions; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; import java.util.List; import java.util.ArrayList; import java.util.Comparator; @@ -519,6 +520,10 @@ public final class AntarchyFabricContent { () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + // public static final DeferredBlock OURANWOOD_VINE = BLOCKS.register("ouranwood_vine", + // () -> OURANWOOD_VINE_INSTANCE); + // public static final DeferredBlock OURANWOOD_VINE_PLANT = BLOCKS.register("ouranwood_vine_plant", + // () -> OURANWOOD_VINE_PLANT_INSTANCE); public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", @@ -636,6 +641,12 @@ public final class AntarchyFabricContent { AntarchyFabricContent::cloudBucketItem, BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() )); + public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); + public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); + public static final DeferredBlock CAVARYN_PORTAL = BLOCKS.register("cavaryn_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.CAVARYN, portalProperties())); public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", @@ -1103,6 +1114,12 @@ public final class AntarchyFabricContent { () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.VeryTallGrassWorldgenFeature> VERY_TALL_GRASS_FEATURE = FEATURES.register("very_tall_grass", + () -> new com.craisinlord.antarchy.content.worldgen.VeryTallGrassWorldgenFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.BigBushWorldgenFeature> BIG_BUSH_2X2_FEATURE = FEATURES.register("big_bush_2x2", + () -> new com.craisinlord.antarchy.content.worldgen.BigBushWorldgenFeature(NoneFeatureConfiguration.CODEC, 1)); + public static final DeferredHolder, com.craisinlord.antarchy.content.worldgen.BigBushWorldgenFeature> BIG_BUSH_3X3_FEATURE = FEATURES.register("big_bush_3x3", + () -> new com.craisinlord.antarchy.content.worldgen.BigBushWorldgenFeature(NoneFeatureConfiguration.CODEC, 2)); public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", @@ -1192,6 +1209,7 @@ public final class AntarchyFabricContent { public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_BUTTON); public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_LEAVES); public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(OURANWOOD_ACORN_BLOCK); + // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(OURANWOOD_VINE); public static final DeferredItem VERY_SHORT_GRASS_ITEM = ITEMS.registerSimpleBlockItem(VERY_SHORT_GRASS); public static final DeferredItem VERY_TALL_GRASS_ITEM = ITEMS.registerSimpleBlockItem(VERY_TALL_GRASS); public static final DeferredItem BIG_BUSH_ITEM = ITEMS.register("big_bush", @@ -2173,6 +2191,13 @@ public final class AntarchyFabricContent { return BLOOD_CRYSTAL_CRYSTAL.get(); } + // private static OuranwoodVinePlantBlock createOuranwoodVinePlant() { + // OuranwoodVinePlantBlock.bindHeadBlock(OURANWOOD_VINE_INSTANCE); + // OuranwoodVinePlantBlock block = new OuranwoodVinePlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES_PLANT)); + // OuranwoodVineBlock.bindBodyBlock(block); + // return block; + // } + private static Block createDirtOre(Block copyFrom) { return new Block(dirtOreProperties()); } @@ -2192,6 +2217,17 @@ public final class AntarchyFabricContent { return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); } + private static BlockBehaviour.Properties portalProperties() { + return BlockBehaviour.Properties.of() + .strength(-1.0F) + .noCollission() + .noOcclusion() + .lightLevel(state -> 11) + .noLootTable() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false); + } + private static Block createOre(Block copyFrom) { return new Block(BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); } @@ -2419,6 +2455,14 @@ public final class AntarchyFabricContent { // Wire common-module accessors after all registrations are complete. AntarchyObjects.setHerculesBeetle(() -> HERCULES_BEETLE.get()); + PermanentPortalType.bindBlocks( + () -> MOSSY_OURANWOOD_WOOD.get(), + () -> ELYTHIA_PORTAL.get(), + () -> NYXITE.get(), + () -> THORAXIS_PORTAL.get(), + () -> MYRMITE.get(), + () -> CAVARYN_PORTAL.get() + ); AntarchySoundEvents.bind( SQUIDZOOKA_FIRE, 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 a151c550..765ce68f 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,7 @@ 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.portal.PermanentPortalManager; import com.craisinlord.antarchy.content.command.CaterpillarCommand; import com.craisinlord.antarchy.content.command.GravityCommand; import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; @@ -64,6 +65,7 @@ public final class AntarchyFabricEvents { if (entity instanceof ServerPlayer sp) { BloodglassManager.handleDeath(sp); } + PermanentPortalManager.handleSacrifice(entity); if (entity instanceof MissileSquidEntity missileSquid) { if (missileSquid.isSpawnedByKraken()) { return; 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 ce72a88e..fbe05412 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 @@ -223,6 +223,8 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_DOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE.get(), RenderType.cutout()); + // BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DUPLICATOR_SAPLING.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ORANGE_MILKWEED.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.PINK_MILKWEED.get(), RenderType.cutout()); @@ -253,6 +255,9 @@ public final class AntarchyFabricClientBootstrap { BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_FIRE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.DREAM_CEILING_FIRE.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ANTIWATER_BLOCK.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.ELYTHIA_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.THORAXIS_PORTAL.get(), RenderType.translucent()); + BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.CAVARYN_PORTAL.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.URANIUM_DOOR.get(), RenderType.cutout()); BlockRenderLayerMap.INSTANCE.putBlock(AntarchyFabricContent.TITANIUM_DOOR.get(), RenderType.cutout()); 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 0e77f432..f13309c6 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyConfigModuleNeoforge.java @@ -333,6 +333,10 @@ public final class AntarchyConfigModuleNeoforge { AntarchySettings.setDiamondMinecartCoastDeceleration(AntarchyMiscConfig.diamondMinecartCoastDeceleration()); AntarchySettings.setDiamondMinecartMobDamageEnabled(AntarchyMiscConfig.diamondMinecartMobDamageEnabled()); AntarchySettings.setDiamondMinecartMaxMobDamage(AntarchyMiscConfig.diamondMinecartMaxMobDamage()); + AntarchySettings.setPermanentPortalsEnabled(AntarchyMiscConfig.permanentPortalsEnabled()); + AntarchySettings.setElythiaPortalEnabled(AntarchyMiscConfig.elythiaPortalEnabled()); + AntarchySettings.setThoraxisPortalEnabled(AntarchyMiscConfig.thoraxisPortalEnabled()); + AntarchySettings.setCavarynPortalEnabled(AntarchyMiscConfig.cavarynPortalEnabled()); // Misc diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java index 322fa099..ad704183 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyMiscConfig.java @@ -25,6 +25,12 @@ public final class AntarchyMiscConfig { private static final ModConfigSpec.BooleanValue DISABLE_INFINITY_BOOK_PORTAL_CREATION; private static final ModConfigSpec.BooleanValue RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS; + // Permanent portals + private static final ModConfigSpec.BooleanValue PERMANENT_PORTALS_ENABLED; + private static final ModConfigSpec.BooleanValue ELYTHIA_PORTAL_ENABLED; + private static final ModConfigSpec.BooleanValue THORAXIS_PORTAL_ENABLED; + private static final ModConfigSpec.BooleanValue CAVARYN_PORTAL_ENABLED; + // Diamond Minecart private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_ENABLED; private static final ModConfigSpec.BooleanValue DIAMOND_MINECART_PLACES_RAILS; @@ -100,6 +106,16 @@ public final class AntarchyMiscConfig { b.pop(); + // Permanent Portals + + b.push("permanentPortals"); + PERMANENT_PORTALS_ENABLED = b.comment("Master toggle for sacrifice-activated permanent portals.").define("permanentPortalsEnabled", true); + ELYTHIA_PORTAL_ENABLED = b.comment("Whether mossy ouranwood wood portals to Elythia can activate and function.").define("elythiaPortalEnabled", true); + THORAXIS_PORTAL_ENABLED = b.comment("Whether Nyxite portals to Thoraxis can activate and function.").define("thoraxisPortalEnabled", true); + CAVARYN_PORTAL_ENABLED = b.comment("Whether Myrmite portals to Cavaryn can activate and function.").define("cavarynPortalEnabled", true); + b.pop(); + + // Diamond Minecart b.push("diamondMinecart"); @@ -150,6 +166,10 @@ public final class AntarchyMiscConfig { static boolean disableInfinityBookPortalCreation() { return DISABLE_INFINITY_BOOK_PORTAL_CREATION.get(); } static boolean rainbowAntsLeadToInfinityDimensions() { return RAINBOW_ANTS_LEAD_TO_INFINITY_DIMENSIONS.get(); } + public static boolean permanentPortalsEnabled() { return PERMANENT_PORTALS_ENABLED.get(); } + public static boolean elythiaPortalEnabled() { return ELYTHIA_PORTAL_ENABLED.get(); } + public static boolean thoraxisPortalEnabled() { return THORAXIS_PORTAL_ENABLED.get(); } + public static boolean cavarynPortalEnabled() { return CAVARYN_PORTAL_ENABLED.get(); } static boolean diamondMinecartEnabled() { return DIAMOND_MINECART_ENABLED.get(); } static boolean diamondMinecartPlacesRails() { return DIAMOND_MINECART_PLACES_RAILS.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 a3e20f77..dfcbac37 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/AntarchyNeoforge.java @@ -7,6 +7,7 @@ import com.craisinlord.antarchy.content.AntarchySoundEvents; import com.craisinlord.antarchy.content.item.BloodCrystalKatanaItem; import com.craisinlord.antarchy.content.item.ScorpionWhipTetherSync; import com.craisinlord.antarchy.content.network.BloodCrystalKatanaTrailPayload; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.neoforge.registry.*; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; import net.neoforged.bus.api.IEventBus; @@ -183,6 +184,14 @@ public class AntarchyNeoforge { } private static void bindCommonObjects() { + PermanentPortalType.bindBlocks( + () -> AntarchyNeoforgeBlocks.MOSSY_OURANWOOD_WOOD.get(), + () -> AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), + () -> AntarchyNeoforgeBlocks.NYXITE.get(), + () -> AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), + () -> AntarchyNeoforgeBlocks.MYRMITE.get(), + () -> AntarchyNeoforgeBlocks.CAVARYN_PORTAL.get() + ); AntarchyObjects.bind( AntarchyNeoforgeEntites.EASTER_BUNNY, AntarchyNeoforgeEntites.FLYING_SQUIRREL, 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 cfa2c872..b15a8a38 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 @@ -433,6 +433,8 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_TRAPDOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK.get(), RenderType.cutout()); + // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE.get(), RenderType.cutout()); + // ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.OURANWOOD_VINE_PLANT.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DUPLICATOR_SAPLING.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ORANGE_MILKWEED.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.PINK_MILKWEED.get(), RenderType.cutout()); @@ -462,6 +464,9 @@ public final class AntarchyNeoForgeClient { ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.DREAM_CEILING_FIRE.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ANTIWATER_BLOCK.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.ELYTHIA_PORTAL.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.THORAXIS_PORTAL.get(), RenderType.translucent()); + ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.CAVARYN_PORTAL.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TRIFFID_GOO_BLOCK.get(), RenderType.translucent()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.URANIUM_DOOR.get(), RenderType.cutout()); ItemBlockRenderTypes.setRenderLayer(AntarchyNeoforgeBlocks.TITANIUM_DOOR.get(), RenderType.cutout()); 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 4c95ded9..3e999d49 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 @@ -18,6 +18,7 @@ import com.craisinlord.antarchy.content.item.*; import com.craisinlord.antarchy.content.item.ultimate.UltimateGearHelper; import com.craisinlord.antarchy.content.movement.DreamSandLowGravityAccess; import com.craisinlord.antarchy.content.AntarchyTags; +import com.craisinlord.antarchy.content.portal.PermanentPortalManager; import com.craisinlord.antarchy.neoforge.AntarchyNeoForgeFluidTypes; import com.craisinlord.antarchy.neoforge.entity.multipart.MultipartPartEntity; import com.craisinlord.antarchy.neoforge.network.AntarchyGravityNetworking; @@ -65,6 +66,7 @@ public final class AntarchyNeoForgeEvents { public static void register(IEventBus modEventBus) { modEventBus.addListener(AntarchyNeoForgeEvents::onCommonSetup); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onMissileSquidDeath); + NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onPermanentPortalSacrifice); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::onLivingBreathe); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::registerBrewingRecipes); NeoForge.EVENT_BUS.addListener(AntarchyNeoForgeEvents::handleNaturalRabbitReplacement); @@ -132,6 +134,10 @@ public final class AntarchyNeoForgeEvents { } } + public static void onPermanentPortalSacrifice(LivingDeathEvent event) { + PermanentPortalManager.handleSacrifice(event.getEntity()); + } + public static void onLivingBreathe(LivingBreatheEvent event) { if (!(event.getEntity() instanceof Player)) { return; 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 e35c1613..73697cb1 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 @@ -12,6 +12,7 @@ import com.craisinlord.antarchy.content.block.entity.HushweedBlockEntity; import com.craisinlord.antarchy.content.block.entity.PotentNyxiteBlockEntity; import com.craisinlord.antarchy.content.block.entity.WaspNestBlockEntity; import com.craisinlord.antarchy.content.fluid.BileLiquidBlock; +import com.craisinlord.antarchy.content.portal.PermanentPortalType; import com.craisinlord.antarchy.neoforge.OuranwoodWoodTypes; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; @@ -37,6 +38,8 @@ import net.neoforged.neoforge.registries.DeferredRegister; public final class AntarchyNeoforgeBlocks { private static final DeferredRegister.Blocks BLOCKS = DeferredRegister.createBlocks(Antarchy.MODID); private static final DeferredRegister> BLOCK_ENTITY_TYPES = DeferredRegister.create(Registries.BLOCK_ENTITY_TYPE, Antarchy.MODID); + // private static final OuranwoodVineBlock OURANWOOD_VINE_INSTANCE = new OuranwoodVineBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES).lightLevel(state -> 12)); + // private static final OuranwoodVinePlantBlock OURANWOOD_VINE_PLANT_INSTANCE = createOuranwoodVinePlant(); public static final DeferredBlock DUPLICATOR_LOG = BLOCKS.register("duplicator_log", () -> new DuplicatorLogBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_LOG).randomTicks())); @@ -74,6 +77,10 @@ public final class AntarchyNeoforgeBlocks { () -> new OuranwoodLeavesBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.JUNGLE_LEAVES).randomTicks())); public static final DeferredBlock OURANWOOD_ACORN_BLOCK = BLOCKS.register("ouranwood_acorn", () -> new OuranwoodAcornBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.OAK_SAPLING).randomTicks().noCollission())); + // public static final DeferredBlock OURANWOOD_VINE = BLOCKS.register("ouranwood_vine", + // () -> OURANWOOD_VINE_INSTANCE); + // public static final DeferredBlock OURANWOOD_VINE_PLANT = BLOCKS.register("ouranwood_vine_plant", + // () -> OURANWOOD_VINE_PLANT_INSTANCE); public static final DeferredBlock ORANGE_MILKWEED = BLOCKS.register("orange_milkweed", () -> new MilkweedBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.PEONY))); public static final DeferredBlock PINK_MILKWEED = BLOCKS.register("pink_milkweed", @@ -191,6 +198,12 @@ public final class AntarchyNeoforgeBlocks { AntarchyNeoforgeItems::cloudBucketItem, BlockBehaviour.Properties.ofFullCopy(Blocks.POWDER_SNOW).noLootTable().noOcclusion() )); + public static final DeferredBlock ELYTHIA_PORTAL = BLOCKS.register("elythia_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.ELYTHIA, portalProperties())); + public static final DeferredBlock THORAXIS_PORTAL = BLOCKS.register("thoraxis_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.THORAXIS, portalProperties())); + public static final DeferredBlock CAVARYN_PORTAL = BLOCKS.register("cavaryn_portal", + () -> new AntDimensionPortalBlock(PermanentPortalType.CAVARYN, portalProperties())); public static final DeferredBlock PALE_NYXITE = BLOCKS.register("pale_nyxite", () -> new Block(nyxiteProperties())); public static final DeferredBlock NYXITE_SPIKE = BLOCKS.register("nyxite_spike", @@ -419,6 +432,17 @@ public final class AntarchyNeoforgeBlocks { return BlockBehaviour.Properties.ofFullCopy(Blocks.NETHERRACK); } + private static BlockBehaviour.Properties portalProperties() { + return BlockBehaviour.Properties.of() + .strength(-1.0F) + .noCollission() + .noOcclusion() + .lightLevel(state -> 11) + .noLootTable() + .isSuffocating((state, level, pos) -> false) + .isViewBlocking((state, level, pos) -> false); + } + private static Block createOre(Block copyFrom, int minExperience, int maxExperience) { return new DropExperienceBlock(UniformInt.of(minExperience, maxExperience), BlockBehaviour.Properties.ofFullCopy(copyFrom).requiresCorrectToolForDrops()); } @@ -453,6 +477,13 @@ public final class AntarchyNeoforgeBlocks { return BLOOD_CRYSTAL_CRYSTAL.get(); } + // private static OuranwoodVinePlantBlock createOuranwoodVinePlant() { + // OuranwoodVinePlantBlock.bindHeadBlock(OURANWOOD_VINE_INSTANCE); + // OuranwoodVinePlantBlock block = new OuranwoodVinePlantBlock(BlockBehaviour.Properties.ofFullCopy(Blocks.WEEPING_VINES_PLANT)); + // OuranwoodVineBlock.bindBodyBlock(block); + // return block; + // } + private static final class SimpleHorizontalFacingBlock extends HorizontalDirectionalBlock { private static final MapCodec CODEC = simpleCodec(SimpleHorizontalFacingBlock::new); 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 57d460de..83b4c767 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 @@ -91,6 +91,7 @@ public class AntarchyNeoforgeCreativeModeTabs { if (event.getTabKey() == CreativeModeTabs.NATURAL_BLOCKS) { event.accept(AntarchyNeoforgeItems.OURANWOOD_LEAVES_ITEM.get()); event.accept(AntarchyNeoforgeItems.OURANWOOD_ACORN.get()); + // event.accept(AntarchyNeoforgeItems.OURANWOOD_VINE_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_LOG_ITEM.get()); event.accept(AntarchyNeoforgeItems.DUPLICATOR_SAPLING_ITEM.get()); event.accept(AntarchyNeoforgeItems.ORANGE_MILKWEED_ITEM.get()); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeItems.java index ec229b03..f7645752 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 @@ -158,6 +158,7 @@ public final class AntarchyNeoforgeItems { public static final DeferredItem OURANWOOD_BUTTON_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_BUTTON); public static final DeferredItem OURANWOOD_LEAVES_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_LEAVES); public static final DeferredItem OURANWOOD_ACORN = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_ACORN_BLOCK); + // public static final DeferredItem OURANWOOD_VINE_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.OURANWOOD_VINE); public static final DeferredItem ORANGE_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.ORANGE_MILKWEED); public static final DeferredItem PINK_MILKWEED_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.PINK_MILKWEED); public static final DeferredItem TORCHFLOWER_BUSH_ITEM = ITEMS.registerSimpleBlockItem(AntarchyNeoforgeBlocks.TORCHFLOWER_BUSH); diff --git a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java index eae7bec6..f1dbcb58 100644 --- a/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java +++ b/neoforge/src/main/java/com/craisinlord/antarchy/neoforge/registry/AntarchyNeoforgeMisc.java @@ -22,6 +22,8 @@ import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeConfiguratio import com.craisinlord.antarchy.content.worldgen.cavaryn.ChitenSpikeFeature; import com.craisinlord.antarchy.content.worldgen.elythia.*; import com.craisinlord.antarchy.content.worldgen.thoraxis.*; +import com.craisinlord.antarchy.content.worldgen.VeryTallGrassWorldgenFeature; +import com.craisinlord.antarchy.content.worldgen.BigBushWorldgenFeature; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluid; import com.craisinlord.antarchy.neoforge.content.fluid.AntiwaterFluidType; import com.mojang.serialization.MapCodec; @@ -213,6 +215,12 @@ public final class AntarchyNeoforgeMisc { () -> new ElythiaFloraFeature(NoneFeatureConfiguration.CODEC, ElythiaFloraFeature.Variant.TORCHFLOWER_FIELDS)); public static final DeferredHolder, ElythiaSurfaceCoverFeature> ELYTHIA_SURFACE_COVER = FEATURES.register("elythia_surface_cover", () -> new ElythiaSurfaceCoverFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, VeryTallGrassWorldgenFeature> VERY_TALL_GRASS_FEATURE = FEATURES.register("very_tall_grass", + () -> new VeryTallGrassWorldgenFeature(NoneFeatureConfiguration.CODEC)); + public static final DeferredHolder, BigBushWorldgenFeature> BIG_BUSH_2X2_FEATURE = FEATURES.register("big_bush_2x2", + () -> new BigBushWorldgenFeature(NoneFeatureConfiguration.CODEC, 1)); + public static final DeferredHolder, BigBushWorldgenFeature> BIG_BUSH_3X3_FEATURE = FEATURES.register("big_bush_3x3", + () -> new BigBushWorldgenFeature(NoneFeatureConfiguration.CODEC, 2)); public static final DeferredHolder, ElythiaUndergroundFeature> ELYTHIA_UNDERGROUND = FEATURES.register("elythia_underground", () -> new ElythiaUndergroundFeature(NoneFeatureConfiguration.CODEC)); public static final DeferredHolder, BrutalflyCocoonFeature> BRUTALFLY_COCOON = FEATURES.register("brutalfly_cocoon", diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush.json new file mode 100644 index 00000000..190035c7 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:big_bush_spawn_biomes", + "features": [ + "antarchy:big_bush" + ], + "step": "vegetal_decoration" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_2x2.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_2x2.json new file mode 100644 index 00000000..27409ca0 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_2x2.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:big_bush_2x2_spawn_biomes", + "features": [ + "antarchy:big_bush_2x2" + ], + "step": "vegetal_decoration" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_3x3.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_3x3.json new file mode 100644 index 00000000..a32da043 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/big_bush_3x3.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:mega_taiga_spawn_biomes", + "features": [ + "antarchy:big_bush_3x3" + ], + "step": "vegetal_decoration" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_short_grass.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_short_grass.json new file mode 100644 index 00000000..32d32d1f --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_short_grass.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:very_short_grass_spawn_biomes", + "features": [ + "antarchy:very_short_grass" + ], + "step": "vegetal_decoration" +} diff --git a/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_tall_grass.json b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_tall_grass.json new file mode 100644 index 00000000..b1930fe7 --- /dev/null +++ b/neoforge/src/main/resources/data/antarchy/neoforge/biome_modifier/very_tall_grass.json @@ -0,0 +1,8 @@ +{ + "type": "neoforge:add_features", + "biomes": "#antarchy:very_tall_grass_spawn_biomes", + "features": [ + "antarchy:very_tall_grass" + ], + "step": "vegetal_decoration" +}