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 00000000..55cd182a Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/cavaryn_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png b/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png new file mode 100644 index 00000000..aa38fc9f Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png differ diff --git a/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta b/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta new file mode 100644 index 00000000..4f0718ac --- /dev/null +++ b/common/src/main/resources/assets/antarchy/textures/block/elythia_portal.png.mcmeta @@ -0,0 +1,3 @@ +{ + "animation": {} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png new file mode 100644 index 00000000..d95e4c07 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine.png differ 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 00000000..75b6fa30 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/ouranwood/ouranwood_vine_plant.png differ 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 00000000..b6e9be40 Binary files /dev/null and b/common/src/main/resources/assets/antarchy/textures/block/thoraxis_portal.png differ 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 05cda900..e4750592 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png and b/common/src/main/resources/assets/antarchy/textures/entity/dorrie.png differ 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 fb471c89..b9f00815 100644 Binary files a/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png and b/common/src/main/resources/assets/antarchy/textures/entity/dorrie_saddle.png differ diff --git a/common/src/main/resources/data/antarchy/advancement/bugged_out.json b/common/src/main/resources/data/antarchy/advancement/bugged_out.json new file mode 100644 index 00000000..b89e1637 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/bugged_out.json @@ -0,0 +1,34 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "kill_alpha_mantis": { + "conditions": { + "entity": { + "type": "antarchy:alpha_mantis" + } + }, + "trigger": "minecraft:player_killed_entity" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.bugged_out.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "id": "antarchy:alpha_mantis_spawn_egg" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.bugged_out.title" + } + }, + "requirements": [ + [ + "kill_alpha_mantis" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/advancement/challenge_games.json b/common/src/main/resources/data/antarchy/advancement/challenge_games.json new file mode 100644 index 00000000..c5db58d6 --- /dev/null +++ b/common/src/main/resources/data/antarchy/advancement/challenge_games.json @@ -0,0 +1,42 @@ +{ + "parent": "minecraft:adventure/root", + "criteria": { + "discover_ruined_arena": { + "conditions": { + "player": [ + { + "condition": "minecraft:entity_properties", + "entity": "this", + "predicate": { + "location": { + "structures": "antarchy:ruined_arena" + } + } + } + ] + }, + "trigger": "minecraft:location" + } + }, + "display": { + "announce_to_chat": true, + "description": { + "translate": "advancements.antarchy.challenge_games.description" + }, + "frame": "challenge", + "icon": { + "count": 1, + "id": "minecraft:stone_bricks" + }, + "show_toast": true, + "title": { + "translate": "advancements.antarchy.challenge_games.title" + } + }, + "requirements": [ + [ + "discover_ruined_arena" + ] + ], + "sends_telemetry_event": true +} diff --git a/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json new file mode 100644 index 00000000..193598c4 --- /dev/null +++ b/common/src/main/resources/data/antarchy/loot_table/blocks/ouranwood_vine.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "conditions": [ + { + "condition": "minecraft:match_tool", + "predicate": { + "items": [ + "minecraft:shears" + ] + } + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "antarchy:ouranwood_vine" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "antarchy:blocks/ouranwood_vine" +} diff --git a/common/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json b/common/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json index c60f316d..1d928138 100644 --- a/common/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json +++ b/common/src/main/resources/data/antarchy/loot_table/chests/ruined_arena/generic.json @@ -153,7 +153,7 @@ "function": "minecraft:set_components", "components": { "minecraft:potion_contents": { - "potion": "antarchy:inverted" + "potion": "minecraft:slow_falling" } } } @@ -161,7 +161,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 5, "functions": [ { @@ -198,14 +198,14 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 3, + "weight": 40, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 2.0, + "max": 5.0 } } ] @@ -213,14 +213,14 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 3, + "weight": 40, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 2.0, + "max": 5.0 } } ] @@ -283,7 +283,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 6, "functions": [ { diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json index 5b633287..d18616d0 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/hard.json @@ -65,7 +65,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 8, "functions": [ { diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json index a7db6e93..69b9914a 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/fallen_kingdom_castle/medium.json @@ -234,7 +234,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 4, "functions": [ { diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json b/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json index 7b3f4bb0..bba31926 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/hard.json @@ -163,7 +163,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 10, "functions": [ { @@ -200,14 +200,14 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 4, + "weight": 56, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 4.0, + "max": 9.0 } } ] @@ -215,14 +215,14 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 4, + "weight": 56, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 4.0, + "max": 9.0 } } ] @@ -292,7 +292,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 10, "functions": [ { diff --git a/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json b/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json index 75182308..7f1876a4 100644 --- a/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json +++ b/common/src/main/resources/data/antarchy/loot_table/spawners/ruined_arena/medium.json @@ -51,11 +51,6 @@ } ] }, - { - "type": "minecraft:item", - "name": "antarchy:battle_axe", - "weight": 12 - }, { "type": "minecraft:item", "name": "minecraft:shield", @@ -199,14 +194,14 @@ { "type": "minecraft:item", "name": "antarchy:uranium_nugget", - "weight": 4, + "weight": 48, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 3.0, + "max": 7.0 } } ] @@ -214,14 +209,14 @@ { "type": "minecraft:item", "name": "antarchy:titanium_nugget", - "weight": 4, + "weight": 48, "functions": [ { "function": "minecraft:set_count", "count": { "type": "minecraft:uniform", - "min": 1.0, - "max": 2.0 + "min": 3.0, + "max": 7.0 } } ] @@ -253,7 +248,7 @@ }, { "type": "minecraft:item", - "name": "minecraft:enchanted_book", + "name": "minecraft:book", "weight": 6, "functions": [ { diff --git a/common/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt b/common/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt index d59f4322..fefb1778 100644 Binary files a/common/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt and b/common/src/main/resources/data/antarchy/structure/ruined_arena/ruined_arena.nbt differ diff --git a/common/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json b/common/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json new file mode 100644 index 00000000..2976b86e --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/cavaryn_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:myrmite" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json b/common/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json new file mode 100644 index 00000000..364e809d --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/elythia_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:mossy_ouranwood_wood" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json b/common/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json new file mode 100644 index 00000000..f622ee69 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/block/thoraxis_portal_frames.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "antarchy:nyxite" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_2x2_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_2x2_spawn_biomes.json new file mode 100644 index 00000000..b251f336 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_2x2_spawn_biomes.json @@ -0,0 +1,10 @@ +{ + "replace": false, + "values": [ + "minecraft:taiga", + "minecraft:snowy_taiga", + "minecraft:dark_forest", + { "id": "#c:is_taiga", "required": false }, + { "id": "#c:is_dark_forest", "required": false } + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_spawn_biomes.json new file mode 100644 index 00000000..198449f3 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/big_bush_spawn_biomes.json @@ -0,0 +1,8 @@ +{ + "replace": false, + "values": [ + "minecraft:forest", + "minecraft:birch_forest", + "minecraft:dark_forest" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/mega_taiga_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/mega_taiga_spawn_biomes.json new file mode 100644 index 00000000..8ecd6505 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/mega_taiga_spawn_biomes.json @@ -0,0 +1,7 @@ +{ + "replace": false, + "values": [ + "minecraft:old_growth_pine_taiga", + "minecraft:old_growth_spruce_taiga" + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_short_grass_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_short_grass_spawn_biomes.json new file mode 100644 index 00000000..38d80f18 --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_short_grass_spawn_biomes.json @@ -0,0 +1,19 @@ +{ + "replace": false, + "values": [ + "minecraft:plains", + "minecraft:sunflower_plains", + "minecraft:meadow", + "minecraft:savanna", + "minecraft:forest", + "minecraft:flower_forest", + "minecraft:birch_forest", + "minecraft:dark_forest", + "minecraft:taiga", + "minecraft:snowy_taiga", + { "id": "#c:is_plains", "required": false }, + { "id": "#c:is_savanna", "required": false }, + { "id": "#c:is_forest", "required": false }, + { "id": "#c:is_taiga", "required": false } + ] +} diff --git a/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_tall_grass_spawn_biomes.json b/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_tall_grass_spawn_biomes.json new file mode 100644 index 00000000..ea87f09f --- /dev/null +++ b/common/src/main/resources/data/antarchy/tags/worldgen/biome/very_tall_grass_spawn_biomes.json @@ -0,0 +1,9 @@ +{ + "replace": false, + "values": [ + "minecraft:plains", + "minecraft:savanna", + "minecraft:forest", + { "id": "#c:is_jungle", "required": false } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush.json new file mode 100644 index 00000000..272aa3e5 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:random_patch", + "config": { + "tries": 1, + "xz_spread": 0, + "y_spread": 0, + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { "Name": "antarchy:big_bush" } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { "type": "minecraft:matching_blocks", "blocks": "minecraft:air" } + } + ] + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_2x2.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_2x2.json new file mode 100644 index 00000000..2029758a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_2x2.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:big_bush_2x2", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_3x3.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_3x3.json new file mode 100644 index 00000000..281b8d6b --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/big_bush_3x3.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:big_bush_3x3", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_short_grass.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_short_grass.json new file mode 100644 index 00000000..74b3de49 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_short_grass.json @@ -0,0 +1,25 @@ +{ + "type": "minecraft:random_patch", + "config": { + "tries": 6, + "xz_spread": 4, + "y_spread": 2, + "feature": { + "feature": { + "type": "minecraft:simple_block", + "config": { + "to_place": { + "type": "minecraft:simple_state_provider", + "state": { "Name": "antarchy:very_short_grass" } + } + } + }, + "placement": [ + { + "type": "minecraft:block_predicate_filter", + "predicate": { "type": "minecraft:matching_blocks", "blocks": "minecraft:air" } + } + ] + } + } +} diff --git a/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_tall_grass.json b/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_tall_grass.json new file mode 100644 index 00000000..1b055669 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/configured_feature/very_tall_grass.json @@ -0,0 +1,4 @@ +{ + "type": "antarchy:very_tall_grass", + "config": {} +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush.json new file mode 100644 index 00000000..56f7137f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:big_bush", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 80 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_2x2.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_2x2.json new file mode 100644 index 00000000..83ba475b --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_2x2.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:big_bush_2x2", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 80 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_3x3.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_3x3.json new file mode 100644 index 00000000..129ac93a --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/big_bush_3x3.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:big_bush_3x3", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 5 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_short_grass.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_short_grass.json new file mode 100644 index 00000000..ff350413 --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_short_grass.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:very_short_grass", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 1 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_tall_grass.json b/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_tall_grass.json new file mode 100644 index 00000000..a514989f --- /dev/null +++ b/common/src/main/resources/data/antarchy/worldgen/placed_feature/very_tall_grass.json @@ -0,0 +1,9 @@ +{ + "feature": "antarchy:very_tall_grass", + "placement": [ + { "type": "minecraft:rarity_filter", "chance": 30 }, + { "type": "minecraft:in_square" }, + { "type": "minecraft:heightmap", "heightmap": "MOTION_BLOCKING" }, + { "type": "minecraft:biome" } + ] +} diff --git a/common/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json b/common/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json index b06bcc49..beee8a5d 100644 --- a/common/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json +++ b/common/src/main/resources/data/antarchy/worldgen/structure/ruined_arena.json @@ -5,7 +5,7 @@ "terrain_height_radius_check": 4, "allowed_terrain_height_range": 14, "valid_biome_radius_check": 1, - "biomes": "#antarchy:has_structure/ruined_anrea_biomes", + "biomes": "#antarchy:has_structure/ruined_arena_biomes", "step": "surface_structures", "enhanced_terrain_adaptation": { "type": "integrated_api:none" diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java index 4d6ba0f9..07550736 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyConfigModuleFabric.java @@ -169,6 +169,10 @@ public final class AntarchyConfigModuleFabric { private static boolean isMiscSetting(String name) { return name.equals("disableInfinityBookPortalCreation") || name.equals("rainbowAntsLeadToInfinityDimensions") + || name.equals("permanentPortalsEnabled") + || name.equals("elythiaPortalEnabled") + || name.equals("thoraxisPortalEnabled") + || name.equals("cavarynPortalEnabled") || name.equals("hushweedSporeLifetimeSeconds") || name.equals("elythiaFireflyParticlesEnabled") || name.equals("duplicatorTreeEnabled") diff --git a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java index 7db898f7..304a1d49 100644 --- a/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java +++ b/fabric/src/main/java/com/craisinlord/antarchy/fabric/AntarchyFabric.java @@ -38,6 +38,46 @@ public final class AntarchyFabric implements ModInitializer { Registries.BIOME, ResourceLocation.fromNamespaceAndPath(Antarchy.MODID, "mantis_overworld_spawn_biomes") ); + private static final TagKey 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" +}