添加海月权杖的动画和音效

This commit is contained in:
Atsuishio 2025-05-23 14:11:23 +08:00 committed by Light_Quanta
parent ba78f43aeb
commit 7203df3602
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
15 changed files with 4576 additions and 18436 deletions

View file

@ -341,7 +341,7 @@ public class ClickHandler {
&& !notInGame() && !notInGame()
) { ) {
var data = GunData.from(stack); var data = GunData.from(stack);
if (!stack.is(ModItems.BOCEK.get())) { if (!(stack.is(ModItems.BOCEK.get()) || stack.is(ModItems.AURELIA_SCEPTRE.get()))) {
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
} else { } else {
bowPower = 0; bowPower = 0;

View file

@ -1,15 +1,25 @@
package com.atsuishio.superbwarfare.client.model.item; package com.atsuishio.superbwarfare.client.model.item;
import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.item.gun.handgun.AureliaSceptre; import com.atsuishio.superbwarfare.item.gun.handgun.AureliaSceptre;
import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import software.bernie.geckolib.animation.AnimationState; import software.bernie.geckolib.animation.AnimationState;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.model.GeoModel; import software.bernie.geckolib.model.GeoModel;
import static com.atsuishio.superbwarfare.event.ClientEventHandler.*;
public class AureliaSceptreModel extends GeoModel<AureliaSceptre> { public class AureliaSceptreModel extends GeoModel<AureliaSceptre> {
public static float fireRotY = 0f; public static float fireRotY = 0f;
public static float fireRotZ = 0f; public static float fireRotZ = 0f;
public static float firePosMove = 0f;
@Override @Override
public ResourceLocation getAnimationResource(AureliaSceptre animatable) { public ResourceLocation getAnimationResource(AureliaSceptre animatable) {
@ -28,98 +38,35 @@ public class AureliaSceptreModel extends GeoModel<AureliaSceptre> {
@Override @Override
public void setCustomAnimations(AureliaSceptre animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(AureliaSceptre animatable, long instanceId, AnimationState animationState) {
// TODO 动画 Player player = Minecraft.getInstance().player;
// GeoBone gun = getAnimationProcessor().getBone("bone"); if (player == null) return;
// GeoBone slide = getAnimationProcessor().getBone("huatao"); ItemStack stack = player.getMainHandItem();
// GeoBone bullet = getAnimationProcessor().getBone("bullet"); if (!(stack.getItem() instanceof GunItem)) return;
//
// Player player = Minecraft.getInstance().player; float times = 0.2f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
// if (player == null) return;
// ItemStack stack = player.getMainHandItem(); ClientEventHandler.gunRootMove(getAnimationProcessor());
// if (!(stack.getItem() instanceof GunItem)) return;
// GeoBone rootLeftHand = getAnimationProcessor().getBone("rootLeftHand");
// float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
// double zt = ClientEventHandler.zoomTime; firePosMove = Mth.lerp((holdFire ? 5 : 2) * times, firePosMove, holdFire ? 1 : 0);
// double zp = ClientEventHandler.zoomPos;
// double zpz = ClientEventHandler.zoomPosZ;
// double fpz = ClientEventHandler.firePosZ * 13 * times; rootLeftHand.setPosX((float) (-movePosX + 20 * drawTime + 9.3f * movePosHorizon));
// double fp = ClientEventHandler.firePos; rootLeftHand.setPosY((float) (swayY - movePosY - 40 * drawTime - 2f * velocityY + 1 * firePosMove));
// double fr = ClientEventHandler.fireRot; rootLeftHand.setPosZ(-6 * firePosMove);
// rootLeftHand.setRotX((float) (swayX - Mth.DEG_TO_RAD * 60 * drawTime + Mth.DEG_TO_RAD * turnRot[0] - 0.15f * velocityY + 4.7144 * Mth.DEG_TO_RAD * firePosMove));
// gun.setPosX(1.23f * (float) zp); rootLeftHand.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * drawTime + Mth.DEG_TO_RAD * turnRot[1] + 5 * Mth.DEG_TO_RAD * firePosMove));
// gun.setPosY(1.43f * (float) zp - (float) (0.2f * zpz)); rootLeftHand.setRotZ((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 90 * drawTime + 2.7f * movePosHorizon + Mth.DEG_TO_RAD * turnRot[2] + -0.0102 * Mth.DEG_TO_RAD * firePosMove));
// gun.setPosZ(7f * (float) zp + (float) (0.3f * zpz));
// gun.setScaleZ(1f - (0.55f * (float) zp)); GeoBone guashi = getAnimationProcessor().getBone("guashi");
// guashi.setPosZ((float) (-0.5f * velocityY));
// GeoBone body = getAnimationProcessor().getBone("gun"); guashi.setPosY((float) (-1.5f * velocityY));
//
// fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz); GeoBone shuimu = getAnimationProcessor().getBone("shuimu");
// fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon); shuimu.setScaleZ((float) Mth.clamp(1 - 1.5f * velocityY, 0.5, 1.5));
//
// body.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); GeoBone camera = getAnimationProcessor().getBone("camera");
// body.setPosY((float) (0.15f * fp + 0.18f * fr)); ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
// body.setPosZ((float) (1.935 * fp + 0.16f * fr + 0.925 * fpz));
// body.setRotX((float) (0.08f * fp + 0.1f * fr + 0.35f * fpz));
// body.setRotY(fireRotY);
// body.setRotZ(fireRotZ);
//
// body.setPosX((float) (body.getPosX() * (1 - 0.4 * zt)));
// body.setPosY((float) (body.getPosY() * (-1 + 0.5 * zt)));
// body.setPosZ((float) (body.getPosZ() * (1 - 0.3 * zt)));
// body.setRotX((float) (body.getRotX() * (1 - 0.8 * zt)));
// body.setRotY((float) (body.getRotY() * (1 - 0.7 * zt)));
// body.setRotZ((float) (body.getRotZ() * (1 - 0.65 * zt)));
//
// CrossHairOverlay.gunRot = body.getRotZ();
//
// slide.setPosZ(1.5f * (float) fp);
//
// ClientEventHandler.gunRootMove(getAnimationProcessor());
//
// GeoBone camera = getAnimationProcessor().getBone("camera");
// GeoBone main = getAnimationProcessor().getBone("0");
//
// float numR = (float) (1 - 0.12 * zt);
// float numP = (float) (1 - 0.68 * zt);
//
// var data = GunData.from(stack);
//
// if (data.reload.time() > 0) {
// main.setRotX(numR * main.getRotX());
// main.setRotY(numR * main.getRotY());
// main.setRotZ(numR * main.getRotZ());
// main.setPosX(numP * main.getPosX());
// main.setPosY(numP * main.getPosY());
// main.setPosZ(numP * main.getPosZ());
// camera.setRotX(numR * camera.getRotX());
// camera.setRotY(numR * camera.getRotY());
// camera.setRotZ(numR * camera.getRotZ());
// }
//
// ClientEventHandler.handleReloadShake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ());
// AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 0.7f, 1f);
//
// GeoBone shell = getAnimationProcessor().getBone("shell");
// GeoBone barrel = getAnimationProcessor().getBone("guan");
// if (data.holdOpen.get()) {
// slide.setPosZ(1.5f);
// barrel.setRotX(4 * Mth.DEG_TO_RAD);
// bullet.setScaleX(0);
// bullet.setScaleY(0);
// bullet.setScaleZ(0);
//
// shell.setScaleX(0);
// shell.setScaleY(0);
// shell.setScaleZ(0);
// } else {
// barrel.setRotX(0);
// bullet.setScaleX(1);
// bullet.setScaleY(1);
// bullet.setScaleZ(1);
//
// shell.setScaleX(1);
// shell.setScaleY(1);
// shell.setScaleZ(1);
// }
} }
} }

View file

@ -1585,7 +1585,7 @@ public class ClientEventHandler {
burstFireAmount = 0; burstFireAmount = 0;
bowPullTimer = 0; bowPullTimer = 0;
bowPower = 0; bowPower = 0;
cantSprint = 20; cantSprint = 10;
ClickHandler.isEditing = false; ClickHandler.isEditing = false;
} }

View file

@ -42,5 +42,20 @@ public class ModEnumExtensions {
public static HumanoidModel.ArmPose getLungeMinePose() { public static HumanoidModel.ArmPose getLungeMinePose() {
return SUPERBWARFARE_LUNGE_MINE_POSE.getValue(); return SUPERBWARFARE_LUNGE_MINE_POSE.getValue();
} }
public static final EnumProxy<HumanoidModel.ArmPose> SUPERBWARFARE_AURELIA_SCEPTRE_POSE = new EnumProxy<>(
HumanoidModel.ArmPose.class,
false,
(IArmPoseTransformer) (model, entity, arm) -> {
if (arm != HumanoidArm.LEFT) {
model.rightArm.xRot = -67.5f * Mth.DEG_TO_RAD + model.head.xRot;
model.rightArm.yRot = 5f * Mth.DEG_TO_RAD;
}
}
);
public static HumanoidModel.ArmPose getAureliaSceptrePose() {
return SUPERBWARFARE_AURELIA_SCEPTRE_POSE.getValue();
}
} }
} }

View file

@ -463,6 +463,9 @@ public class ModSounds {
public static final DeferredHolder<SoundEvent, SoundEvent> JET_LOCK = REGISTRY.register("jet_lock", () -> SoundEvent.createVariableRangeEvent(Mod.loc("jet_lock"))); public static final DeferredHolder<SoundEvent, SoundEvent> JET_LOCK = REGISTRY.register("jet_lock", () -> SoundEvent.createVariableRangeEvent(Mod.loc("jet_lock")));
public static final DeferredHolder<SoundEvent, SoundEvent> JET_LOCKON = REGISTRY.register("jet_lockon", () -> SoundEvent.createVariableRangeEvent(Mod.loc("jet_lockon"))); public static final DeferredHolder<SoundEvent, SoundEvent> JET_LOCKON = REGISTRY.register("jet_lockon", () -> SoundEvent.createVariableRangeEvent(Mod.loc("jet_lockon")));
public static final DeferredHolder<SoundEvent, SoundEvent> AURELIA_SCEPTRE_FIRE_1P = REGISTRY.register("aurelia_sceptre_fire_1p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("aurelia_sceptre_fire_1p")));
public static final DeferredHolder<SoundEvent, SoundEvent> AURELIA_SCEPTRE_FIRE_3P = REGISTRY.register("aurelia_sceptre_fire_3p", () -> SoundEvent.createVariableRangeEvent(Mod.loc("aurelia_sceptre_fire_3p")));
public static final DeferredHolder<SoundEvent, SoundEvent> DPS_GENERATOR_EVOLVE = REGISTRY.register("dps_generator_evolve", () -> SoundEvent.createVariableRangeEvent(Mod.loc("dps_generator_evolve"))); public static final DeferredHolder<SoundEvent, SoundEvent> DPS_GENERATOR_EVOLVE = REGISTRY.register("dps_generator_evolve", () -> SoundEvent.createVariableRangeEvent(Mod.loc("dps_generator_evolve")));
} }

View file

@ -44,6 +44,8 @@ import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
@ -688,6 +690,11 @@ public abstract class GunItem extends Item implements CustomRendererItem {
return true; return true;
} }
@OnlyIn(Dist.CLIENT)
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
return PoseTool.pose(entityLiving, hand, stack);
}
@SubscribeEvent @SubscribeEvent
private static void registerGunExtensions(RegisterClientExtensionsEvent event) { private static void registerGunExtensions(RegisterClientExtensionsEvent event) {
for (var item : ModItems.GUNS.getEntries()) { for (var item : ModItems.GUNS.getEntries()) {
@ -703,7 +710,7 @@ public abstract class GunItem extends Item implements CustomRendererItem {
@Override @Override
@ParametersAreNonnullByDefault @ParametersAreNonnullByDefault
public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) { public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
return PoseTool.pose(entityLiving, hand, stack); return gun.getArmPose(entityLiving, hand, stack);
} }
}, item); }, item);
} }

View file

@ -3,15 +3,19 @@ package com.atsuishio.superbwarfare.item.gun.handgun;
import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.client.renderer.gun.AureliaSceptreRenderer; import com.atsuishio.superbwarfare.client.renderer.gun.AureliaSceptreRenderer;
import com.atsuishio.superbwarfare.data.gun.GunData; import com.atsuishio.superbwarfare.data.gun.GunData;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModEnumExtensions; import com.atsuishio.superbwarfare.init.ModEnumExtensions;
import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent; import net.minecraft.world.InteractionHand;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.api.distmarker.OnlyIn;
import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.GeoItem;
import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
import software.bernie.geckolib.animation.*; import software.bernie.geckolib.animation.*;
@ -19,7 +23,6 @@ import software.bernie.geckolib.renderer.GeoItemRenderer;
import software.bernie.geckolib.util.GeckoLibUtil; import software.bernie.geckolib.util.GeckoLibUtil;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.function.Supplier; import java.util.function.Supplier;
@ -36,22 +39,15 @@ public class AureliaSceptre extends GunItem implements GeoItem {
return AureliaSceptreRenderer::new; return AureliaSceptreRenderer::new;
} }
private PlayState fireAnimPredicate(AnimationState<AureliaSceptre> event) { @OnlyIn(Dist.CLIENT)
LocalPlayer player = Minecraft.getInstance().player; @Override
if (player == null) return PlayState.STOP; public HumanoidModel.ArmPose getArmPose(LivingEntity entityLiving, InteractionHand hand, ItemStack stack) {
ItemStack stack = player.getMainHandItem(); if (!stack.isEmpty()) {
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; if (entityLiving.getUsedItemHand() == hand) {
return ModEnumExtensions.Client.getAureliaSceptrePose();
// TODO 装填动画 }
// if (GunData.from(stack).reload.empty()) { }
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aurelia_sceptre.reload_empty")); return HumanoidModel.ArmPose.EMPTY;
// }
//
// if (GunData.from(stack).reload.normal()) {
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.aurelia_sceptre.reload_normal"));
// }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.idle"));
} }
private PlayState idlePredicate(AnimationState<AureliaSceptre> event) { private PlayState idlePredicate(AnimationState<AureliaSceptre> event) {
@ -60,25 +56,22 @@ public class AureliaSceptre extends GunItem implements GeoItem {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP; if (!(stack.getItem() instanceof GunItem)) return PlayState.STOP;
// TODO 冲刺动画 if (ClientEventHandler.firePosTimer > 0) {
// if (player.isSprinting() && player.onGround() return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.fire"));
// && ClientEventHandler.cantSprint == 0 }
// && !(GunData.from(stack).reload.normal() || GunData.from(stack).reload.empty()) && ClientEventHandler.drawTime < 0.01) {
// if (ClientEventHandler.tacticalSprint) { if (player.isSprinting() && player.onGround()
// return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.run_fast")); && ClientEventHandler.cantSprint == 0
// } else { && !(GunData.from(stack).reload.normal() || GunData.from(stack).reload.empty()) && ClientEventHandler.drawTime < 0.01) {
// return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.run")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.run"));
// } }
// }
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.idle")); return event.setAndContinue(RawAnimation.begin().thenLoop("animation.aurelia_sceptre.idle"));
} }
@Override @Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) { public void registerControllers(AnimatableManager.ControllerRegistrar data) {
var fireAnimController = new AnimationController<>(this, "fireAnimController", 1, this::fireAnimPredicate); var idleController = new AnimationController<>(this, "idleController", 6, this::idlePredicate);
data.add(fireAnimController);
var idleController = new AnimationController<>(this, "idleController", 2, this::idlePredicate);
data.add(idleController); data.add(idleController);
} }
@ -87,15 +80,8 @@ public class AureliaSceptre extends GunItem implements GeoItem {
return this.cache; return this.cache;
} }
@Override
public Set<SoundEvent> getReloadSound() {
// TODO 音效
return Set.of(ModSounds.GLOCK_17_RELOAD_EMPTY.get(), ModSounds.GLOCK_17_RELOAD_NORMAL.get());
}
@Override @Override
public ResourceLocation getGunIcon() { public ResourceLocation getGunIcon() {
// TODO 图标
return Mod.loc("textures/gun_icon/aurelia_sceptre_icon.png"); return Mod.loc("textures/gun_icon/aurelia_sceptre_icon.png");
} }

View file

@ -17,6 +17,15 @@
"class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client", "class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client",
"field": "SUPERBWARFARE_LUNGE_MINE_POSE" "field": "SUPERBWARFARE_LUNGE_MINE_POSE"
} }
},
{
"enum": "net/minecraft/client/model/HumanoidModel$ArmPose",
"name": "SUPERBWARFARE_AURELIA_SCEPTRE_POSE",
"constructor": "(ZLnet/neoforged/neoforge/client/IArmPoseTransformer;)V",
"parameters": {
"class": "com/atsuishio/superbwarfare/init/ModEnumExtensions$Client",
"field": "SUPERBWARFARE_AURELIA_SCEPTRE_POSE"
}
} }
] ]
} }

View file

@ -1,17 +1,326 @@
{ {
"format_version": "1.8.0", "format_version": "1.8.0",
"animations": { "animations": {
"animation.aurelia_sceptre.idle": { "animation.aurelia_sceptre.idle": {
"loop": true, "loop": true
"bones": { },
"group": { "animation.aurelia_sceptre.run": {
"rotation": [ "loop": true,
0, "animation_length": 0.6,
0, "bones": {
0 "0": {
] "rotation": {
} "0.0": {
} "post": [1.24287, 1.80368, 24.64514],
} "lerp_mode": "catmullrom"
} },
"0.15": {
"post": [-0.50513, 5.69695, 31.23867],
"lerp_mode": "catmullrom"
},
"0.3": {
"post": [1.04, 1.8037, 23.9],
"lerp_mode": "catmullrom"
},
"0.45": {
"post": [1.2636, -5.02547, 19.28916],
"lerp_mode": "catmullrom"
},
"0.6": {
"post": [1.24287, 1.80368, 24.64514],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -3, 1.25],
"lerp_mode": "catmullrom"
},
"0.075": {
"post": [-0.5, -2, 1.25],
"lerp_mode": "catmullrom"
},
"0.15": {
"post": [-1.5, -3, 1.25],
"lerp_mode": "catmullrom"
},
"0.225": {
"post": [-2.5, -4, 1.25],
"lerp_mode": "catmullrom"
},
"0.3": {
"post": [-3, -3, 1.25],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-2.5, -2, 1.25],
"lerp_mode": "catmullrom"
},
"0.45": {
"post": [-1.5, -3, 1.2],
"lerp_mode": "catmullrom"
},
"0.525": {
"post": [-0.5, -4, 1.25],
"lerp_mode": "catmullrom"
},
"0.6": {
"post": [0, -3, 1.25],
"lerp_mode": "catmullrom"
}
}
},
"camera": {
"rotation": {
"0.0": {
"post": [-0.3, -0.3, 0.3],
"lerp_mode": "catmullrom"
},
"0.15": {
"post": [0.3, 0, -0.3],
"lerp_mode": "catmullrom"
},
"0.3": {
"post": [-0.3, 0.3, 0.3],
"lerp_mode": "catmullrom"
},
"0.45": {
"post": [0.3, 0, -0.3],
"lerp_mode": "catmullrom"
},
"0.6": {
"post": [-0.3, -0.3, 0.3],
"lerp_mode": "catmullrom"
}
}
},
"Lefthand": {
"rotation": {
"0.0": {
"post": [1.24287, 1.80368, -9.35486],
"lerp_mode": "catmullrom"
},
"0.15": {
"post": [-0.50513, 5.69695, -2.76133],
"lerp_mode": "catmullrom"
},
"0.3": {
"post": [1.04, 1.8037, -10.1],
"lerp_mode": "catmullrom"
},
"0.45": {
"post": [1.2636, -5.02547, -14.71084],
"lerp_mode": "catmullrom"
},
"0.6": {
"post": [1.24287, 1.80368, -9.35486],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, -1, 1.25],
"lerp_mode": "catmullrom"
},
"0.075": {
"post": [-0.5, -2, 1.25],
"lerp_mode": "catmullrom"
},
"0.15": {
"post": [-1.5, -1, 1.25],
"lerp_mode": "catmullrom"
},
"0.225": {
"post": [-2.5, 0, 1.25],
"lerp_mode": "catmullrom"
},
"0.3": {
"post": [-3, -1, 1.25],
"lerp_mode": "catmullrom"
},
"0.375": {
"post": [-2.5, -2, 1.25],
"lerp_mode": "catmullrom"
},
"0.45": {
"post": [-1.5, -1, 1.2],
"lerp_mode": "catmullrom"
},
"0.525": {
"post": [-0.5, 0, 1.25],
"lerp_mode": "catmullrom"
},
"0.6": {
"post": [0, -1, 1.25],
"lerp_mode": "catmullrom"
}
}
}
}
},
"animation.aurelia_sceptre.fire": {
"loop": true,
"animation_length": 1.6,
"bones": {
"0": {
"rotation": {
"0.0": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [9.99851, 0.17364, -0.98481],
"lerp_mode": "catmullrom"
},
"0.8": {
"post": [9.99679, -0.24035, 1.36325],
"lerp_mode": "catmullrom"
},
"1.1917": {
"post": [9.99937, 0.06301, -0.35732],
"lerp_mode": "catmullrom"
},
"1.5917": {
"post": [10, 0, 0],
"lerp_mode": "catmullrom"
}
},
"position": {
"0.0": {
"post": [0, 0.64013, -0.11287],
"lerp_mode": "catmullrom"
},
"0.0583": {
"post": [-0.03, 0.64, 0.39],
"lerp_mode": "catmullrom"
},
"0.1083": {
"post": [-0.05, 0.64, -0.15],
"lerp_mode": "catmullrom"
},
"0.1667": {
"post": [-0.06, 0.64, 0.32],
"lerp_mode": "catmullrom"
},
"0.225": {
"post": [-0.08, 0.64, -0.28],
"lerp_mode": "catmullrom"
},
"0.275": {
"post": [-0.11, 0.64, 0.26],
"lerp_mode": "catmullrom"
},
"0.3333": {
"post": [-0.1, 0.64, -0.11],
"lerp_mode": "catmullrom"
},
"0.3833": {
"post": [-0.08, 0.64, 0.37],
"lerp_mode": "catmullrom"
},
"0.4333": {
"post": [-0.06, 0.64, -0.15],
"lerp_mode": "catmullrom"
},
"0.4833": {
"post": [-0.04, 0.64, 0.33],
"lerp_mode": "catmullrom"
},
"0.525": {
"post": [-0.02, 0.65, -0.19],
"lerp_mode": "catmullrom"
},
"0.575": {
"post": [0.01, 0.66, 0.29],
"lerp_mode": "catmullrom"
},
"0.6167": {
"post": [0.04, 0.67, -0.25],
"lerp_mode": "catmullrom"
},
"0.6583": {
"post": [0.07, 0.68, 0.24],
"lerp_mode": "catmullrom"
},
"0.7": {
"post": [0.11, 0.69, -0.37],
"lerp_mode": "catmullrom"
},
"0.7333": {
"post": [0.14, 0.69, 0.18],
"lerp_mode": "catmullrom"
},
"0.7833": {
"post": [0.18, 0.68924, -0.11868],
"lerp_mode": "catmullrom"
},
"0.8167": {
"post": [-0.03, 0.64, 0.39],
"lerp_mode": "catmullrom"
},
"0.8667": {
"post": [-0.05, 0.64, -0.15],
"lerp_mode": "catmullrom"
},
"0.925": {
"post": [-0.06, 0.64, 0.32],
"lerp_mode": "catmullrom"
},
"0.9833": {
"post": [-0.08, 0.64, -0.28],
"lerp_mode": "catmullrom"
},
"1.0333": {
"post": [-0.11, 0.64, 0.26],
"lerp_mode": "catmullrom"
},
"1.0917": {
"post": [-0.1, 0.64, -0.11],
"lerp_mode": "catmullrom"
},
"1.1417": {
"post": [-0.08, 0.64, 0.37],
"lerp_mode": "catmullrom"
},
"1.1917": {
"post": [-0.06, 0.64, -0.15],
"lerp_mode": "catmullrom"
},
"1.2417": {
"post": [-0.04, 0.64, 0.33],
"lerp_mode": "catmullrom"
},
"1.2833": {
"post": [-0.02, 0.65, -0.19],
"lerp_mode": "catmullrom"
},
"1.3333": {
"post": [0.01, 0.66, 0.29],
"lerp_mode": "catmullrom"
},
"1.375": {
"post": [0.04, 0.67, -0.25],
"lerp_mode": "catmullrom"
},
"1.4167": {
"post": [0.07, 0.68, 0.24],
"lerp_mode": "catmullrom"
},
"1.475": {
"post": [0.11, 0.69, -0.37],
"lerp_mode": "catmullrom"
},
"1.5333": {
"post": [0.14, 0.69, 0.18],
"lerp_mode": "catmullrom"
},
"1.5917": {
"post": [0, 0.64013, -0.11287],
"lerp_mode": "catmullrom"
}
}
}
}
}
}
} }

View file

@ -3186,5 +3186,21 @@
"stream": false "stream": false
} }
] ]
},
"aurelia_sceptre_fire_1p": {
"sounds": [
{
"name": "superbwarfare:aurelia_sceptre/aurelia_sceptre_fire_1p",
"stream": false
}
]
},
"aurelia_sceptre_fire_3p": {
"sounds": [
{
"name": "superbwarfare:aurelia_sceptre/aurelia_sceptre_fire_3p",
"stream": false
}
]
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View file

@ -1,23 +1,23 @@
{ {
"ID": "superbwarfare:aurelia_sceptre", "ID": "superbwarfare:aurelia_sceptre",
"Spread": 0.5, "Spread": 1.5,
"RecoilX": 0, "RecoilX": 0.0005,
"RecoilY": 0, "RecoilY": 0.0001,
"Damage": 26, "Damage": 11,
"Headshot": 1.5, "Headshot": 1.5,
"Velocity": 14, "Velocity": 8,
"Magazine": 4,
"Weight": 1, "Weight": 1,
"NormalReloadTime": 20, "NormalReloadTime": 20,
"EmptyReloadTime": 20, "EmptyReloadTime": 20,
"BypassesArmor": 0.44, "BypassesArmor": 0.44,
"SoundRadius": 2, "SoundRadius": 2,
"RPM": 1100, "RPM": 1100,
"BurstAmount": 4, "ShootDelay": 10,
"HeatPerShoot": 1,
"AvailableFireModes": [ "AvailableFireModes": [
"Burst" "Auto"
], ],
"DefaultFireMode": "Burst", "DefaultFireMode": "Auto",
"AmmoType": "@HandgunAmmo", "AmmoType": "@HandgunAmmo",
"AvailablePerks": [ "AvailablePerks": [
"@Ammo", "@Ammo",