From dc85eefd2d1a2db0a0b7dafc34671618c9b6f6f1 Mon Sep 17 00:00:00 2001 From: Azumic <95330698+Azumic@users.noreply.github.com> Date: Fri, 3 Jan 2025 22:29:36 +0800 Subject: [PATCH] Merge pull request #632 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Climb * fix scaffolding check * fix * 修正部分内容 --- .../touhoulittlemaid/api/entity/IMaid.java | 4 + .../animation/gecko/AnimationRegister.java | 10 + .../maid/config/MaidConfigContainerGui.java | 10 + .../entity/ai/brain/MaidBrain.java | 3 +- .../entity/ai/brain/task/MaidClimbTask.java | 133 ++ .../ai/navigation/MaidNodeEvaluator.java | 63 +- .../entity/passive/EntityMaid.java | 58 + .../entity/passive/MaidConfigManager.java | 34 +- .../resources/META-INF/accesstransformer.cfg | 3 + .../animation/maid.animation.json | 1296 +++++++++++++++++ .../assets/touhou_little_maid/lang/en_us.json | 1 + .../assets/touhou_little_maid/lang/zh_cn.json | 1 + 12 files changed, 1611 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidClimbTask.java diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/api/entity/IMaid.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/api/entity/IMaid.java index 0c7d696ee..0adc51ec1 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/api/entity/IMaid.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/api/entity/IMaid.java @@ -160,6 +160,10 @@ default boolean hasFishingHook() { return false; } + default boolean onClimbable() { + return false; + } + // 下方为 Deprecated 方法,仅用于适配旧版本模型,无需 Override @Deprecated diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java index 62f2ded8e..2adece7c5 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/animation/gecko/AnimationRegister.java @@ -5,6 +5,7 @@ import com.github.tartaricacid.touhoulittlemaid.entity.item.EntitySit; import com.github.tartaricacid.touhoulittlemaid.geckolib3.core.builder.ILoopType; import com.github.tartaricacid.touhoulittlemaid.geckolib3.core.event.predicate.AnimationEvent; +import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.vehicle.Boat; @@ -17,6 +18,10 @@ public static void registerAnimationState() { register("death", ILoopType.EDefaultLoopTypes.PLAY_ONCE, Priority.HIGHEST, (maid, event) -> maid.asEntity().isDeadOrDying()); register("sleep", Priority.HIGHEST, (maid, event) -> maid.asEntity().getPose() == Pose.SLEEPING); + register("ladder_up", Priority.HIGHEST, (maid, event) -> maid.onClimbable() && getVerticalSpeed(maid) > 0); + register("ladder_stillness", Priority.HIGHEST, (maid, event) -> maid.onClimbable() && getVerticalSpeed(maid) == 0); + register("ladder_down", Priority.HIGHEST, (maid, event) -> maid.onClimbable() && getVerticalSpeed(maid) < 0); + register("gomoku", Priority.HIGH, (maid, event) -> sitInJoy(maid, Type.GOMOKU)); register("bookshelf", Priority.HIGH, (maid, event) -> sitInJoy(maid, Type.BOOKSHELF)); register("computer", Priority.HIGH, (maid, event) -> sitInJoy(maid, Type.COMPUTER)); @@ -49,4 +54,9 @@ private static void register(String animationName, ILoopType loopType, int prior private static void register(String animationName, int priority, BiPredicate> predicate) { register(animationName, ILoopType.EDefaultLoopTypes.LOOP, priority, predicate); } + + private static float getVerticalSpeed(IMaid maid) { + Mob entity = maid.asEntity(); + return 20 * (float) (entity.position().y - entity.yo); + } } \ No newline at end of file diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/gui/entity/maid/config/MaidConfigContainerGui.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/gui/entity/maid/config/MaidConfigContainerGui.java index 4ffa3c0fa..0f9af4c28 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/gui/entity/maid/config/MaidConfigContainerGui.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/client/gui/entity/maid/config/MaidConfigContainerGui.java @@ -120,6 +120,16 @@ protected void initAdditionWidgets() { button.setValue(Component.translatable("gui.touhou_little_maid.maid_config.value." + this.syncNetwork.openFenceGate())); } )); + buttonTop += 13; + + this.addRenderableWidget(new MaidConfigButton(buttonLeft, buttonTop, + Component.translatable("gui.touhou_little_maid.maid_config.active_climbing"), + Component.translatable("gui.touhou_little_maid.maid_config.value." + this.syncNetwork.activeClimbing()), + button -> { + this.syncNetwork.setActiveClimbing(!this.syncNetwork.activeClimbing()); + button.setValue(Component.translatable("gui.touhou_little_maid.maid_config.value." + this.syncNetwork.activeClimbing())); + } + )); } @Override diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java index c756a404f..9080cf0da 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/MaidBrain.java @@ -85,6 +85,7 @@ private static void registerSchedule(Brain brain, EntityMaid maid) { private static void registerCoreGoals(Brain brain) { Pair> swim = Pair.of(0, new Swim(0.8f)); + Pair> climb = Pair.of(0, new MaidClimbTask()); Pair> look = Pair.of(0, new LookAtTargetSink(45, 90)); Pair> maidPanic = Pair.of(1, new MaidPanicTask()); Pair> maidAwait = Pair.of(1, new MaidAwaitTask()); @@ -95,7 +96,7 @@ private static void registerCoreGoals(Brain brain) { Pair> pickupItem = Pair.of(10, new MaidPickupEntitiesTask(EntityMaid::isPickup, 0.6f)); Pair> clearSleep = Pair.of(99, new MaidClearSleepTask()); - brain.addActivity(Activity.CORE, ImmutableList.of(swim, look, maidPanic, maidAwait, interactWithDoor, walkToTarget, followOwner, healSelf, pickupItem, clearSleep)); + brain.addActivity(Activity.CORE, ImmutableList.of(swim, climb, look, maidPanic, maidAwait, interactWithDoor, walkToTarget, followOwner, healSelf, pickupItem, clearSleep)); } private static void registerIdleGoals(Brain brain) { diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidClimbTask.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidClimbTask.java new file mode 100644 index 000000000..2b251a937 --- /dev/null +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/brain/task/MaidClimbTask.java @@ -0,0 +1,133 @@ +package com.github.tartaricacid.touhoulittlemaid.entity.ai.brain.task; + +import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; +import com.google.common.collect.ImmutableMap; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.ai.behavior.Behavior; +import net.minecraft.world.entity.ai.behavior.BlockPosTracker; +import net.minecraft.world.entity.ai.memory.MemoryModuleType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.pathfinder.Node; +import net.minecraft.world.level.pathfinder.Path; +import net.minecraft.world.phys.Vec3; + +public class MaidClimbTask extends Behavior { + public MaidClimbTask() { + super(ImmutableMap.of()); + } + + @Override + protected void start(ServerLevel pLevel, EntityMaid maid, long pGameTime) { + // 初始化女仆动量 + // 将女仆定格在楼梯中心,取消掉 x、z 轴的动量,避免爬楼梯过程中摔死 + BlockPos currentPosition = maid.blockPosition().mutable(); + Vec3 centerPos = Vec3.atCenterOf(currentPosition); + maid.moveTo(centerPos.x, currentPosition.getY(), centerPos.z); + maid.setDeltaMovement(0, maid.getDeltaMovement().y(), 0); + } + + @Override + protected boolean checkExtraStartConditions(ServerLevel pLevel, EntityMaid maid) { + // 如果禁用了主动攀爬能力,就直接返回,不执行后续的操作 + if (!maid.getConfigManager().isActiveClimbing()) { + return false; + } + return maid.onClimbable(); + } + + @Override + protected boolean canStillUse(ServerLevel pLevel, EntityMaid pEntity, long pGameTime) { + return this.checkExtraStartConditions(pLevel, pEntity); + } + + @Override + protected void tick(ServerLevel level, EntityMaid maid, long pGameTime) { + Path path = maid.getNavigation().getPath(); + if (path == null) { + return; + } + + // 获取基础信息:下一个要到达的节点、女仆当前所处坐标、方块 + int beGoNodeIndex = path.getNextNodeIndex(); + Node beGoNode = path.getNode(beGoNodeIndex); + BlockPos maidFeetPos = maid.blockPosition(); + BlockState feetBlock = level.getBlockState(maidFeetPos); + + // 判断上行还是下行 + boolean up = true; + if (beGoNodeIndex > 0) { + Node currentNext = path.getNode(beGoNodeIndex - 1); + Node pointNext = path.getNode(beGoNodeIndex); + if (pointNext.y <= currentNext.y) { + up = false; + } + } + + // 如果是下行,添加 shift 行为 + maid.setShiftKeyDown(!up); + + // 控制上行和下行楼梯的动量 + // 将水平方向的动量关掉,与上面的初始化,定格在方块中心,不然会摔死…… + // 先给一个大点的 y 轴向量,再拉回一点,这样能连续下去 + // 原版的爬楼梯数值为 0.15,有些慢,加快点…… + // 而且速度太慢的话,爬楼梯时间过长,路径就被掐断了, + // 就又会重新规划路线……这样控制比较麻烦,而且也还有其他的东西在干扰…… + // 最好的是一次路径控制完,这样的效果是最好的 + if (maidFeetPos.getY() <= beGoNode.y && up && feetBlock.isLadder(level, maidFeetPos, maid)) { + double yMotion0 = 1; + double yMotion = 0.25; + maid.setDeltaMovement(0, yMotion0, 0); + maid.setDeltaMovement(0, yMotion, 0); + } else { + double yMotion0 = -1; + double yMotion = -0.25; + maid.setDeltaMovement(0, yMotion0, 0); + maid.setDeltaMovement(0, yMotion, 0); + } + + // 对下行做出额外处理 + // 下行的最近节点索引值很奇怪…… + // 女仆都还没到那个下一个节点附近,就启动切换到下一个节点了…… + // 上行的就没有这个问题…… + if (!up && beGoNode.y != maidFeetPos.getY()) { + int nodeCount = path.getNodeCount(); + for (int i1 = 0; i1 < nodeCount; i1++) { + Node node = path.getNode(i1); + Node nextNode = path.getNode(Math.min(i1 + 1, nodeCount - 1)); + // 获取正确的节点信息 + if (node.y == maidFeetPos.getY() && node.x == maidFeetPos.getX() && node.z == maidFeetPos.getZ() && node.y == nextNode.y) { + beGoNodeIndex = i1; + beGoNode = node; + // 更正最近索引点 + path.setNextNodeIndex(i1); + break; + } + } + } + // 控制正常情况下到达该段楼梯节点顶部或者底部向着平台进发 + if ((beGoNode.y - maidFeetPos.getY() >= 0 && beGoNode.y - maidFeetPos.getY() <= 1.2) && beGoNodeIndex + 1 < path.getNodeCount()) { + Node currentNext = path.getNode(beGoNodeIndex); + Node pointNext = path.getNode(beGoNodeIndex + 1); + + boolean beWalkSurface = pointNext.y == currentNext.y; + if (beWalkSurface || pointNext == path.getEndNode() || maidFeetPos.getY() == currentNext.y) { + // 给予女仆当前坐标与水平节点的x、z方向的差值向量, + // 让其向着那个水平节点进发,脱离楼梯等可爬行物体,不再继续爬楼梯或者停留在上面 + int x1 = pointNext.x - currentNext.x; + int z1 = pointNext.z - currentNext.z; + double y = maid.getDeltaMovement().y(); + maid.setDeltaMovement(0.2, 1, 0.2); + maid.setDeltaMovement(x1 * 0.3, y + 0.012, z1 * 0.3); + // TODO:将身体转向下一个节点 + maid.getBrain().setMemory(MemoryModuleType.LOOK_TARGET, new BlockPosTracker(pointNext.asVec3())); + } + } + } + + @Override + protected void stop(ServerLevel pLevel, EntityMaid maid, long pGameTime) { + maid.getNavigation().stop(); + maid.setShiftKeyDown(false); + } +} diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/navigation/MaidNodeEvaluator.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/navigation/MaidNodeEvaluator.java index a39f344c6..84ffa80ff 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/navigation/MaidNodeEvaluator.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/ai/navigation/MaidNodeEvaluator.java @@ -3,15 +3,17 @@ import com.github.tartaricacid.touhoulittlemaid.entity.passive.EntityMaid; import net.minecraft.core.BlockPos; import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.FenceGateBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.pathfinder.BlockPathTypes; +import net.minecraft.world.level.pathfinder.Node; import net.minecraft.world.level.pathfinder.WalkNodeEvaluator; /** - * 该方法仅修改了栅栏门的寻路判断 + * 该方法仅修改了栅栏门和梯子的寻路判断 */ public class MaidNodeEvaluator extends WalkNodeEvaluator { @Override @@ -19,6 +21,45 @@ public BlockPathTypes getBlockPathType(BlockGetter level, int pX, int pY, int pZ return getMaidBlockPathTypeStatic(level, new BlockPos.MutableBlockPos(pX, pY, pZ)); } + @Override + public int getNeighbors(Node[] outputArray, Node node) { + int nodeId = super.getNeighbors(outputArray, node); + return this.createClimbNode(nodeId, outputArray, node); + } + + // 将可爬行物加入寻路节点里头 + // 一般这些物体都是相连的,所以向上向下搜寻下 + protected int createClimbNode(int nodeId, Node[] nodes, Node origin) { + // 只有在开启攀爬能力,才将梯子加入寻路节点里 + if (this.mob instanceof EntityMaid maid && maid.getConfigManager().isActiveClimbing()) { + // 向上搜寻 + BlockPos.MutableBlockPos upPos = new BlockPos.MutableBlockPos(origin.x, origin.y + 1, origin.z); + if (isMaidCanClimbBlock(upPos, maid)) { + Node node = this.getNode(upPos); + if (!node.closed) { + node.costMalus = 0; + node.type = BlockPathTypes.WALKABLE; + if (nodeId + 1 < nodes.length) { + nodes[nodeId++] = node; + } + } + } + // 向下搜寻 + BlockPos.MutableBlockPos downPos = new BlockPos.MutableBlockPos(origin.x, origin.y - 1, origin.z); + if (isMaidCanClimbBlock(downPos, maid)) { + Node node = this.getNode(downPos); + if (!node.closed) { + node.costMalus = 0; + node.type = BlockPathTypes.WALKABLE; + if (nodeId + 1 < nodes.length) { + nodes[nodeId++] = node; + } + } + } + } + return nodeId; + } + private BlockPathTypes getMaidBlockPathTypeStatic(BlockGetter level, BlockPos.MutableBlockPos pos) { int x = pos.getX(); int y = pos.getY(); @@ -70,6 +111,9 @@ private BlockPathTypes getMaidBlockPathTypeRaw(BlockGetter level, BlockPos pos) return BlockPathTypes.OPEN; } else if (blockState.getBlock() instanceof FenceGateBlock) { pathType = blockState.getValue(FenceGateBlock.OPEN) ? BlockPathTypes.DOOR_OPEN : BlockPathTypes.DOOR_WOOD_CLOSED; + } else if (this.mob instanceof EntityMaid maid && this.canClimb(blockState, pos, maid)) { + // 将楼梯视为可行走方块,便于后续将楼梯加入路径节点 + pathType = BlockPathTypes.WALKABLE; } else { pathType = WalkNodeEvaluator.getBlockPathTypeRaw(level, pos); } @@ -88,4 +132,21 @@ private boolean canOpenDoor(Block block, EntityMaid maid) { } return true; } + + private boolean canClimb(BlockState blockState, BlockPos blockPos, EntityMaid maid) { + if (isMaidCanClimbBlock(blockState, blockPos, maid)) { + return maid.getConfigManager().isActiveClimbing(); + } + return false; + } + + public static boolean isMaidCanClimbBlock(BlockPos blockPos, EntityMaid maid) { + Level level = maid.level; + BlockState blockState = level.getBlockState(blockPos); + return isMaidCanClimbBlock(blockState, blockPos, maid); + } + + public static boolean isMaidCanClimbBlock(BlockState blockState, BlockPos blockPos, EntityMaid maid) { + return blockState.isLadder(maid.level, blockPos, maid); + } } \ No newline at end of file diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/EntityMaid.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/EntityMaid.java index eacf41aca..7289bf2b4 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/EntityMaid.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/EntityMaid.java @@ -103,6 +103,7 @@ import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.BaseFireBlock; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.HorizontalDirectionalBlock; import net.minecraft.world.level.block.LevelEvent; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; @@ -182,6 +183,7 @@ public class EntityMaid extends TamableAnimal implements CrossbowAttackMob, IMai static final EntityDataAccessor PICKUP_TYPE = SynchedEntityData.defineId(EntityMaid.class, EntityDataSerializers.INT); static final EntityDataAccessor OPEN_DOOR = SynchedEntityData.defineId(EntityMaid.class, EntityDataSerializers.BOOLEAN); static final EntityDataAccessor OPEN_FENCE_GATE = SynchedEntityData.defineId(EntityMaid.class, EntityDataSerializers.BOOLEAN); + static final EntityDataAccessor ACTIVE_CLIMBING = SynchedEntityData.defineId(EntityMaid.class, EntityDataSerializers.BOOLEAN); /** * 开辟空间给任务存储使用,也便于附属模组存储数据 @@ -1938,4 +1940,60 @@ public ItemStack[] getHandItemsForAnimation() { return handItemsForAnimation; } + @Override + public Vec3 handleOnClimbable(Vec3 deltaMovement) { + Vec3 oriDelta = super.handleOnClimbable(deltaMovement); + // 主动爬行过程中严禁水平方向偏移,防止摔伤,y轴保持原样 + if (this.onClimbable()) { + Vec3 vec3 = this.position(); + if (vec3.x() % 1 != 0.5D || vec3.z() % 1 != 0.5) { + BlockPos currentPosition = this.blockPosition().mutable(); + Vec3 centerPos = Vec3.atBottomCenterOf(currentPosition); + this.moveTo(centerPos.x, vec3.y(), centerPos.z); + } + oriDelta = new Vec3(0, oriDelta.y, 0); + } + return oriDelta; + } + + /** + * 爬梯子状态加上路径判断 + */ + @Override + public boolean onClimbable() { + boolean result = super.onClimbable(); + if (level.isClientSide) { + // 客户端检测不到路径,所以客户端需要额外返回 + return result; + } + if (result) { + // 爬梯时,禁止旋转 + this.getLastClimbablePos().ifPresent(climbablePos -> { + BlockState blockState = this.level.getBlockState(climbablePos); + blockState.getOptionalValue(HorizontalDirectionalBlock.FACING).ifPresent(direction -> { + int yRot = direction.getOpposite().get2DDataValue() * 90; + this.setYRot(yRot); + this.setYHeadRot(yRot); + }); + }); + } + return result && !this.getNavigation().isDone(); + } + + /** + * 略微修改原版的方法,禁用了向上的动力源 + */ + @Override + public Vec3 handleRelativeFrictionAndCalculateMovement(Vec3 deltaMovement, float friction) { + this.moveRelative(this.getFrictionInfluencedSpeed(friction), deltaMovement); + this.setDeltaMovement(this.handleOnClimbable(this.getDeltaMovement())); + this.move(MoverType.SELF, this.getDeltaMovement()); + Vec3 vec3 = this.getDeltaMovement(); + boolean isCollisionOrJump = this.horizontalCollision || this.jumping; + // 如果是爬行,就需要禁用这个由于碰撞箱等的向上的动力源 + if (isCollisionOrJump && !this.onClimbable()) { + vec3 = new Vec3(vec3.x, 0.2, vec3.z); + } + return vec3; + } } diff --git a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/MaidConfigManager.java b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/MaidConfigManager.java index 3384d3fde..a5dcfcd4c 100644 --- a/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/MaidConfigManager.java +++ b/src/main/java/com/github/tartaricacid/touhoulittlemaid/entity/passive/MaidConfigManager.java @@ -21,6 +21,7 @@ public class MaidConfigManager { private static final String PICKUP_TYPE_TAG = "PickupType"; private static final String OPEN_DOOR_TAG = "OpenDoor"; private static final String OPEN_FENCE_GATE_TAG = "OpenFenceGate"; + private static final String ACTIVE_CLIMBING_TAG = "ActiveClimbing"; private final SynchedEntityData entityData; @@ -40,6 +41,7 @@ void defineSynchedData() { this.entityData.define(PICKUP_TYPE, PickType.ALL.ordinal()); this.entityData.define(OPEN_DOOR, true); this.entityData.define(OPEN_FENCE_GATE, true); + this.entityData.define(ACTIVE_CLIMBING, true); } void addAdditionalSaveData(CompoundTag compound) { @@ -55,6 +57,7 @@ void addAdditionalSaveData(CompoundTag compound) { maidSubConfig.putInt(PICKUP_TYPE_TAG, getPickupType().ordinal()); maidSubConfig.putBoolean(OPEN_DOOR_TAG, isOpenDoor()); maidSubConfig.putBoolean(OPEN_FENCE_GATE_TAG, isOpenFenceGate()); + maidSubConfig.putBoolean(ACTIVE_CLIMBING_TAG, isActiveClimbing()); compound.put(MAID_SUB_CONFIG_TAG, maidSubConfig); } @@ -91,6 +94,9 @@ void readAdditionalSaveData(CompoundTag compound) { if (maidSubConfig.contains(OPEN_FENCE_GATE_TAG)) { setOpenFenceGate(maidSubConfig.getBoolean(OPEN_FENCE_GATE_TAG)); } + if (maidSubConfig.contains(ACTIVE_CLIMBING_TAG)) { + setActiveClimbing(maidSubConfig.getBoolean(ACTIVE_CLIMBING_TAG)); + } } } @@ -126,7 +132,8 @@ public SyncNetwork getSyncNetwork() { this.getSoundFreq(), this.getPickupType(), this.isOpenDoor(), - this.isOpenFenceGate() + this.isOpenFenceGate(), + this.isActiveClimbing() ); } @@ -187,6 +194,14 @@ public void setOpenFenceGate(boolean openFenceGate) { this.entityData.set(OPEN_FENCE_GATE, openFenceGate); } + public boolean isActiveClimbing() { + return this.entityData.get(ACTIVE_CLIMBING); + } + + public void setActiveClimbing(boolean activeClimbing) { + this.entityData.set(ACTIVE_CLIMBING, activeClimbing); + } + public static final class SyncNetwork { private boolean showBackpack; private boolean showBackItem; @@ -195,9 +210,10 @@ public static final class SyncNetwork { private PickType pickType; private boolean openDoor; private boolean openFenceGate; + private boolean activeClimbing; public SyncNetwork(boolean showBackpack, boolean showBackItem, boolean showChatBubble, float soundFreq, - PickType pickType, boolean openDoor, boolean openFenceGate) { + PickType pickType, boolean openDoor, boolean openFenceGate, boolean activeClimbing) { this.showBackpack = showBackpack; this.showBackItem = showBackItem; this.showChatBubble = showChatBubble; @@ -205,6 +221,7 @@ public SyncNetwork(boolean showBackpack, boolean showBackItem, boolean showChatB this.pickType = pickType; this.openDoor = openDoor; this.openFenceGate = openFenceGate; + this.activeClimbing = activeClimbing; } public static void encode(SyncNetwork message, FriendlyByteBuf buf) { @@ -215,6 +232,7 @@ public static void encode(SyncNetwork message, FriendlyByteBuf buf) { buf.writeEnum(message.pickType); buf.writeBoolean(message.openDoor); buf.writeBoolean(message.openFenceGate); + buf.writeBoolean(message.activeClimbing); } public static SyncNetwork decode(FriendlyByteBuf buf) { @@ -225,7 +243,8 @@ public static SyncNetwork decode(FriendlyByteBuf buf) { PickType pickType = buf.readEnum(PickType.class); boolean openDoor = buf.readBoolean(); boolean openFenceGate = buf.readBoolean(); - return new SyncNetwork(showBackpack, showBackItem, showChatBubble, soundFreq, pickType, openDoor, openFenceGate); + boolean activeClimbing = buf.readBoolean(); + return new SyncNetwork(showBackpack, showBackItem, showChatBubble, soundFreq, pickType, openDoor, openFenceGate, activeClimbing); } public static void handle(SyncNetwork message, EntityMaid maid) { @@ -237,6 +256,7 @@ public static void handle(SyncNetwork message, EntityMaid maid) { configManager.setPickupType(message.pickType); configManager.setOpenDoor(message.openDoor); configManager.setOpenFenceGate(message.openFenceGate); + configManager.setActiveClimbing(message.activeClimbing); } public boolean showBackpack() { @@ -267,6 +287,10 @@ public boolean openFenceGate() { return openFenceGate; } + public boolean activeClimbing() { + return activeClimbing; + } + public void setShowBackpack(boolean showBackpack) { this.showBackpack = showBackpack; } @@ -294,5 +318,9 @@ public void setOpenDoor(boolean openDoor) { public void setOpenFenceGate(boolean openFenceGate) { this.openFenceGate = openFenceGate; } + + public void setActiveClimbing(boolean activeClimbing) { + this.activeClimbing = activeClimbing; + } } } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index c2edd5beb..246d2917b 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -17,3 +17,6 @@ public net.minecraft.client.renderer.MultiBufferSource$BufferSource f_109905_ # public com.mojang.blaze3d.platform.NativeImage f_84964_ # pixels public net.minecraft.client.renderer.texture.TextureManager f_118468_ # byPath + +public net.minecraft.world.entity.LivingEntity m_21330_(F)F # getFrictionInfluencedSpeed +public net.minecraft.world.entity.LivingEntity m_21297_(Lnet/minecraft/world/phys/Vec3;)Lnet/minecraft/world/phys/Vec3; # handleOnClimbable diff --git a/src/main/resources/assets/touhou_little_maid/animation/maid.animation.json b/src/main/resources/assets/touhou_little_maid/animation/maid.animation.json index 82c8d1454..e82fcc57c 100644 --- a/src/main/resources/assets/touhou_little_maid/animation/maid.animation.json +++ b/src/main/resources/assets/touhou_little_maid/animation/maid.animation.json @@ -3324,6 +3324,1302 @@ } } }, + "ladder_up": { + "loop": true, + "animation_length": 1, + "bones": { + "Root": { + "position": { + "0.0": [1.7, 0, 0], + "0.0417": [1.66684, 0.0599, 0], + "0.0833": [1.57528, 0.23844, 0], + "0.125": [1.4048, 0.5, 0], + "0.1667": [1.12013, 0.76156, 0], + "0.2083": [0.65667, 0.9401, 0], + "0.25": [0, 1, 0], + "0.2917": [-0.71074, 0.9401, 0], + "0.3333": [-1.26504, 0.76156, 0], + "0.375": [-1.62506, 0.5, 0], + "0.4167": [-1.84547, 0.23844, 0], + "0.4583": [-1.96266, 0.0599, 0], + "0.5": [-2, 0, 0], + "0.5417": [-1.96811, 0.0599, 0], + "0.5833": [-1.85476, 0.23844, 0], + "0.625": [-1.63615, 0.5, 0], + "0.6667": [-1.27523, 0.76156, 0], + "0.7083": [-0.71651, 0.9401, 0], + "0.75": [0, 1, 0], + "0.7917": [0.67501, 0.9401, 0], + "0.8333": [1.15129, 0.76156, 0], + "0.875": [1.43773, 0.5, 0], + "0.9167": [1.60229, 0.23844, 0], + "0.9583": [1.68243, 0.0599, 0], + "1.0": [1.7, 0, 0] + } + }, + "UpBody": { + "rotation": { + "0.0": [7.5, 0, -2.335], + "0.0417": [7.5, 0, -2.465], + "0.0833": [7.5, 0, -2.5], + "0.125": [7.5, 0, -2.465], + "0.1667": [7.5, 0, -2.335], + "0.2083": [7.5, 0, -2.08], + "0.25": [7.5, 0, -1.64], + "0.2917": [7.5, 0, -0.945], + "0.3333": [7.5, 0, 0], + "0.375": [7.5, 0, 0.945], + "0.4167": [7.5, 0, 1.64], + "0.4583": [7.5, 0, 2.08], + "0.5": [7.5, 0, 2.335], + "0.5417": [7.5, 0, 2.465], + "0.5833": [7.5, 0, 2.5], + "0.625": [7.5, 0, 2.465], + "0.6667": [7.5, 0, 2.335], + "0.7083": [7.5, 0, 2.08], + "0.75": [7.5, 0, 1.64], + "0.7917": [7.5, 0, 0.945], + "0.8333": [7.5, 0, 0], + "0.875": [7.5, 0, -0.945], + "0.9167": [7.5, 0, -1.64], + "0.9583": [7.5, 0, -2.08], + "1.0": [7.5, 0, -2.335] + } + }, + "Head": { + "rotation": { + "0.0": [0, 0, 0], + "1.0": [0, 0, 0] + } + }, + "LongHair": { + "rotation": { + "0.0": [39.6, 2.14, 3.38], + "0.0417": [39.6, 3.44, 1.3], + "0.0833": [39.6, 4.53, -0.87], + "0.125": [39.6, 5.33, -3.04], + "0.1667": [39.6, 5.77, -5.11], + "0.2083": [39.6, 5.79, -6.96], + "0.25": [39.6, 5.35, -8.46], + "0.2917": [39.6, 4.53, -9.18], + "0.3333": [39.6, 3.45, -9.03], + "0.375": [39.6, 2.17, -8.23], + "0.4167": [39.6, 0.75, -6.95], + "0.4583": [39.6, -0.71, -5.3], + "0.5": [39.6, -2.14, -3.38], + "0.5417": [39.6, -3.44, -1.3], + "0.5833": [39.6, -4.53, 0.87], + "0.625": [39.6, -5.33, 3.04], + "0.6667": [39.6, -5.77, 5.11], + "0.7083": [39.6, -5.79, 6.96], + "0.75": [39.6, -5.35, 8.46], + "0.7917": [39.6, -4.53, 9.18], + "0.8333": [39.6, -3.45, 9.03], + "0.875": [39.6, -2.17, 8.23], + "0.9167": [39.6, -0.75, 6.95], + "0.9583": [39.6, 0.71, 5.3], + "1.0": [39.6, 2.14, 3.38] + } + }, + "LeftArm": { + "rotation": { + "0.0": [-145.26175, -21.27158, 44.88345], + "0.0417": [-132.56947, -22.82532, 41.71761], + "0.0833": [-119.24895, -23.8232, 37.33811], + "0.125": [-105.84699, -24.46148, 32.065], + "0.1667": [-92.98313, -24.84982, 26.25427], + "0.2083": [-81.22649, -25.05785, 20.26751], + "0.25": [-70.99201, -25.13466, 14.44333], + "0.2917": [-62.50108, -25.11785, 9.0751], + "0.3333": [-55.80603, -25.03827, 4.39922], + "0.375": [-50.84381, -24.92385, 0.59113], + "0.4167": [-47.48806, -24.8019, -2.22906], + "0.4583": [-45.58688, -24.7019, -3.99012], + "0.5": [-44.98535, -24.65905, -4.65718], + "0.5417": [-46.48814, -24.23809, -3.94462], + "0.5833": [-51.60625, -23.08885, -1.34896], + "0.625": [-61.40533, -21.4238, 3.40334], + "0.6667": [-76.68604, -19.50182, 10.23834], + "0.7083": [-96.38655, -17.60093, 18.40153], + "0.75": [-116.24982, -15.98733, 26.55696], + "0.7917": [-131.89245, -14.8884, 33.5301], + "0.8333": [-142.08342, -14.47735, 38.8005], + "0.875": [-147.5569, -14.86791, 42.35805], + "0.9167": [-149.37271, -16.12205, 44.40246], + "0.9583": [-148.39909, -18.26006, 45.17285], + "1.0": [-145.26175, -21.27158, 44.88345] + } + }, + "LeftForeArm": { + "rotation": { + "0.0": [-7.23507, -0.486, 36.83069], + "0.0417": [-8.13204, -0.34549, 36.76026], + "0.0833": [-11.10461, -0.12491, 36.56569], + "0.125": [-16.37997, 0.14573, 36.27178], + "0.1667": [-24.02122, 0.44816, 35.9033], + "0.2083": [-33.73274, 0.76962, 35.48516], + "0.2917": [-55.65982, 1.43045, 34.59921], + "0.3333": [-65.37134, 1.75192, 34.18108], + "0.375": [-73.01259, 2.05435, 33.81259], + "0.4167": [-78.28795, 2.32499, 33.51869], + "0.4583": [-81.26052, 2.54557, 33.32411], + "0.5": [-82.15749, 2.68608, 33.25368], + "0.5417": [-81.17076, 2.66252, 33.32411], + "0.5833": [-78.14328, 2.48327, 33.51869], + "0.625": [-72.85166, 2.20669, 33.81259], + "0.6667": [-65.23389, 1.86828, 34.18108], + "0.7083": [-55.58058, 1.49286, 34.59921], + "0.7917": [-33.81197, 0.70721, 35.48516], + "0.8333": [-24.15867, 0.33179, 35.9033], + "0.875": [-16.54089, -0.00661, 36.27178], + "0.9167": [-11.24928, -0.2832, 36.56569], + "0.9583": [-8.2218, -0.46245, 36.76026], + "1.0": [-7.23507, -0.486, 36.83069] + } + }, + "RightArm": { + "rotation": { + "0.0": [-44.98535, 24.65905, 4.65718], + "0.0417": [-46.48814, 24.23809, 3.94462], + "0.0833": [-51.60625, 23.08885, 1.34896], + "0.125": [-61.40533, 21.4238, -3.40334], + "0.1667": [-76.68604, 19.50182, -10.23834], + "0.2083": [-96.38655, 17.60093, -18.40153], + "0.25": [-116.24982, 15.98733, -26.55696], + "0.2917": [-131.89245, 14.8884, -33.5301], + "0.3333": [-142.08342, 14.47735, -38.8005], + "0.375": [-147.5569, 14.86791, -42.35805], + "0.4167": [-149.37271, 16.12205, -44.40246], + "0.4583": [-148.39909, 18.26006, -45.17285], + "0.5": [-145.26175, 21.27158, -44.88345], + "0.5417": [-132.56947, 22.82532, -41.71761], + "0.5833": [-119.24895, 23.8232, -37.33811], + "0.625": [-105.84699, 24.46148, -32.065], + "0.6667": [-92.98313, 24.84982, -26.25427], + "0.7083": [-81.22649, 25.05785, -20.26751], + "0.75": [-70.99201, 25.13466, -14.44333], + "0.7917": [-62.50108, 25.11785, -9.0751], + "0.8333": [-55.80603, 25.03827, -4.39922], + "0.875": [-50.84381, 24.92385, -0.59113], + "0.9167": [-47.48806, 24.8019, 2.22906], + "0.9583": [-45.58688, 24.7019, 3.99012], + "1.0": [-44.98535, 24.65905, 4.65718] + } + }, + "RightForeArm": { + "rotation": { + "0.0": [-82.15749, -2.68608, -33.25368], + "0.0417": [-81.17076, -2.66252, -33.32411], + "0.0833": [-78.14328, -2.48327, -33.51869], + "0.125": [-72.85166, -2.20669, -33.81259], + "0.1667": [-65.23389, -1.86828, -34.18108], + "0.2083": [-55.58058, -1.49286, -34.59921], + "0.2917": [-33.81197, -0.70721, -35.48516], + "0.3333": [-24.15867, -0.33179, -35.9033], + "0.375": [-16.54089, 0.00661, -36.27178], + "0.4167": [-11.24928, 0.2832, -36.56569], + "0.4583": [-8.2218, 0.46245, -36.76026], + "0.5": [-7.23507, 0.486, -36.83069], + "0.5417": [-8.13204, 0.34549, -36.76026], + "0.5833": [-11.10461, 0.12491, -36.56569], + "0.625": [-16.37997, -0.14573, -36.27178], + "0.6667": [-24.02122, -0.44816, -35.9033], + "0.7083": [-33.73274, -0.76962, -35.48516], + "0.7917": [-55.65982, -1.43045, -34.59921], + "0.8333": [-65.37134, -1.75192, -34.18108], + "0.875": [-73.01259, -2.05435, -33.81259], + "0.9167": [-78.28795, -2.32499, -33.51869], + "0.9583": [-81.26052, -2.54557, -33.32411], + "1.0": [-82.15749, -2.68608, -33.25368] + } + }, + "DownBody": { + "rotation": { + "0.0": [0, 0, 5], + "0.0417": [0, 0, 4.91], + "0.0833": [0, 0, 4.62], + "0.125": [0, 0, 4.05], + "0.1667": [0, 0, 3.13], + "0.2083": [0, 0, 1.75], + "0.25": [0, 0, 0], + "0.2917": [0, 0, -1.75], + "0.3333": [0, 0, -3.13], + "0.375": [0, 0, -4.05], + "0.4167": [0, 0, -4.62], + "0.4583": [0, 0, -4.91], + "0.5": [0, 0, -5], + "0.5417": [0, 0, -4.92], + "0.5833": [0, 0, -4.63], + "0.625": [0, 0, -4.07], + "0.6667": [0, 0, -3.14], + "0.7083": [0, 0, -1.76], + "0.75": [0, 0, 0], + "0.7917": [0, 0, 1.76], + "0.8333": [0, 0, 3.14], + "0.875": [0, 0, 4.07], + "0.9167": [0, 0, 4.63], + "0.9583": [0, 0, 4.92], + "1.0": [0, 0, 5] + } + }, + "LeftLeg": { + "rotation": { + "0.0": [-12.5, 0, 0], + "0.0417": [-10.43169, -0.36405, 0.09101], + "0.0833": [-9.84808, -1.08972, 0.27243], + "0.125": [-11.11278, -1.97432, 0.49358], + "0.1667": [-14.67586, -2.94456, 0.73614], + "0.2083": [-21.00568, -3.96172, 0.99043], + "0.25": [-30.33669, -5, 1.25], + "0.2917": [-42.141, -6.03828, 1.50957], + "0.3333": [-54.74698, -7.05544, 1.76386], + "0.375": [-66.09556, -8.02568, 2.00642], + "0.4167": [-74.97268, -8.91028, 2.22757], + "0.4583": [-81.17628, -9.63595, 2.40899], + "0.5": [-85, -10, 2.5], + "0.5417": [-86.76478, -9.63595, 2.40899], + "0.5833": [-86.13396, -8.91028, 2.22757], + "0.625": [-82.48886, -8.02568, 2.00642], + "0.6667": [-75.44945, -7.05544, 1.76386], + "0.7083": [-65.47628, -6.03828, 1.50957], + "0.75": [-54.14379, -5, 1.25], + "0.7917": [-43.25518, -3.96172, 0.99043], + "0.8333": [-33.85793, -2.94456, 0.73614], + "0.875": [-26.23036, -1.97432, 0.49358], + "0.9167": [-20.27168, -1.08972, 0.27243], + "0.9583": [-15.76726, -0.36405, 0.09101], + "1.0": [-12.5, 0, 0] + } + }, + "LeftLowerLeg": { + "rotation": { + "0.0": [1, 0, 0], + "0.0417": [-0.52752, 0, 0], + "0.0833": [1.01353, 0, 0], + "0.125": [6.4516, 0, 0], + "0.1667": [16.65209, 0, 0], + "0.2083": [31.91227, 0, 0], + "0.25": [50.68283, 0, 0], + "0.2917": [69.19536, 0, 0], + "0.3333": [83.97854, 0, 0], + "0.375": [93.87908, 0, 0], + "0.4167": [99.31139, 0, 0], + "0.4583": [101.09898, 0, 0], + "0.5": [100, 0, 0], + "0.5417": [97.01765, 0, 0], + "0.5833": [92.51897, 0, 0], + "0.625": [86.09509, 0, 0], + "0.6667": [77.2918, 0, 0], + "0.7083": [65.85144, 0, 0], + "0.75": [52.32317, 0, 0], + "0.7917": [38.49073, 0, 0], + "0.8333": [26.35006, 0, 0], + "0.875": [16.76701, 0, 0], + "0.9167": [9.63099, 0, 0], + "0.9583": [4.51533, 0, 0], + "1.0": [1, 0, 0] + } + }, + "LeftFoot": { + "rotation": { + "0.0": [12.5, 0, 0], + "0.0417": [11.67587, 0, 0], + "0.0833": [10.4188, 0, 0], + "0.125": [8.63908, 0, 0], + "0.1667": [6.24763, 0, 0], + "0.2083": [3.20592, 0, 0], + "0.25": [-0.36238, 0, 0], + "0.2917": [-4.05549, 0, 0], + "0.3333": [-7.31677, 0, 0], + "0.375": [-9.7786, 0, 0], + "0.4167": [-11.38388, 0, 0], + "0.4583": [-12.24311, 0, 0], + "0.5": [-12.5, 0, 0], + "0.5417": [-12.1492, 0, 0], + "0.5833": [-10.98978, 0, 0], + "0.625": [-8.86073, 0, 0], + "0.6667": [-5.67416, 0, 0], + "0.7083": [-1.59925, 0, 0], + "0.75": [2.78073, 0, 0], + "0.7917": [6.69729, 0, 0], + "0.8333": [9.66671, 0, 0], + "0.875": [11.60119, 0, 0], + "0.9167": [12.61418, 0, 0], + "0.9583": [12.86543, 0, 0], + "1.0": [12.5, 0, 0] + } + }, + "RightLeg": { + "rotation": { + "0.0": [-85, 10, -2.5], + "0.0417": [-86.76478, 9.63595, -2.40899], + "0.0833": [-86.13396, 8.91028, -2.22757], + "0.125": [-82.48886, 8.02568, -2.00642], + "0.1667": [-75.44945, 7.05544, -1.76386], + "0.2083": [-65.47628, 6.03828, -1.50957], + "0.25": [-54.14379, 5, -1.25], + "0.2917": [-43.25518, 3.96172, -0.99043], + "0.3333": [-33.85793, 2.94456, -0.73614], + "0.375": [-26.23036, 1.97432, -0.49358], + "0.4167": [-20.27168, 1.08972, -0.27243], + "0.4583": [-15.76726, 0.36405, -0.09101], + "0.5": [-12.5, 0, 0], + "0.5417": [-10.43169, 0.36405, -0.09101], + "0.5833": [-9.84808, 1.08972, -0.27243], + "0.625": [-11.11278, 1.97432, -0.49358], + "0.6667": [-14.67586, 2.94456, -0.73614], + "0.7083": [-21.00568, 3.96172, -0.99043], + "0.75": [-30.33669, 5, -1.25], + "0.7917": [-42.141, 6.03828, -1.50957], + "0.8333": [-54.74698, 7.05544, -1.76386], + "0.875": [-66.09556, 8.02568, -2.00642], + "0.9167": [-74.97268, 8.91028, -2.22757], + "0.9583": [-81.17628, 9.63595, -2.40899], + "1.0": [-85, 10, -2.5] + } + }, + "RightLowerLeg": { + "rotation": { + "0.0": [100, 0, 0], + "0.0417": [97.01765, 0, 0], + "0.0833": [92.51897, 0, 0], + "0.125": [86.09509, 0, 0], + "0.1667": [77.2918, 0, 0], + "0.2083": [65.85144, 0, 0], + "0.25": [52.32317, 0, 0], + "0.2917": [38.49073, 0, 0], + "0.3333": [26.35006, 0, 0], + "0.375": [16.76701, 0, 0], + "0.4167": [9.63099, 0, 0], + "0.4583": [4.51533, 0, 0], + "0.5": [1, 0, 0], + "0.5417": [-0.52752, 0, 0], + "0.5833": [1.01353, 0, 0], + "0.625": [6.4516, 0, 0], + "0.6667": [16.65209, 0, 0], + "0.7083": [31.91227, 0, 0], + "0.75": [50.68283, 0, 0], + "0.7917": [69.19536, 0, 0], + "0.8333": [83.97854, 0, 0], + "0.875": [93.87908, 0, 0], + "0.9167": [99.31139, 0, 0], + "0.9583": [101.09898, 0, 0], + "1.0": [100, 0, 0] + } + }, + "RightFoot": { + "rotation": { + "0.0": [-12.5, 0, 0], + "0.0417": [-12.1492, 0, 0], + "0.0833": [-10.98978, 0, 0], + "0.125": [-8.86073, 0, 0], + "0.1667": [-5.67416, 0, 0], + "0.2083": [-1.59925, 0, 0], + "0.25": [2.78073, 0, 0], + "0.2917": [6.69729, 0, 0], + "0.3333": [9.66671, 0, 0], + "0.375": [11.60119, 0, 0], + "0.4167": [12.61418, 0, 0], + "0.4583": [12.86543, 0, 0], + "0.5": [12.5, 0, 0], + "0.5417": [11.67587, 0, 0], + "0.5833": [10.4188, 0, 0], + "0.625": [8.63908, 0, 0], + "0.6667": [6.24763, 0, 0], + "0.7083": [3.20592, 0, 0], + "0.75": [-0.36238, 0, 0], + "0.7917": [-4.05549, 0, 0], + "0.8333": [-7.31677, 0, 0], + "0.875": [-9.7786, 0, 0], + "0.9167": [-11.38388, 0, 0], + "0.9583": [-12.24311, 0, 0], + "1.0": [-12.5, 0, 0] + } + } + } + }, + "ladder_stillness": { + "loop": true, + "animation_length": 1, + "bones": { + "Root": { + "position": { + "0.0": [1.7, 0, 0], + "0.0417": [1.7, 0, 0], + "0.0833": [1.7, 0, 0], + "0.125": [1.7, 0, 0], + "0.1667": [1.7, 0, 0], + "0.2083": [1.7, 0, 0], + "0.25": [1.7, 0, 0], + "0.2917": [1.7, 0, 0], + "0.3333": [1.7, 0, 0], + "0.375": [1.7, 0, 0], + "0.4167": [1.7, 0, 0], + "0.4583": [1.7, 0, 0], + "0.5": [1.7, 0, 0], + "0.5417": [1.7, 0, 0], + "0.5833": [1.7, 0, 0], + "0.625": [1.7, 0, 0], + "0.6667": [1.7, 0, 0], + "0.7083": [1.7, 0, 0], + "0.75": [1.7, 0, 0], + "0.7917": [1.7, 0, 0], + "0.8333": [1.7, 0, 0], + "0.875": [1.7, 0, 0], + "0.9167": [1.7, 0, 0], + "0.9583": [1.7, 0, 0], + "1.0": [1.7, 0, 0] + } + }, + "UpBody": { + "rotation": { + "0.0": [7.55, 0, -2.33], + "0.0417": [7.52, 0, -2.33], + "0.0833": [7.5, 0, -2.33], + "0.125": [7.5, 0, -2.33], + "0.1667": [7.53, 0, -2.33], + "0.2083": [7.57, 0, -2.33], + "0.25": [7.63, 0.01, -2.33], + "0.2917": [7.69, 0.01, -2.33], + "0.3333": [7.75, 0.01, -2.33], + "0.375": [7.81, 0.01, -2.33], + "0.4167": [7.87, 0.01, -2.33], + "0.4583": [7.93, 0.02, -2.33], + "0.5": [7.97, 0.02, -2.33], + "0.5417": [8, 0.02, -2.33], + "0.5833": [8, 0.02, -2.33], + "0.625": [7.98, 0.02, -2.33], + "0.6667": [7.95, 0.02, -2.33], + "0.7083": [7.91, 0.02, -2.33], + "0.75": [7.86, 0.01, -2.33], + "0.7917": [7.81, 0.01, -2.33], + "0.8333": [7.75, 0.01, -2.33], + "0.875": [7.69, 0.01, -2.33], + "0.9167": [7.64, 0.01, -2.33], + "0.9583": [7.59, 0, -2.33], + "1.0": [7.55, 0, -2.33] + } + }, + "Head": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0], + "0.0833": [0, 0, 0], + "0.125": [0, 0, 0], + "0.1667": [0, 0, 0], + "0.2083": [0, 0, 0], + "0.25": [0, 0, 0], + "0.2917": [0, 0, 0], + "0.3333": [0, 0, 0], + "0.375": [0, 0, 0], + "0.4167": [0, 0, 0], + "0.4583": [0, 0, 0], + "0.5": [0, 0, 0], + "0.5417": [0, 0, 0], + "0.5833": [0, 0, 0], + "0.625": [0, 0, 0], + "0.6667": [0, 0, 0], + "0.7083": [0, 0, 0], + "0.75": [0, 0, 0], + "0.7917": [0, 0, 0], + "0.8333": [0, 0, 0], + "0.875": [0, 0, 0], + "0.9167": [0, 0, 0], + "0.9583": [0, 0, 0], + "1.0": [0, 0, 0] + } + }, + "LongHair": { + "rotation": { + "0.0": [39.6, 2.14, 3.38], + "0.0417": [39.6, 2.14, 3.38], + "0.0833": [39.6, 2.14, 3.38], + "0.125": [39.6, 2.14, 3.38], + "0.1667": [39.6, 2.14, 3.38], + "0.2083": [39.6, 2.14, 3.38], + "0.25": [39.6, 2.14, 3.38], + "0.2917": [39.6, 2.14, 3.38], + "0.3333": [39.6, 2.14, 3.38], + "0.375": [39.6, 2.14, 3.38], + "0.4167": [39.6, 2.14, 3.38], + "0.4583": [39.6, 2.14, 3.38], + "0.5": [39.6, 2.14, 3.38], + "0.5417": [39.6, 2.14, 3.38], + "0.5833": [39.6, 2.14, 3.38], + "0.625": [39.6, 2.14, 3.38], + "0.6667": [39.6, 2.14, 3.38], + "0.7083": [39.6, 2.14, 3.38], + "0.75": [39.6, 2.14, 3.38], + "0.7917": [39.6, 2.14, 3.38], + "0.8333": [39.6, 2.14, 3.38], + "0.875": [39.6, 2.14, 3.38], + "0.9167": [39.6, 2.14, 3.38], + "0.9583": [39.6, 2.14, 3.38], + "1.0": [39.6, 2.14, 3.38] + } + }, + "LeftArm": { + "rotation": { + "0.0": [-145.26, -21.27, 44.88], + "0.0417": [-145.23, -21.29, 44.87], + "0.0833": [-145.16, -21.32, 44.84], + "0.125": [-145.07, -21.35, 44.81], + "0.1667": [-144.97, -21.39, 44.78], + "0.2083": [-144.87, -21.44, 44.74], + "0.25": [-144.77, -21.48, 44.7], + "0.2917": [-144.67, -21.52, 44.66], + "0.3333": [-144.57, -21.56, 44.63], + "0.375": [-144.48, -21.6, 44.59], + "0.4167": [-144.39, -21.64, 44.56], + "0.4583": [-144.32, -21.67, 44.53], + "0.5": [-144.28, -21.68, 44.52], + "0.5417": [-144.32, -21.67, 44.53], + "0.5833": [-144.39, -21.64, 44.56], + "0.625": [-144.48, -21.6, 44.59], + "0.6667": [-144.57, -21.56, 44.63], + "0.7083": [-144.67, -21.52, 44.66], + "0.75": [-144.77, -21.48, 44.7], + "0.7917": [-144.87, -21.44, 44.74], + "0.8333": [-144.97, -21.39, 44.78], + "0.875": [-145.07, -21.35, 44.81], + "0.9167": [-145.16, -21.32, 44.84], + "0.9583": [-145.23, -21.29, 44.87], + "1.0": [-145.26, -21.27, 44.88] + } + }, + "LeftForeArm": { + "rotation": { + "0.0": [-7.24, -0.49, 36.83], + "0.0417": [-7.32, -0.48, 36.83], + "0.0833": [-7.48, -0.47, 36.82], + "0.125": [-7.68, -0.45, 36.82], + "0.1667": [-7.9, -0.43, 36.81], + "0.2083": [-8.12, -0.41, 36.8], + "0.25": [-8.36, -0.4, 36.8], + "0.2917": [-8.59, -0.38, 36.79], + "0.3333": [-8.82, -0.36, 36.78], + "0.375": [-9.03, -0.34, 36.77], + "0.4167": [-9.23, -0.33, 36.77], + "0.4583": [-9.39, -0.31, 36.76], + "0.5": [-9.48, -0.31, 36.76], + "0.5417": [-9.39, -0.31, 36.76], + "0.5833": [-9.23, -0.33, 36.77], + "0.625": [-9.03, -0.34, 36.77], + "0.6667": [-8.82, -0.36, 36.78], + "0.7083": [-8.59, -0.38, 36.79], + "0.75": [-8.36, -0.4, 36.8], + "0.7917": [-8.12, -0.41, 36.8], + "0.8333": [-7.9, -0.43, 36.81], + "0.875": [-7.68, -0.45, 36.82], + "0.9167": [-7.48, -0.47, 36.82], + "0.9583": [-7.32, -0.48, 36.83], + "1.0": [-7.24, -0.49, 36.83] + } + }, + "RightArm": { + "rotation": { + "0.0": [-44.99, 24.66, 4.66], + "0.0417": [-44.95, 24.65, 4.67], + "0.0833": [-44.87, 24.62, 4.69], + "0.125": [-44.78, 24.59, 4.73], + "0.1667": [-44.68, 24.56, 4.77], + "0.2083": [-44.58, 24.52, 4.82], + "0.25": [-44.47, 24.48, 4.87], + "0.2917": [-44.36, 24.45, 4.92], + "0.3333": [-44.26, 24.41, 4.96], + "0.375": [-44.16, 24.38, 5.01], + "0.4167": [-44.07, 24.35, 5.04], + "0.4583": [-43.99, 24.32, 5.07], + "0.5": [-43.96, 24.31, 5.08], + "0.5417": [-43.99, 24.32, 5.07], + "0.5833": [-44.07, 24.35, 5.04], + "0.625": [-44.16, 24.38, 5.01], + "0.6667": [-44.26, 24.41, 4.96], + "0.7083": [-44.36, 24.45, 4.92], + "0.75": [-44.47, 24.48, 4.87], + "0.7917": [-44.58, 24.52, 4.82], + "0.8333": [-44.68, 24.56, 4.77], + "0.875": [-44.78, 24.59, 4.73], + "0.9167": [-44.87, 24.62, 4.69], + "0.9583": [-44.95, 24.65, 4.67], + "1.0": [-44.99, 24.66, 4.66] + } + }, + "RightForeArm": { + "rotation": { + "0.0": [-82.16, -2.69, -33.25], + "0.0417": [-82.2, -2.75, -33.25], + "0.0833": [-82.31, -2.77, -33.25], + "0.125": [-82.48, -2.77, -33.25], + "0.1667": [-82.69, -2.76, -33.24], + "0.2083": [-82.92, -2.74, -33.24], + "0.25": [-83.16, -2.72, -33.23], + "0.2917": [-83.4, -2.7, -33.23], + "0.3333": [-83.63, -2.68, -33.22], + "0.375": [-83.83, -2.67, -33.22], + "0.4167": [-84, -2.67, -33.22], + "0.4583": [-84.11, -2.69, -33.21], + "0.5": [-84.16, -2.75, -33.21], + "0.5417": [-84.12, -2.81, -33.21], + "0.5833": [-84.01, -2.83, -33.22], + "0.625": [-83.84, -2.82, -33.22], + "0.6667": [-83.63, -2.79, -33.22], + "0.7083": [-83.4, -2.76, -33.23], + "0.75": [-83.16, -2.72, -33.23], + "0.7917": [-82.91, -2.68, -33.24], + "0.8333": [-82.68, -2.65, -33.24], + "0.875": [-82.48, -2.62, -33.25], + "0.9167": [-82.31, -2.61, -33.25], + "0.9583": [-82.2, -2.63, -33.25], + "1.0": [-82.16, -2.69, -33.25] + } + }, + "DownBody": { + "rotation": { + "0.0": [0, 0, 5], + "0.0417": [0, 0, 5], + "0.0833": [0, 0, 5], + "0.125": [0, 0, 5], + "0.1667": [0, 0, 5], + "0.2083": [0, 0, 5], + "0.25": [0, 0, 5], + "0.2917": [0, 0, 5], + "0.3333": [0, 0, 5], + "0.375": [0, 0, 5], + "0.4167": [0, 0, 5], + "0.4583": [0, 0, 5], + "0.5": [0, 0, 5], + "0.5417": [0, 0, 5], + "0.5833": [0, 0, 5], + "0.625": [0, 0, 5], + "0.6667": [0, 0, 5], + "0.7083": [0, 0, 5], + "0.75": [0, 0, 5], + "0.7917": [0, 0, 5], + "0.8333": [0, 0, 5], + "0.875": [0, 0, 5], + "0.9167": [0, 0, 5], + "0.9583": [0, 0, 5], + "1.0": [0, 0, 5] + } + }, + "LeftLeg": { + "rotation": { + "0.0": [-12.5, 0, 0], + "0.0417": [-12.5, 0, 0], + "0.0833": [-12.5, 0, 0], + "0.125": [-12.5, 0, 0], + "0.1667": [-12.5, 0, 0], + "0.2083": [-12.5, 0, 0], + "0.25": [-12.5, 0, 0], + "0.2917": [-12.5, 0, 0], + "0.3333": [-12.5, 0, 0], + "0.375": [-12.5, 0, 0], + "0.4167": [-12.5, 0, 0], + "0.4583": [-12.5, 0, 0], + "0.5": [-12.5, 0, 0], + "0.5417": [-12.5, 0, 0], + "0.5833": [-12.5, 0, 0], + "0.625": [-12.5, 0, 0], + "0.6667": [-12.5, 0, 0], + "0.7083": [-12.5, 0, 0], + "0.75": [-12.5, 0, 0], + "0.7917": [-12.5, 0, 0], + "0.8333": [-12.5, 0, 0], + "0.875": [-12.5, 0, 0], + "0.9167": [-12.5, 0, 0], + "0.9583": [-12.5, 0, 0], + "1.0": [-12.5, 0, 0] + } + }, + "LeftLowerLeg": { + "rotation": { + "0.0": [1, 0, 0], + "0.0417": [1, 0, 0], + "0.0833": [1, 0, 0], + "0.125": [1, 0, 0], + "0.1667": [1, 0, 0], + "0.2083": [1, 0, 0], + "0.25": [1, 0, 0], + "0.2917": [1, 0, 0], + "0.3333": [1, 0, 0], + "0.375": [1, 0, 0], + "0.4167": [1, 0, 0], + "0.4583": [1, 0, 0], + "0.5": [1, 0, 0], + "0.5417": [1, 0, 0], + "0.5833": [1, 0, 0], + "0.625": [1, 0, 0], + "0.6667": [1, 0, 0], + "0.7083": [1, 0, 0], + "0.75": [1, 0, 0], + "0.7917": [1, 0, 0], + "0.8333": [1, 0, 0], + "0.875": [1, 0, 0], + "0.9167": [1, 0, 0], + "0.9583": [1, 0, 0], + "1.0": [1, 0, 0] + } + }, + "LeftFoot": { + "rotation": { + "0.0": [12.5, 0, 0], + "0.0417": [12.5, 0, 0], + "0.0833": [12.5, 0, 0], + "0.125": [12.5, 0, 0], + "0.1667": [12.5, 0, 0], + "0.2083": [12.5, 0, 0], + "0.25": [12.5, 0, 0], + "0.2917": [12.5, 0, 0], + "0.3333": [12.5, 0, 0], + "0.375": [12.5, 0, 0], + "0.4167": [12.5, 0, 0], + "0.4583": [12.5, 0, 0], + "0.5": [12.5, 0, 0], + "0.5417": [12.5, 0, 0], + "0.5833": [12.5, 0, 0], + "0.625": [12.5, 0, 0], + "0.6667": [12.5, 0, 0], + "0.7083": [12.5, 0, 0], + "0.75": [12.5, 0, 0], + "0.7917": [12.5, 0, 0], + "0.8333": [12.5, 0, 0], + "0.875": [12.5, 0, 0], + "0.9167": [12.5, 0, 0], + "0.9583": [12.5, 0, 0], + "1.0": [12.5, 0, 0] + } + }, + "RightLeg": { + "rotation": { + "0.0": [-85, 10, -2.5], + "0.0417": [-85, 10, -2.5], + "0.0833": [-85, 10, -2.5], + "0.125": [-85, 10, -2.5], + "0.1667": [-85, 10, -2.5], + "0.2083": [-85, 10, -2.5], + "0.25": [-85, 10, -2.5], + "0.2917": [-85, 10, -2.5], + "0.3333": [-85, 10, -2.5], + "0.375": [-85, 10, -2.5], + "0.4167": [-85, 10, -2.5], + "0.4583": [-85, 10, -2.5], + "0.5": [-85, 10, -2.5], + "0.5417": [-85, 10, -2.5], + "0.5833": [-85, 10, -2.5], + "0.625": [-85, 10, -2.5], + "0.6667": [-85, 10, -2.5], + "0.7083": [-85, 10, -2.5], + "0.75": [-85, 10, -2.5], + "0.7917": [-85, 10, -2.5], + "0.8333": [-85, 10, -2.5], + "0.875": [-85, 10, -2.5], + "0.9167": [-85, 10, -2.5], + "0.9583": [-85, 10, -2.5], + "1.0": [-85, 10, -2.5] + } + }, + "RightLowerLeg": { + "rotation": { + "0.0": [100, 0, 0], + "0.0417": [100, 0, 0], + "0.0833": [100, 0, 0], + "0.125": [100, 0, 0], + "0.1667": [100, 0, 0], + "0.2083": [100, 0, 0], + "0.25": [100, 0, 0], + "0.2917": [100, 0, 0], + "0.3333": [100, 0, 0], + "0.375": [100, 0, 0], + "0.4167": [100, 0, 0], + "0.4583": [100, 0, 0], + "0.5": [100, 0, 0], + "0.5417": [100, 0, 0], + "0.5833": [100, 0, 0], + "0.625": [100, 0, 0], + "0.6667": [100, 0, 0], + "0.7083": [100, 0, 0], + "0.75": [100, 0, 0], + "0.7917": [100, 0, 0], + "0.8333": [100, 0, 0], + "0.875": [100, 0, 0], + "0.9167": [100, 0, 0], + "0.9583": [100, 0, 0], + "1.0": [100, 0, 0] + } + }, + "RightFoot": { + "rotation": { + "0.0": [-12.5, 0, 0], + "0.0417": [-12.5, 0, 0], + "0.0833": [-12.5, 0, 0], + "0.125": [-12.5, 0, 0], + "0.1667": [-12.5, 0, 0], + "0.2083": [-12.5, 0, 0], + "0.25": [-12.5, 0, 0], + "0.2917": [-12.5, 0, 0], + "0.3333": [-12.5, 0, 0], + "0.375": [-12.5, 0, 0], + "0.4167": [-12.5, 0, 0], + "0.4583": [-12.5, 0, 0], + "0.5": [-12.5, 0, 0], + "0.5417": [-12.5, 0, 0], + "0.5833": [-12.5, 0, 0], + "0.625": [-12.5, 0, 0], + "0.6667": [-12.5, 0, 0], + "0.7083": [-12.5, 0, 0], + "0.75": [-12.5, 0, 0], + "0.7917": [-12.5, 0, 0], + "0.8333": [-12.5, 0, 0], + "0.875": [-12.5, 0, 0], + "0.9167": [-12.5, 0, 0], + "0.9583": [-12.5, 0, 0], + "1.0": [-12.5, 0, 0] + } + } + } + }, + "ladder_down": { + "loop": true, + "animation_length": 1, + "bones": { + "Root": { + "position": { + "0.0": [1.7, 0, 0], + "0.0417": [1.7, -0.01, 0], + "0.0833": [1.7, -0.02, 0], + "0.125": [1.7, -0.05, 0], + "0.1667": [1.7, -0.08, 0], + "0.2083": [1.7, -0.11, 0], + "0.25": [1.7, -0.15, 0], + "0.2917": [1.7, -0.19, 0], + "0.3333": [1.7, -0.22, 0], + "0.375": [1.7, -0.25, 0], + "0.4167": [1.7, -0.28, 0], + "0.4583": [1.7, -0.29, 0], + "0.5": [1.7, -0.3, 0], + "0.5417": [1.7, -0.3, 0], + "0.5833": [1.7, -0.28, 0], + "0.625": [1.7, -0.26, 0], + "0.6667": [1.7, -0.23, 0], + "0.7083": [1.7, -0.19, 0], + "0.75": [1.7, -0.15, 0], + "0.7917": [1.7, -0.11, 0], + "0.8333": [1.7, -0.07, 0], + "0.875": [1.7, -0.04, 0], + "0.9167": [1.7, -0.02, 0], + "0.9583": [1.7, 0, 0], + "1.0": [1.7, 0, 0] + } + }, + "UpBody": { + "rotation": { + "0.0": [7.5, 0, 0], + "0.0417": [7.52, 0, 0], + "0.0833": [7.55, 0, 0], + "0.125": [7.6, 0, 0], + "0.1667": [7.65, 0, 0], + "0.2083": [7.7, 0, 0], + "0.25": [7.75, 0, 0], + "0.2917": [7.8, 0, 0], + "0.3333": [7.85, 0, 0], + "0.375": [7.9, 0, 0], + "0.4167": [7.95, 0, 0], + "0.4583": [7.98, 0, 0], + "0.5": [8, 0, 0], + "0.5417": [7.98, 0, 0], + "0.5833": [7.95, 0, 0], + "0.625": [7.9, 0, 0], + "0.6667": [7.85, 0, 0], + "0.7083": [7.8, 0, 0], + "0.75": [7.75, 0, 0], + "0.7917": [7.7, 0, 0], + "0.8333": [7.65, 0, 0], + "0.875": [7.6, 0, 0], + "0.9167": [7.55, 0, 0], + "0.9583": [7.52, 0, 0], + "1.0": [7.5, 0, 0] + } + }, + "Head": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0], + "0.0833": [0, 0, 0], + "0.125": [0, 0, 0], + "0.1667": [0, 0, 0], + "0.2083": [0, 0, 0], + "0.25": [0, 0, 0], + "0.2917": [0, 0, 0], + "0.3333": [0, 0, 0], + "0.375": [0, 0, 0], + "0.4167": [0, 0, 0], + "0.4583": [0, 0, 0], + "0.5": [0, 0, 0], + "0.5417": [0, 0, 0], + "0.5833": [0, 0, 0], + "0.625": [0, 0, 0], + "0.6667": [0, 0, 0], + "0.7083": [0, 0, 0], + "0.75": [0, 0, 0], + "0.7917": [0, 0, 0], + "0.8333": [0, 0, 0], + "0.875": [0, 0, 0], + "0.9167": [0, 0, 0], + "0.9583": [0, 0, 0], + "1.0": [0, 0, 0] + } + }, + "LongHair": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0], + "0.0833": [0, 0, 0], + "0.125": [0, 0, 0], + "0.1667": [0, 0, 0], + "0.2083": [0, 0, 0], + "0.25": [0, 0, 0], + "0.2917": [0, 0, 0], + "0.3333": [0, 0, 0], + "0.375": [0, 0, 0], + "0.4167": [0, 0, 0], + "0.4583": [0, 0, 0], + "0.5": [0, 0, 0], + "0.5417": [0, 0, 0], + "0.5833": [0, 0, 0], + "0.625": [0, 0, 0], + "0.6667": [0, 0, 0], + "0.7083": [0, 0, 0], + "0.75": [0, 0, 0], + "0.7917": [0, 0, 0], + "0.8333": [0, 0, 0], + "0.875": [0, 0, 0], + "0.9167": [0, 0, 0], + "0.9583": [0, 0, 0], + "1.0": [0, 0, 0] + } + }, + "LeftArm": { + "rotation": { + "0.0": [-45.26, -24.76, -4.39], + "0.0417": [-45.11, -24.71, -4.46], + "0.0833": [-45.02, -24.67, -4.55], + "0.125": [-44.99, -24.66, -4.66], + "0.1667": [-45.02, -24.67, -4.74], + "0.2083": [-45.11, -24.71, -4.76], + "0.25": [-45.26, -24.76, -4.72], + "0.2917": [-45.45, -24.83, -4.61], + "0.3333": [-45.66, -24.91, -4.46], + "0.375": [-45.88, -24.99, -4.28], + "0.4167": [-46.1, -25.07, -4.1], + "0.4583": [-46.31, -25.15, -3.94], + "0.5": [-46.5, -25.22, -3.84], + "0.5417": [-46.64, -25.27, -3.8], + "0.5833": [-46.74, -25.31, -3.82], + "0.625": [-46.77, -25.32, -3.9], + "0.6667": [-46.74, -25.31, -4.01], + "0.7083": [-46.64, -25.27, -4.1], + "0.75": [-46.5, -25.22, -4.17], + "0.7917": [-46.31, -25.15, -4.22], + "0.8333": [-46.1, -25.07, -4.25], + "0.875": [-45.88, -24.99, -4.28], + "0.9167": [-45.66, -24.91, -4.31], + "0.9583": [-45.45, -24.83, -4.34], + "1.0": [-45.26, -24.76, -4.39] + } + }, + "LeftForeArm": { + "rotation": { + "0.0": [-49.66, 2.69, 33.25], + "0.0417": [-49.68, 2.74, 33.25], + "0.0833": [-49.88, 2.77, 33.24], + "0.125": [-50.19, 2.76, 33.23], + "0.1667": [-50.59, 2.75, 33.21], + "0.2083": [-51.05, 2.72, 33.19], + "0.25": [-51.53, 2.69, 33.17], + "0.2917": [-52.02, 2.66, 33.14], + "0.3333": [-52.48, 2.64, 33.12], + "0.375": [-52.88, 2.62, 33.1], + "0.4167": [-53.19, 2.62, 33.09], + "0.4583": [-53.39, 2.64, 33.08], + "0.5": [-53.41, 2.7, 33.08], + "0.5417": [-53.28, 2.76, 33.08], + "0.5833": [-53.04, 2.78, 33.09], + "0.625": [-52.72, 2.77, 33.1], + "0.6667": [-52.36, 2.75, 33.12], + "0.7083": [-51.95, 2.72, 33.14], + "0.75": [-51.53, 2.69, 33.17], + "0.7917": [-51.12, 2.66, 33.19], + "0.8333": [-50.71, 2.63, 33.21], + "0.875": [-50.35, 2.61, 33.23], + "0.9167": [-50.03, 2.61, 33.24], + "0.9583": [-49.79, 2.63, 33.25], + "1.0": [-49.66, 2.69, 33.25] + } + }, + "RightArm": { + "rotation": { + "0.0": [-45.26, 24.76, 4.39], + "0.0417": [-45.11, 24.71, 4.46], + "0.0833": [-45.02, 24.67, 4.55], + "0.125": [-44.99, 24.66, 4.66], + "0.1667": [-45.02, 24.67, 4.74], + "0.2083": [-45.11, 24.71, 4.76], + "0.25": [-45.26, 24.76, 4.72], + "0.2917": [-45.45, 24.83, 4.61], + "0.3333": [-45.66, 24.91, 4.46], + "0.375": [-45.88, 24.99, 4.28], + "0.4167": [-46.1, 25.07, 4.1], + "0.4583": [-46.31, 25.15, 3.94], + "0.5": [-46.5, 25.22, 3.84], + "0.5417": [-46.64, 25.27, 3.8], + "0.5833": [-46.74, 25.31, 3.82], + "0.625": [-46.77, 25.32, 3.9], + "0.6667": [-46.74, 25.31, 4.01], + "0.7083": [-46.64, 25.27, 4.1], + "0.75": [-46.5, 25.22, 4.17], + "0.7917": [-46.31, 25.15, 4.22], + "0.8333": [-46.1, 25.07, 4.25], + "0.875": [-45.88, 24.99, 4.28], + "0.9167": [-45.66, 24.91, 4.31], + "0.9583": [-45.45, 24.83, 4.34], + "1.0": [-45.26, 24.76, 4.39] + } + }, + "RightForeArm": { + "rotation": { + "0.0": [-49.66, -2.69, -33.25], + "0.0417": [-49.68, -2.74, -33.25], + "0.0833": [-49.88, -2.77, -33.24], + "0.125": [-50.19, -2.76, -33.23], + "0.1667": [-50.59, -2.75, -33.21], + "0.2083": [-51.05, -2.72, -33.19], + "0.25": [-51.53, -2.69, -33.17], + "0.2917": [-52.02, -2.66, -33.14], + "0.3333": [-52.48, -2.64, -33.12], + "0.375": [-52.88, -2.62, -33.1], + "0.4167": [-53.19, -2.62, -33.09], + "0.4583": [-53.39, -2.64, -33.08], + "0.5": [-53.41, -2.7, -33.08], + "0.5417": [-53.28, -2.76, -33.08], + "0.5833": [-53.04, -2.78, -33.09], + "0.625": [-52.72, -2.77, -33.1], + "0.6667": [-52.36, -2.75, -33.12], + "0.7083": [-51.95, -2.72, -33.14], + "0.75": [-51.53, -2.69, -33.17], + "0.7917": [-51.12, -2.66, -33.19], + "0.8333": [-50.71, -2.63, -33.21], + "0.875": [-50.35, -2.61, -33.23], + "0.9167": [-50.03, -2.61, -33.24], + "0.9583": [-49.79, -2.63, -33.25], + "1.0": [-49.66, -2.69, -33.25] + } + }, + "DownBody": { + "rotation": { + "0.0": [0, 0, 0], + "0.0417": [0, 0, 0], + "0.0833": [0, 0, 0], + "0.125": [0, 0, 0], + "0.1667": [0, 0, 0], + "0.2083": [0, 0, 0], + "0.25": [0, 0, 0], + "0.2917": [0, 0, 0], + "0.3333": [0, 0, 0], + "0.375": [0, 0, 0], + "0.4167": [0, 0, 0], + "0.4583": [0, 0, 0], + "0.5": [0, 0, 0], + "0.5417": [0, 0, 0], + "0.5833": [0, 0, 0], + "0.625": [0, 0, 0], + "0.6667": [0, 0, 0], + "0.7083": [0, 0, 0], + "0.75": [0, 0, 0], + "0.7917": [0, 0, 0], + "0.8333": [0, 0, 0], + "0.875": [0, 0, 0], + "0.9167": [0, 0, 0], + "0.9583": [0, 0, 0], + "1.0": [0, 0, 0] + } + }, + "LeftLeg": { + "rotation": { + "0.0": [-54.72, -9.68, -12.44], + "0.0417": [-54.87, -9.71, -12.42], + "0.0833": [-55, -9.74, -12.39], + "0.125": [-55.11, -9.76, -12.38], + "0.1667": [-55.16, -9.78, -12.37], + "0.2083": [-55.11, -9.76, -12.38], + "0.25": [-55, -9.74, -12.39], + "0.2917": [-54.87, -9.71, -12.42], + "0.3333": [-54.72, -9.68, -12.44], + "0.375": [-54.57, -9.65, -12.47], + "0.4167": [-54.42, -9.62, -12.49], + "0.4583": [-54.26, -9.58, -12.52], + "0.5": [-54.11, -9.55, -12.54], + "0.5417": [-53.97, -9.52, -12.57], + "0.5833": [-53.84, -9.49, -12.59], + "0.625": [-53.73, -9.47, -12.61], + "0.6667": [-53.67, -9.46, -12.62], + "0.7083": [-53.73, -9.47, -12.61], + "0.75": [-53.84, -9.49, -12.59], + "0.7917": [-53.97, -9.52, -12.57], + "0.8333": [-54.11, -9.55, -12.54], + "0.875": [-54.26, -9.58, -12.52], + "0.9167": [-54.42, -9.62, -12.49], + "0.9583": [-54.57, -9.65, -12.47], + "1.0": [-54.72, -9.68, -12.44] + } + }, + "LeftLowerLeg": { + "rotation": { + "0.0": [60, 0, 0], + "0.0417": [59.93, 0, 0], + "0.0833": [59.78, 0, 0], + "0.125": [59.61, 0, 0], + "0.1667": [59.41, 0, 0], + "0.2083": [59.21, 0, 0], + "0.25": [59, 0, 0], + "0.2917": [58.79, 0, 0], + "0.3333": [58.59, 0, 0], + "0.375": [58.39, 0, 0], + "0.4167": [58.22, 0, 0], + "0.4583": [58.07, 0, 0], + "0.5": [58, 0, 0], + "0.5417": [58.07, 0, 0], + "0.5833": [58.22, 0, 0], + "0.625": [58.39, 0, 0], + "0.6667": [58.59, 0, 0], + "0.7083": [58.79, 0, 0], + "0.75": [59, 0, 0], + "0.7917": [59.21, 0, 0], + "0.8333": [59.41, 0, 0], + "0.875": [59.61, 0, 0], + "0.9167": [59.78, 0, 0], + "0.9583": [59.93, 0, 0], + "1.0": [60, 0, 0] + } + }, + "LeftFoot": { + "rotation": { + "0.0": [-27.32, -2.29, 12.06], + "0.0417": [-27.32, -2.29, 12.06], + "0.0833": [-27.32, -2.29, 12.06], + "0.125": [-27.32, -2.29, 12.06], + "0.1667": [-27.32, -2.29, 12.06], + "0.2083": [-27.32, -2.29, 12.06], + "0.25": [-27.32, -2.29, 12.06], + "0.2917": [-27.32, -2.29, 12.06], + "0.3333": [-27.32, -2.29, 12.06], + "0.375": [-27.32, -2.29, 12.06], + "0.4167": [-27.32, -2.29, 12.06], + "0.4583": [-27.32, -2.29, 12.06], + "0.5": [-27.32, -2.29, 12.06], + "0.5417": [-27.32, -2.29, 12.06], + "0.5833": [-27.32, -2.29, 12.06], + "0.625": [-27.32, -2.29, 12.06], + "0.6667": [-27.32, -2.29, 12.06], + "0.7083": [-27.32, -2.29, 12.06], + "0.75": [-27.32, -2.29, 12.06], + "0.7917": [-27.32, -2.29, 12.06], + "0.8333": [-27.32, -2.29, 12.06], + "0.875": [-27.32, -2.29, 12.06], + "0.9167": [-27.32, -2.29, 12.06], + "0.9583": [-27.32, -2.29, 12.06], + "1.0": [-27.32, -2.29, 12.06] + } + }, + "RightLeg": { + "rotation": { + "0.0": [-54.72, 9.68, 12.44], + "0.0417": [-54.87, 9.71, 12.42], + "0.0833": [-55, 9.74, 12.39], + "0.125": [-55.11, 9.76, 12.38], + "0.1667": [-55.16, 9.78, 12.37], + "0.2083": [-55.11, 9.76, 12.38], + "0.25": [-55, 9.74, 12.39], + "0.2917": [-54.87, 9.71, 12.42], + "0.3333": [-54.72, 9.68, 12.44], + "0.375": [-54.57, 9.65, 12.47], + "0.4167": [-54.42, 9.62, 12.49], + "0.4583": [-54.26, 9.58, 12.52], + "0.5": [-54.11, 9.55, 12.54], + "0.5417": [-53.97, 9.52, 12.57], + "0.5833": [-53.84, 9.49, 12.59], + "0.625": [-53.73, 9.47, 12.61], + "0.6667": [-53.67, 9.46, 12.62], + "0.7083": [-53.73, 9.47, 12.61], + "0.75": [-53.84, 9.49, 12.59], + "0.7917": [-53.97, 9.52, 12.57], + "0.8333": [-54.11, 9.55, 12.54], + "0.875": [-54.26, 9.58, 12.52], + "0.9167": [-54.42, 9.62, 12.49], + "0.9583": [-54.57, 9.65, 12.47], + "1.0": [-54.72, 9.68, 12.44] + } + }, + "RightLowerLeg": { + "rotation": { + "0.0": [60, 0, 0], + "0.0417": [59.93, 0, 0], + "0.0833": [59.78, 0, 0], + "0.125": [59.61, 0, 0], + "0.1667": [59.41, 0, 0], + "0.2083": [59.21, 0, 0], + "0.25": [59, 0, 0], + "0.2917": [58.79, 0, 0], + "0.3333": [58.59, 0, 0], + "0.375": [58.39, 0, 0], + "0.4167": [58.22, 0, 0], + "0.4583": [58.07, 0, 0], + "0.5": [58, 0, 0], + "0.5417": [58.07, 0, 0], + "0.5833": [58.22, 0, 0], + "0.625": [58.39, 0, 0], + "0.6667": [58.59, 0, 0], + "0.7083": [58.79, 0, 0], + "0.75": [59, 0, 0], + "0.7917": [59.21, 0, 0], + "0.8333": [59.41, 0, 0], + "0.875": [59.61, 0, 0], + "0.9167": [59.78, 0, 0], + "0.9583": [59.93, 0, 0], + "1.0": [60, 0, 0] + } + }, + "RightFoot": { + "rotation": { + "0.0": [-27.32, 2.29, -12.06], + "0.0417": [-27.32, 2.29, -12.06], + "0.0833": [-27.32, 2.29, -12.06], + "0.125": [-27.32, 2.29, -12.06], + "0.1667": [-27.32, 2.29, -12.06], + "0.2083": [-27.32, 2.29, -12.06], + "0.25": [-27.32, 2.29, -12.06], + "0.2917": [-27.32, 2.29, -12.06], + "0.3333": [-27.32, 2.29, -12.06], + "0.375": [-27.32, 2.29, -12.06], + "0.4167": [-27.32, 2.29, -12.06], + "0.4583": [-27.32, 2.29, -12.06], + "0.5": [-27.32, 2.29, -12.06], + "0.5417": [-27.32, 2.29, -12.06], + "0.5833": [-27.32, 2.29, -12.06], + "0.625": [-27.32, 2.29, -12.06], + "0.6667": [-27.32, 2.29, -12.06], + "0.7083": [-27.32, 2.29, -12.06], + "0.75": [-27.32, 2.29, -12.06], + "0.7917": [-27.32, 2.29, -12.06], + "0.8333": [-27.32, 2.29, -12.06], + "0.875": [-27.32, 2.29, -12.06], + "0.9167": [-27.32, 2.29, -12.06], + "0.9583": [-27.32, 2.29, -12.06], + "1.0": [-27.32, 2.29, -12.06] + } + } + } + }, "parallel0": { "loop": true, "animation_length": 0.375, diff --git a/src/main/resources/assets/touhou_little_maid/lang/en_us.json b/src/main/resources/assets/touhou_little_maid/lang/en_us.json index 46ae82c18..3a6fbebc9 100644 --- a/src/main/resources/assets/touhou_little_maid/lang/en_us.json +++ b/src/main/resources/assets/touhou_little_maid/lang/en_us.json @@ -366,6 +366,7 @@ "gui.touhou_little_maid.maid_config.pick_type": "Pickup Type", "gui.touhou_little_maid.maid_config.open_door": "Open Door", "gui.touhou_little_maid.maid_config.open_fence_gate": "Open Fence Gate", + "gui.touhou_little_maid.maid_config.active_climbing": "Can Active Climbing", "gui.touhou_little_maid.maid_config.value.true": "ON", "gui.touhou_little_maid.maid_config.value.false": "OFF", "gui.touhou_little_maid.maid_config.value.item": "Item", diff --git a/src/main/resources/assets/touhou_little_maid/lang/zh_cn.json b/src/main/resources/assets/touhou_little_maid/lang/zh_cn.json index 56ebb9976..62b889684 100644 --- a/src/main/resources/assets/touhou_little_maid/lang/zh_cn.json +++ b/src/main/resources/assets/touhou_little_maid/lang/zh_cn.json @@ -366,6 +366,7 @@ "gui.touhou_little_maid.maid_config.pick_type": "拾取类型", "gui.touhou_little_maid.maid_config.open_door": "能否开门", "gui.touhou_little_maid.maid_config.open_fence_gate": "能否开栅栏门", + "gui.touhou_little_maid.maid_config.active_climbing": "能否主动爬梯", "gui.touhou_little_maid.maid_config.value.true": "开启", "gui.touhou_little_maid.maid_config.value.false": "关闭", "gui.touhou_little_maid.maid_config.value.item": "物品",