添加直升机模型和音效

This commit is contained in:
Atsuihsio 2025-01-02 21:32:10 +08:00
parent e8a7cd05c9
commit 0f97b5e2b2
16 changed files with 4336 additions and 30 deletions

View file

@ -103,8 +103,9 @@ public class ClickHandler {
if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) {
if (stack.is(ModTags.Items.GUN) if (stack.is(ModTags.Items.GUN)
|| (player.isPassenger() && player.getVehicle() instanceof ICannonEntity) || (player.getVehicle() instanceof ICannonEntity)
|| (player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player && stack.is(ItemStack.EMPTY.getItem()))) { || (player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player && !stack.getItem().isEdible())
|| (player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player && stack.is(ItemStack.EMPTY.getItem()))) {
event.setCanceled(true); event.setCanceled(true);
} }
} }

View file

@ -15,11 +15,11 @@ public class Ah6Model extends GeoModel<Ah6Entity> {
@Override @Override
public ResourceLocation getModelResource(Ah6Entity entity) { public ResourceLocation getModelResource(Ah6Entity entity) {
return new ResourceLocation(ModUtils.MODID, "geo/wheel_chair.geo.json"); return new ResourceLocation(ModUtils.MODID, "geo/ah_6.geo.json");
} }
@Override @Override
public ResourceLocation getTextureResource(Ah6Entity entity) { public ResourceLocation getTextureResource(Ah6Entity entity) {
return ModUtils.loc("textures/entity/wheel_chair.png"); return ModUtils.loc("textures/entity/ah_6.png");
} }
} }

View file

@ -11,6 +11,7 @@ import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.GeoEntityRenderer;
public class Ah6Renderer extends GeoEntityRenderer<Ah6Entity> { public class Ah6Renderer extends GeoEntityRenderer<Ah6Entity> {
@ -44,9 +45,15 @@ public class Ah6Renderer extends GeoEntityRenderer<Ah6Entity> {
poseStack.popPose(); poseStack.popPose();
} }
// @Override @Override
// public void renderRecursively(PoseStack poseStack, Ah6Entity animatable, GeoBone bone, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { public void renderRecursively(PoseStack poseStack, Ah6Entity animatable, GeoBone bone, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) {
// String name = bone.getName(); String name = bone.getName();
// super.renderRecursively(poseStack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha); if (name.equals("propeller")) {
// } bone.setRotY(Mth.lerp(partialTick, animatable.propellerRotO, animatable.getPropellerRot()));
}
if (name.equals("tailPropeller")) {
bone.setRotX(-6 * Mth.lerp(partialTick, animatable.propellerRotO, animatable.getPropellerRot()));
}
super.renderRecursively(poseStack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
}
} }

View file

@ -43,6 +43,11 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
public static final float MAX_HEALTH = 200; public static final float MAX_HEALTH = 200;
public static final int MAX_ENERGY = 4000000; public static final int MAX_ENERGY = 4000000;
public static final EntityDataAccessor<Float> DELTA_ROT = SynchedEntityData.defineId(Ah6Entity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor<Float> DELTA_ROT = SynchedEntityData.defineId(Ah6Entity.class, EntityDataSerializers.FLOAT);
public static final EntityDataAccessor<Float> PROPELLER_ROT = SynchedEntityData.defineId(Ah6Entity.class, EntityDataSerializers.FLOAT);
public boolean engineStart;
public boolean engineStartOver;
public float propellerRot;
public float propellerRotO;
public Ah6Entity(PlayMessages.SpawnEntity packet, Level world) { public Ah6Entity(PlayMessages.SpawnEntity packet, Level world) {
this(ModEntities.AH_6.get(), world); this(ModEntities.AH_6.get(), world);
@ -57,6 +62,7 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
protected void defineSynchedData() { protected void defineSynchedData() {
super.defineSynchedData(); super.defineSynchedData();
this.entityData.define(DELTA_ROT, 0f); this.entityData.define(DELTA_ROT, 0f);
this.entityData.define(PROPELLER_ROT, 0f);
} }
@Override @Override
@ -84,6 +90,8 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
@Override @Override
public void baseTick() { public void baseTick() {
propellerRotO = this.getPropellerRot();
super.baseTick(); super.baseTick();
this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.06, 0.0)); this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.06, 0.0));
@ -114,11 +122,11 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
this.setXRot(this.getXRot() * 0.8f); this.setXRot(this.getXRot() * 0.8f);
this.entityData.set(POWER, this.entityData.get(POWER) * 0.98f); this.entityData.set(POWER, this.entityData.get(POWER) * 0.98f);
} else if (passenger instanceof Player player) { } else if (passenger instanceof Player player) {
if (level().isClientSide && this.getEnergy() > 0) { // if (level().isClientSide && this.getEnergy() > 0) {
level().playLocalSound(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ(), this.getEngineSound(), this.getSoundSource(), Math.min((this.forwardInputDown || this.backInputDown ? 7.5f : 5f) * 2 * Mth.abs(this.entityData.get(POWER)), 0.25f), (random.nextFloat() * 0.1f + 1f), false); // level().playLocalSound(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ(), this.getEngineSound(), this.getSoundSource(), Math.min((this.forwardInputDown || this.backInputDown ? 7.5f : 5f) * 2 * Mth.abs(this.entityData.get(POWER)), 0.25f), (random.nextFloat() * 0.1f + 1f), false);
} // }
diffY = Math.clamp(-90f, 90f, Mth.wrapDegrees(passenger.getYHeadRot() - this.getYRot())); diffY = Math.clamp(-90f, 90f, Mth.wrapDegrees(passenger.getYRot() - this.getYRot()));
diffX = Math.clamp(-60f, 60f, Mth.wrapDegrees(passenger.getXRot() - this.getXRot())); diffX = Math.clamp(-60f, 60f, Mth.wrapDegrees(passenger.getXRot() - this.getXRot()));
if (rightInputDown) { if (rightInputDown) {
@ -127,32 +135,47 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) + 0.15f); this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) + 0.15f);
} }
this.setYRot(this.getYRot() + Mth.clamp((this.onGround() ? 0.1f : 0.6f) * diffY * this.entityData.get(POWER) + 0.5f * this.entityData.get(DELTA_ROT), -3f, 3f)); this.setYRot(this.getYRot() + Mth.clamp((this.onGround() ? 0.1f : 0.7f) * diffY * this.entityData.get(POWER) + 0.5f * this.entityData.get(DELTA_ROT), -5f, 5f));
this.setXRot(Mth.clamp(this.getXRot() + (this.onGround() ? 0 : 0.6f) * diffX * this.entityData.get(POWER), -80, 80)); this.setXRot(Mth.clamp(this.getXRot() + (this.onGround() ? 0 : 0.6f) * diffX * this.entityData.get(POWER), -80, 80));
this.setZRot(Mth.clamp(this.getRoll() - this.entityData.get(DELTA_ROT) + (this.onGround() ? 0 : 0.2f) * diffY * this.entityData.get(POWER), -50, 50)); this.setZRot(Mth.clamp(this.getRoll() - this.entityData.get(DELTA_ROT) + (this.onGround() ? 0 : 0.2f) * diffY * this.entityData.get(POWER), -50, 50));
if (this.level() instanceof ServerLevel) { if (this.level() instanceof ServerLevel) {
if (this.upInputDown || this.forwardInputDown) { boolean up = this.upInputDown || this.forwardInputDown;
boolean down = this.downInputDown || this.backInputDown;
if (!engineStart && up) {
engineStart = true;
this.level().playSound(null, this, ModSounds.HELICOPTER_ENGINE_START.get(), this.getSoundSource(), 3, 1);
}
if (up && engineStartOver) {
this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.002f, 0.12f)); this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.002f, 0.12f));
} }
if (this.downInputDown || this.backInputDown) { if (down && engineStartOver) {
this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0015f, this.onGround() ? 0 : 0.0375f)); this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0015f, this.onGround() ? 0 : 0.0375f));
} }
if (engineStart && !engineStartOver) {
this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.0012f, 0.045f));
}
// player.displayClientMessage(Component.literal("Angle:" + new java.text.DecimalFormat("##.##").format(this.getDeltaMovement().y())), true); // player.displayClientMessage(Component.literal("Angle:" + new java.text.DecimalFormat("##.##").format(this.getDeltaMovement().y())), true);
if(!(this.upInputDown || this.forwardInputDown || this.downInputDown || this.backInputDown)) { if(!(up || down) && engineStartOver) {
if (this.getDeltaMovement().y() + 0.06 < 0) { if (this.getDeltaMovement().y() + 0.06 < 0) {
this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.0002f, 0.12f)); this.entityData.set(POWER, Math.min(this.entityData.get(POWER) + 0.0002f, 0.12f));
} else { } else {
this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - 0.0006f, 0)); this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - (this.onGround() ? 0.00005f : 0.0006f), 0));
} }
} }
} }
} }
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.95f); this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.95f);
this.entityData.set(PROPELLER_ROT, Mth.lerp(0.0001f, this.entityData.get(POWER), this.entityData.get(POWER)));
this.setPropellerRot(this.getPropellerRot() + 30 * this.entityData.get(PROPELLER_ROT));
setDeltaMovement(getDeltaMovement().add(0.0f, Math.min(Math.sin((90 - this.getXRot()) * Mth.DEG_TO_RAD), Math.sin((90 + this.getRoll()) * Mth.DEG_TO_RAD)) * this.entityData.get(POWER), 0.0f)); setDeltaMovement(getDeltaMovement().add(0.0f, Math.min(Math.sin((90 - this.getXRot()) * Mth.DEG_TO_RAD), Math.sin((90 + this.getRoll()) * Mth.DEG_TO_RAD)) * this.entityData.get(POWER), 0.0f));
@ -161,11 +184,31 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
Vector3f directionZ = getForwardDirection().mul(-Math.cos((this.getXRot() + 90) * Mth.DEG_TO_RAD) * this.entityData.get(POWER)); Vector3f directionZ = getForwardDirection().mul(-Math.cos((this.getXRot() + 90) * Mth.DEG_TO_RAD) * this.entityData.get(POWER));
setDeltaMovement(getDeltaMovement().add(new Vec3(directionZ.x, directionZ.y, directionZ.z).scale(0.35))); setDeltaMovement(getDeltaMovement().add(new Vec3(directionZ.x, directionZ.y, directionZ.z).scale(0.35)));
if (this.entityData.get(POWER) > 0.04f) {
engineStartOver = true;
} }
if (this.entityData.get(POWER) < 0.0004f) {
engineStart = false;
engineStartOver = false;
}
if (level().isClientSide) {
level().playLocalSound(this.getX() + this.getDeltaMovement().x, this.getY() + this.getBbHeight() + this.getDeltaMovement().y + 0.06, this.getZ() + this.getDeltaMovement().z, this.getEngineSound(), this.getSoundSource(), Math.max((this.upInputDown? 10f : 3f) * 6 * this.entityData.get(POWER) - 0.038f, 0), (random.nextFloat() * 0.1f + 1.0f), false);
}
}
@Override @Override
public SoundEvent getEngineSound() { public SoundEvent getEngineSound() {
return ModSounds.WHEEL_CHAIR_ENGINE.get(); return ModSounds.HELICOPTER_ENGINE.get();
}
public float getPropellerRot() {
return this.propellerRot;
}
public void setPropellerRot(float pPropellerRot) {
this.propellerRot = pPropellerRot;
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {
@ -176,7 +219,7 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
entity.setYBodyRot(this.getYRot()); entity.setYBodyRot(this.getYRot());
float f2 = Mth.wrapDegrees(entity.getYRot() - this.getYRot()); float f2 = Mth.wrapDegrees(entity.getYRot() - this.getYRot());
float f3 = Mth.clamp(f2, -60.0F, 60.0F); float f3 = Mth.clamp(f2, -80.0F, 80.0F);
entity.yRotO += f3 - f2; entity.yRotO += f3 - f2;
entity.setYRot(entity.getYRot() + f3 - f2); entity.setYRot(entity.getYRot() + f3 - f2);
entity.setYHeadRot(entity.getYRot()); entity.setYHeadRot(entity.getYRot());
@ -196,10 +239,9 @@ public class Ah6Entity extends MobileVehicleEntity implements GeoEntity, IHelico
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform();
float x = 0; float x = 0.45f;
float y = 0.8f; float y = 1.2f;
float z = 0; float z = 1f;
y += (float) passenger.getMyRidingOffset(); y += (float) passenger.getMyRidingOffset();

View file

@ -119,12 +119,10 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
@Override @Override
protected void readAdditionalSaveData(CompoundTag compound) { protected void readAdditionalSaveData(CompoundTag compound) {
super.readAdditionalSaveData(compound); super.readAdditionalSaveData(compound);
this.entityData.set(POWER, compound.getFloat("Power"));
} }
@Override @Override
public void addAdditionalSaveData(CompoundTag compound) { public void addAdditionalSaveData(CompoundTag compound) {
super.addAdditionalSaveData(compound); super.addAdditionalSaveData(compound);
compound.putFloat("Power", this.entityData.get(POWER));
} }
} }

View file

@ -796,11 +796,15 @@ public class ClientEventHandler {
} }
} }
if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity) { if (player.getVehicle() instanceof ICannonEntity) {
event.setCanceled(true); event.setCanceled(true);
} }
if ((player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoom && stack.is(ItemStack.EMPTY.getItem())) { if (player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player && !stack.getItem().isEdible()) {
event.setCanceled(true);
}
if ((player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoom && stack.is(ItemStack.EMPTY.getItem())) {
event.setCanceled(true); event.setCanceled(true);
} }
} }
@ -1200,6 +1204,11 @@ public class ClientEventHandler {
return; return;
} }
if (player.getVehicle() instanceof Ah6Entity ah6Entity && ah6Entity.getFirstPassenger() == player && zoom) {
event.setFOV(event.getFOV() / 3);
return;
}
if (stack.is(ModTags.Items.GUN)) { if (stack.is(ModTags.Items.GUN)) {
if (!event.usedConfiguredFov()) { if (!event.usedConfiguredFov()) {
return; return;

View file

@ -66,7 +66,7 @@ public class ModEntities {
public static final RegistryObject<EntityType<WheelChairEntity>> WHEEL_CHAIR = register("wheel_chair", public static final RegistryObject<EntityType<WheelChairEntity>> WHEEL_CHAIR = register("wheel_chair",
EntityType.Builder.<WheelChairEntity>of(WheelChairEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(3).setCustomClientFactory(WheelChairEntity::new).fireImmune().sized(1.0f, 1.0f)); EntityType.Builder.<WheelChairEntity>of(WheelChairEntity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(3).setCustomClientFactory(WheelChairEntity::new).fireImmune().sized(1.0f, 1.0f));
public static final RegistryObject<EntityType<Ah6Entity>> AH_6 = register("ah_6", public static final RegistryObject<EntityType<Ah6Entity>> AH_6 = register("ah_6",
EntityType.Builder.<Ah6Entity>of(Ah6Entity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(3).setCustomClientFactory(Ah6Entity::new).fireImmune().sized(1.0f, 1.0f)); EntityType.Builder.<Ah6Entity>of(Ah6Entity::new, MobCategory.MISC).setShouldReceiveVelocityUpdates(true).setTrackingRange(512).setUpdateInterval(3).setCustomClientFactory(Ah6Entity::new).fireImmune().sized(2.8f, 2.9f));
private static <T extends Entity> RegistryObject<EntityType<T>> register(String name, EntityType.Builder<T> entityTypeBuilder) { private static <T extends Entity> RegistryObject<EntityType<T>> register(String name, EntityType.Builder<T> entityTypeBuilder) {
return REGISTRY.register(name, () -> entityTypeBuilder.build(name)); return REGISTRY.register(name, () -> entityTypeBuilder.build(name));

View file

@ -356,5 +356,8 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> RADAR_SEARCH_START = REGISTRY.register("radar_search_start", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_start"))); public static final RegistryObject<SoundEvent> RADAR_SEARCH_START = REGISTRY.register("radar_search_start", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_start")));
public static final RegistryObject<SoundEvent> RADAR_SEARCH_IDLE = REGISTRY.register("radar_search_idle", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_idle"))); public static final RegistryObject<SoundEvent> RADAR_SEARCH_IDLE = REGISTRY.register("radar_search_idle", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_idle")));
public static final RegistryObject<SoundEvent> RADAR_SEARCH_END = REGISTRY.register("radar_search_end", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_end"))); public static final RegistryObject<SoundEvent> RADAR_SEARCH_END = REGISTRY.register("radar_search_end", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("radar_search_end")));
public static final RegistryObject<SoundEvent> HELICOPTER_ENGINE_START = REGISTRY.register("helicopter_engine_start", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("helicopter_engine_start")));
public static final RegistryObject<SoundEvent> HELICOPTER_ENGINE = REGISTRY.register("helicopter_engine", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("helicopter_engine")));
} }

View file

@ -96,6 +96,10 @@ public abstract class CameraMixin {
move(-getMaxZoom(3), 1, 0.0); move(-getMaxZoom(3), 1, 0.0);
return; return;
} }
if (thirdPerson && entity.getVehicle() instanceof Ah6Entity) {
move(-getMaxZoom(6), 1, -2.0);
return;
}
if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && entity instanceof Player player && player.getMainHandItem().is(ModTags.Items.GUN)) { if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && entity instanceof Player player && player.getMainHandItem().is(ModTags.Items.GUN)) {
move(-getMaxZoom(-2.9 * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)), 0, -ClientEventHandler.cameraLocation * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)); move(-getMaxZoom(-2.9 * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)), 0, -ClientEventHandler.cameraLocation * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos));
} }

File diff suppressed because it is too large Load diff

View file

@ -370,6 +370,7 @@
"entity.superbwarfare.annihilator": "Annihilator Energy Gun", "entity.superbwarfare.annihilator": "Annihilator Energy Gun",
"entity.superbwarfare.speedboat": "Speedboat", "entity.superbwarfare.speedboat": "Speedboat",
"entity.superbwarfare.wheel_chair": "WheelChair", "entity.superbwarfare.wheel_chair": "WheelChair",
"entity.superbwarfare.ah_6": "AH-6 Little Bird",
"key.categories.superbwarfare": "Superb Warfare", "key.categories.superbwarfare": "Superb Warfare",
"key.superbwarfare.hold_zoom": "Zoom(Hold)", "key.superbwarfare.hold_zoom": "Zoom(Hold)",

View file

@ -370,6 +370,7 @@
"entity.superbwarfare.annihilator": "歼灭者能量炮", "entity.superbwarfare.annihilator": "歼灭者能量炮",
"entity.superbwarfare.speedboat": "快艇", "entity.superbwarfare.speedboat": "快艇",
"entity.superbwarfare.wheel_chair": "轮椅", "entity.superbwarfare.wheel_chair": "轮椅",
"entity.superbwarfare.ah_6": "AH-6 小鸟直升机",
"key.categories.superbwarfare": "卓越前线", "key.categories.superbwarfare": "卓越前线",
"key.superbwarfare.hold_zoom": "瞄准(按住)", "key.superbwarfare.hold_zoom": "瞄准(按住)",

View file

@ -2507,5 +2507,19 @@
"name": "superbwarfare:radar/radar_search_end" "name": "superbwarfare:radar/radar_search_end"
} }
] ]
},
"helicopter_engine_start": {
"sounds": [
{
"name": "superbwarfare:helicopter/heli_engine_start"
}
]
},
"helicopter_engine": {
"sounds": [
{
"name": "superbwarfare:helicopter/heli_engine"
}
]
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB