From 045745cc0f2c7c69e9ea5a478c6742eadaf41dcb Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 4 Oct 2024 20:08:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/entity/Mk42Entity.java | 23 +++----- .../superbwarfare/entity/Mle1934Entity.java | 22 +++----- .../superbwarfare/entity/TargetEntity.java | 53 ++++++------------- .../entity/model/TargetModel.java | 16 ------ .../entity/projectile/ProjectileEntity.java | 5 +- .../event/ClientEventHandler.java | 7 +-- .../event/LivingEventHandler.java | 49 ++++++++++------- .../event/PlayerEventHandler.java | 11 ---- .../superbwarfare/item/gun/GunItem.java | 3 +- .../animations/target.animation.json | 45 +++++++++++++++- .../animations/target2.animation.json | 49 ----------------- 11 files changed, 112 insertions(+), 171 deletions(-) delete mode 100644 src/main/resources/assets/superbwarfare/animations/target2.animation.json diff --git a/src/main/java/net/mcreator/superbwarfare/entity/Mk42Entity.java b/src/main/java/net/mcreator/superbwarfare/entity/Mk42Entity.java index 718b8496b..7900e08ec 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/Mk42Entity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/Mk42Entity.java @@ -3,7 +3,6 @@ package net.mcreator.superbwarfare.entity; import net.mcreator.superbwarfare.entity.projectile.CannonShellEntity; import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.item.common.ammo.CannonShellItem; -import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.tools.CustomExplosion; import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.SoundTool; @@ -354,23 +353,15 @@ public class Mk42Entity extends PathfinderMob implements GeoEntity, ICannonEntit } private PlayState movementPredicate(AnimationState event) { - if (this.animationprocedure.equals("empty")) { - - if (this.getFirstPassenger() != null) { - Entity gunner = this.getFirstPassenger(); - var capability = gunner.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null); - if (this.entityData.get(COOL_DOWN) > 0) { - if (this.entityData.get(TYPE) == 1) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk42.fire")); - } else { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk42.fire2")); - } - } + if (this.entityData.get(COOL_DOWN) > 0) { + if (this.entityData.get(TYPE) == 1) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk42.fire")); + } else { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mk42.fire2")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mk42.idle")); } - return PlayState.STOP; + + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mk42.idle")); } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/entity/Mle1934Entity.java b/src/main/java/net/mcreator/superbwarfare/entity/Mle1934Entity.java index 1e74bd28c..39220f496 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/Mle1934Entity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/Mle1934Entity.java @@ -4,7 +4,6 @@ import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.entity.projectile.CannonShellEntity; import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.item.common.ammo.CannonShellItem; -import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.tools.CustomExplosion; import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.SoundTool; @@ -430,23 +429,14 @@ public class Mle1934Entity extends PathfinderMob implements GeoEntity, ICannonEn } private PlayState movementPredicate(AnimationState event) { - if (this.animationprocedure.equals("empty")) { - - if (this.getFirstPassenger() != null) { - Entity gunner = this.getFirstPassenger(); - var capability = gunner.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null); - if (this.entityData.get(COOL_DOWN) > 64) { - if (this.entityData.get(TYPE) == 1) { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.salvo_fire")); - } else { - return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.fire")); - } - } + if (this.entityData.get(COOL_DOWN) > 64) { + if (this.entityData.get(TYPE) == 1) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.salvo_fire")); + } else { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.fire")); } - - return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mle1934.idle")); } - return PlayState.STOP; + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mle1934.idle")); } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/entity/TargetEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/TargetEntity.java index a67020020..32fb10faa 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/TargetEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/TargetEntity.java @@ -8,13 +8,11 @@ import net.mcreator.superbwarfare.tools.SoundTool; import net.minecraft.commands.arguments.EntityAnchorArgument; import net.minecraft.core.BlockPos; import net.minecraft.core.NonNullList; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.sounds.SoundSource; -import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; @@ -34,11 +32,14 @@ import net.minecraftforge.network.PlayMessages; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; +import software.bernie.geckolib.core.animation.AnimationController; +import software.bernie.geckolib.core.animation.AnimationState; +import software.bernie.geckolib.core.animation.RawAnimation; +import software.bernie.geckolib.core.object.PlayState; import software.bernie.geckolib.util.GeckoLibUtil; @Mod.EventBusSubscriber public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEntity { - public static final EntityDataAccessor ANIMATION = SynchedEntityData.defineId(TargetEntity.class, EntityDataSerializers.STRING); public static final EntityDataAccessor DOWN_TIME = SynchedEntityData.defineId(TargetEntity.class, EntityDataSerializers.INT); private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); @@ -55,7 +56,6 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt @Override protected void defineSynchedData() { super.defineSynchedData(); - this.entityData.define(ANIMATION, "undefined"); this.entityData.define(DOWN_TIME, 0); } @@ -107,27 +107,13 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt } if (!this.level().isClientSide()) { - this.level().playSound(null, BlockPos.containing(this.getX(), this.getY(), this.getZ()), ModSounds.HIT.get(), SoundSource.BLOCKS, 8, 1); + this.level().playSound(null, BlockPos.containing(this.getX(), this.getY(), this.getZ()), ModSounds.HIT.get(), SoundSource.BLOCKS, 3, 1); } else { - this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), ModSounds.HIT.get(), SoundSource.BLOCKS, 8, 1, false); + this.level().playLocalSound(this.getX(), this.getY(), this.getZ(), ModSounds.HIT.get(), SoundSource.BLOCKS, 3, 1, false); } return super.hurt(source, amount); } - @Override - public void addAdditionalSaveData(CompoundTag compound) { - super.addAdditionalSaveData(compound); - compound.putInt("DownTime", this.entityData.get(DOWN_TIME)); - } - - @Override - public void readAdditionalSaveData(CompoundTag compound) { - super.readAdditionalSaveData(compound); - if (compound.contains("DownTime")) { - this.entityData.set(DOWN_TIME, compound.getInt("DownTime")); - } - } - @SubscribeEvent public static void onTargetDown(LivingDeathEvent event) { var entity = event.getEntity(); @@ -143,8 +129,8 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt if (sourceEntity instanceof Player player) { player.displayClientMessage(Component.literal(("Target Down " + new java.text.DecimalFormat("##.#").format((entity.position()).distanceTo((sourceEntity.position()))) + "M")), true); - SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 100, 1); - targetEntity.entityData.set(DOWN_TIME, 91); + SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 1, 1); + targetEntity.entityData.set(DOWN_TIME, 40); } } } @@ -167,14 +153,8 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt } else { if (!(player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { this.lookAt(EntityAnchorArgument.Anchor.EYES, new Vec3((player.getX()), this.getY(), (player.getZ()))); - - this.setYRot(this.getYRot()); this.setXRot(0); - this.setYBodyRot(this.getYRot()); - this.setYHeadRot(this.getYRot()); - this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); - this.entityData.set(DOWN_TIME, 0); } } @@ -190,11 +170,6 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt } } - @Override - public void travel(Vec3 dir) { - this.setXRot(-Mth.clamp(this.entityData.get(DOWN_TIME), 0, 90)); - } - @Override public Vec3 getDeltaMovement() { return new Vec3(0, 0, 0); @@ -251,20 +226,26 @@ public class TargetEntity extends LivingEntity implements GeoEntity, AnimatedEnt } public String getSyncedAnimation() { - return this.entityData.get(ANIMATION); + return null; } public void setAnimation(String animation) { - this.entityData.set(ANIMATION, animation); } @Override public void setAnimationProcedure(String procedure) { - this.animationProcedure = procedure; + } + + private PlayState movementPredicate(AnimationState event) { + if (this.entityData.get(DOWN_TIME) > 0) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.target.down")); + } + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.target.idle")); } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { + data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate)); } @Override diff --git a/src/main/java/net/mcreator/superbwarfare/entity/model/TargetModel.java b/src/main/java/net/mcreator/superbwarfare/entity/model/TargetModel.java index c9705c7da..471db8a85 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/model/TargetModel.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/model/TargetModel.java @@ -3,12 +3,7 @@ package net.mcreator.superbwarfare.entity.model; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.entity.TargetEntity; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; -import software.bernie.geckolib.constant.DataTickets; -import software.bernie.geckolib.core.animatable.model.CoreGeoBone; -import software.bernie.geckolib.core.animation.AnimationState; import software.bernie.geckolib.model.GeoModel; -import software.bernie.geckolib.model.data.EntityModelData; public class TargetModel extends GeoModel { @Override @@ -25,15 +20,4 @@ public class TargetModel extends GeoModel { public ResourceLocation getTextureResource(TargetEntity entity) { return new ResourceLocation(ModUtils.MODID, "textures/entity/target.png"); } - - @Override - public void setCustomAnimations(TargetEntity animatable, long instanceId, AnimationState animationState) { - CoreGeoBone head = getAnimationProcessor().getBone("ba"); - EntityModelData entityData = (EntityModelData) animationState.getData(DataTickets.ENTITY_MODEL_DATA); - if (entityData.headPitch() > 10) { - head.setRotX(Mth.clamp(Mth.clamp(90 - entityData.headPitch(),0,4) * 22.5f * Mth.DEG_TO_RAD,0,90)); - } else { - head.setRotX(Mth.clamp(9f * entityData.headPitch() * Mth.DEG_TO_RAD,0,90)); - } - } } diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java index 4861aa848..a42a96641 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/ProjectileEntity.java @@ -278,7 +278,10 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (!this.beast) { this.bypassArmorRate -= 0.2F; if (this.bypassArmorRate < 0.8F) { - break; + if (result != null && !(((EntityHitResult) result).getEntity() instanceof TargetEntity target && target.getEntityData().get(DOWN_TIME) > 0)) { + break; + } + } } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index dbb114f53..1217166f1 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -282,7 +282,7 @@ public class ClientEventHandler { if (level != null && entity instanceof LivingEntity living && living.getMainHandItem().is(ModTags.Items.GUN)) { handleWeaponSway(living); handleWeaponMove(living); - handleWeaponZoom(); + handleWeaponZoom(living); handlePlayerBreath(living); handleWeaponFire(event, living); handleGunRecoil(); @@ -453,9 +453,10 @@ public class ClientEventHandler { } } - private static void handleWeaponZoom() { + private static void handleWeaponZoom(LivingEntity entity) { + if (!(entity instanceof Player player)) return; float times = 5 * Minecraft.getInstance().getDeltaFrameTime(); - if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS && !notInGame()) { + if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS && !notInGame() && !player.getCooldowns().isOnCooldown(player.getMainHandItem().getItem())) { zoomTime = Mth.clamp(zoomTime + 0.03 * times, 0, 1); } else { zoomTime = Mth.clamp(zoomTime - 0.04 * times, 0, 1); diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index aeb2a0461..513af716f 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -286,17 +286,22 @@ public class LivingEventHandler { oldTags.putBoolean("is_empty_reloading", false); oldTags.putInt("gun_reloading_time", 0); - oldTags.putBoolean("force_stop", false); - oldTags.putBoolean("stop", false); - oldTags.putInt("reload_stage", 0); - oldTags.putBoolean("reloading", false); - oldTags.putDouble("prepare", 0); - oldTags.putDouble("prepare_load", 0); - oldTags.putDouble("iterative", 0); - oldTags.putDouble("finish", 0); + if (oldTags.getDouble("iterative_time") != 0) { + oldTags.putBoolean("force_stop", false); + oldTags.putBoolean("stop", false); + oldTags.putInt("reload_stage", 0); + oldTags.putBoolean("reloading", false); + oldTags.putDouble("prepare", 0); + oldTags.putDouble("prepare_load", 0); + oldTags.putDouble("iterative", 0); + oldTags.putDouble("finish", 0); + } + + if (oldStack.is(ModItems.SENTINEL.get())) { + oldTags.putBoolean("sentinel_is_charging", false); + oldTags.putInt("sentinel_charge_time", 0); + } - oldTags.putBoolean("sentinel_is_charging", false); - oldTags.putInt("sentinel_charge_time", 0); } if (newStack.getItem() instanceof GunItem) { @@ -308,17 +313,21 @@ public class LivingEventHandler { newStack.getOrCreateTag().putBoolean("is_empty_reloading", false); newStack.getOrCreateTag().putInt("gun_reloading_time", 0); - newStack.getOrCreateTag().putBoolean("force_stop", false); - newStack.getOrCreateTag().putBoolean("stop", false); - newStack.getOrCreateTag().putInt("reload_stage", 0); - newStack.getOrCreateTag().putBoolean("reloading", false); - newStack.getOrCreateTag().putDouble("prepare", 0); - newStack.getOrCreateTag().putDouble("prepare_load", 0); - newStack.getOrCreateTag().putDouble("iterative", 0); - newStack.getOrCreateTag().putDouble("finish", 0); + if (newStack.getOrCreateTag().getDouble("iterative_time") != 0) { + newStack.getOrCreateTag().putBoolean("force_stop", false); + newStack.getOrCreateTag().putBoolean("stop", false); + newStack.getOrCreateTag().putInt("reload_stage", 0); + newStack.getOrCreateTag().putBoolean("reloading", false); + newStack.getOrCreateTag().putDouble("prepare", 0); + newStack.getOrCreateTag().putDouble("prepare_load", 0); + newStack.getOrCreateTag().putDouble("iterative", 0); + newStack.getOrCreateTag().putDouble("finish", 0); + } - newStack.getOrCreateTag().putBoolean("sentinel_is_charging", false); - newStack.getOrCreateTag().putInt("sentinel_charge_time", 0); + if (newStack.is(ModItems.SENTINEL.get())) { + newStack.getOrCreateTag().putBoolean("sentinel_is_charging", false); + newStack.getOrCreateTag().putInt("sentinel_charge_time", 0); + } int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newStack); if (level != 0) { diff --git a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java index 2ad1dfa26..462206ba7 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java @@ -6,7 +6,6 @@ import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage; -import net.mcreator.superbwarfare.tools.ItemNBTTool; import net.mcreator.superbwarfare.tools.SoundTool; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; @@ -16,13 +15,11 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.effect.MobEffects; -import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; import net.minecraftforge.event.AnvilUpdateEvent; import net.minecraftforge.event.TickEvent; -import net.minecraftforge.event.entity.player.EntityItemPickupEvent; import net.minecraftforge.event.entity.player.PlayerEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -66,14 +63,6 @@ public class PlayerEventHandler { } } - @SubscribeEvent - public static void onPickup(EntityItemPickupEvent event) { - ItemEntity stack = event.getItem(); - if (stack.getItem().is(ModTags.Items.GUN)) { - ItemNBTTool.setBoolean(stack.getItem(), "init", false); - } - } - @SubscribeEvent public static void onPlayerTick(TickEvent.PlayerTickEvent event) { Player player = event.player; diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 0c2e5851e..b1f6823c1 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -90,7 +90,7 @@ public abstract class GunItem extends Item { @Override public boolean onEntitySwing(ItemStack stack, LivingEntity entity) { - return super.onEntitySwing(stack, entity); + return false; } @Override @@ -124,6 +124,7 @@ public abstract class GunItem extends Item { public static void onPickup(EntityItemPickupEvent event) { if (event.getItem().getItem().is(ModTags.Items.GUN)) { event.getItem().getItem().getOrCreateTag().putBoolean("draw", true); + event.getItem().getItem().getOrCreateTag().putBoolean("init", false); } } diff --git a/src/main/resources/assets/superbwarfare/animations/target.animation.json b/src/main/resources/assets/superbwarfare/animations/target.animation.json index 2f059973a..9cb5e4dd5 100644 --- a/src/main/resources/assets/superbwarfare/animations/target.animation.json +++ b/src/main/resources/assets/superbwarfare/animations/target.animation.json @@ -1,9 +1,50 @@ { "format_version": "1.8.0", "animations": { - "animation.superbwarfare.idle": { + "animation.target.idle": { "loop": true, - "animation_length": 0.04167 + "animation_length": 0.0417 + }, + "animation.target.down": { + "loop": "hold_on_last_frame", + "animation_length": 2, + "bones": { + "ba": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.125": { + "vector": [-90, 0, 0], + "easing": "easeOutCubic" + }, + "0.25": { + "vector": [-80, 0, 0], + "easing": "easeOutSine" + }, + "0.375": { + "vector": [-90, 0, 0], + "easing": "easeInCubic" + }, + "0.5": { + "vector": [-88, 0, 0], + "easing": "easeOutSine" + }, + "0.625": { + "vector": [-90, 0, 0], + "easing": "easeInCubic" + }, + "1.5": { + "vector": [-90, 0, 0], + "easing": "linear" + }, + "2.0": { + "vector": [0, 0, 0], + "easing": "easeInOutSine" + } + } + } + } } }, "geckolib_format_version": 2 diff --git a/src/main/resources/assets/superbwarfare/animations/target2.animation.json b/src/main/resources/assets/superbwarfare/animations/target2.animation.json deleted file mode 100644 index 38983ceca..000000000 --- a/src/main/resources/assets/superbwarfare/animations/target2.animation.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "format_version": "1.8.0", - "animations": { - "animation.target2.idle": { - "loop": true, - "bones": { - "ba": { - "rotation": { - "vector": [0, 0, 0] - } - } - } - }, - "animation.target2.down": { - "loop": "hold_on_last_frame", - "animation_length": 0.625, - "bones": { - "ba": { - "rotation": { - "0.0": { - "vector": [0, 0, 0] - }, - "0.125": { - "vector": [-90, 0, 0], - "easing": "easeOutCubic" - }, - "0.25": { - "vector": [-80, 0, 0], - "easing": "easeOutSine" - }, - "0.375": { - "vector": [-90, 0, 0], - "easing": "easeInCubic" - }, - "0.5": { - "vector": [-88, 0, 0], - "easing": "easeOutSine" - }, - "0.625": { - "vector": [-90, 0, 0], - "easing": "easeInCubic" - } - } - } - } - } - }, - "geckolib_format_version": 2 -} \ No newline at end of file