diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java index 0975921b8..fb50c5da1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/entity/AnnihilatorModel.java @@ -16,7 +16,7 @@ public class AnnihilatorModel extends GeoModel { @Override public ResourceLocation getAnimationResource(AnnihilatorEntity entity) { - return null; + return ModUtils.loc("animations/annihilator.animation.json"); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java index 3f619d391..b91977e6d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/CannonHudOverlay.java @@ -35,6 +35,7 @@ public class CannonHudOverlay { public static float health = 0; public static float maxHealth = 0; + public static float indicatorPosH = 0; private static final ResourceLocation ARMOR = ModUtils.loc("textures/screens/armor.png"); private static final ResourceLocation HEALTH = ModUtils.loc("textures/screens/armor_value.png"); @@ -58,10 +59,28 @@ public class CannonHudOverlay { RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.setShaderColor(1, 1, 1, 1); + if (cannon instanceof Mk42Entity) { + health = cannon.getEntityData().get(Mk42Entity.HEALTH); + maxHealth = CannonConfig.MK42_HP.get(); + indicatorPosH = 1.3f; + } + + if (cannon instanceof Mle1934Entity) { + health = cannon.getEntityData().get(Mle1934Entity.HEALTH); + maxHealth = CannonConfig.MLE1934_HP.get(); + indicatorPosH = 1.2f; + } + + if (cannon instanceof AnnihilatorEntity) { + health = cannon.getEntityData().get(AnnihilatorEntity.HEALTH); + maxHealth = CannonConfig.ANNIHILATOR_HP.get(); + indicatorPosH = 0.2f; + } + float yRotOffset = Mth.lerp(event.getPartialTick(), player.yRotO, player.getYRot()); float xRotOffset = Mth.lerp(event.getPartialTick(), player.xRotO, player.getXRot()); float diffY = cannon.getViewYRot(event.getPartialTick()) - yRotOffset; - float diffX = cannon.getViewXRot(event.getPartialTick()) - xRotOffset + 1.3f; + float diffX = cannon.getViewXRot(event.getPartialTick()) - xRotOffset + indicatorPosH; float fovAdjust = (float) 70 / Minecraft.getInstance().options.fov().get(); if (diffY > 180.0f) { diffY -= 360.0f; @@ -111,21 +130,6 @@ public class CannonHudOverlay { .append(Component.literal(new DecimalFormat("##.#").format(-cannon.getXRot()) + "°")), w / 2 + 14, h / 2 - 29, -1, false); - if (cannon instanceof Mk42Entity) { - health = cannon.getEntityData().get(Mk42Entity.HEALTH); - maxHealth = CannonConfig.MK42_HP.get(); - } - - if (cannon instanceof Mle1934Entity) { - health = cannon.getEntityData().get(Mle1934Entity.HEALTH); - maxHealth = CannonConfig.MLE1934_HP.get(); - } - - if (cannon instanceof AnnihilatorEntity) { - health = cannon.getEntityData().get(AnnihilatorEntity.HEALTH); - maxHealth = CannonConfig.ANNIHILATOR_HP.get(); - } - GuiGraphics guiGraphics = event.getGuiGraphics(); guiGraphics.pose().pushPose(); guiGraphics.blit(ARMOR, w - 96, h - 14, 0, 0, 12, 12, 12, 12); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java index d6f2004a9..53232182d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/AnnihilatorEntity.java @@ -5,9 +5,10 @@ import com.atsuishio.superbwarfare.config.server.CannonConfig; import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig; import com.atsuishio.superbwarfare.init.*; import com.atsuishio.superbwarfare.item.ContainerBlockItem; -import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage; +import com.atsuishio.superbwarfare.network.message.ShakeClientMessage; import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.ParticleTool; +import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleTypes; @@ -42,12 +43,17 @@ import org.joml.Vector3d; 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; +import java.util.Comparator; + public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntity { public static final EntityDataAccessor COOL_DOWN = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT); - public static final EntityDataAccessor TYPE = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT); public static final EntityDataAccessor HEALTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor LASER_LEFT_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); public static final EntityDataAccessor LASER_MIDDLE_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT); @@ -73,7 +79,6 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit @Override protected void defineSynchedData() { this.entityData.define(COOL_DOWN, 0); - this.entityData.define(TYPE, 0); this.entityData.define(HEALTH, MAX_HEALTH); this.entityData.define(LASER_LEFT_LENGTH, 0f); this.entityData.define(LASER_MIDDLE_LENGTH, 0f); @@ -83,14 +88,12 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit @Override public void addAdditionalSaveData(CompoundTag compound) { compound.putInt("CoolDown", this.entityData.get(COOL_DOWN)); - compound.putInt("Type", this.entityData.get(TYPE)); compound.putFloat("Health", this.entityData.get(HEALTH)); } @Override public void readAdditionalSaveData(CompoundTag compound) { this.entityData.set(COOL_DOWN, compound.getInt("CoolDown")); - this.entityData.set(TYPE, compound.getInt("Type")); if (compound.contains("Health")) { this.entityData.set(HEALTH, compound.getFloat("Health")); } else { @@ -277,15 +280,24 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit Vec3 BarrelRightPos = new Vec3(BarrelRootPos.x + rightPos.x, BarrelRootPos.y + rightPos.y, BarrelRootPos.z + rightPos.z); - this.entityData.set(LASER_LEFT_LENGTH, Math.min(laserLength(BarrelLeftPos ,this), laserLengthEntity(BarrelLeftPos ,this))); - this.entityData.set(LASER_MIDDLE_LENGTH, Math.min(laserLength(BarrelMiddlePos ,this), laserLengthEntity(BarrelMiddlePos ,this))); - this.entityData.set(LASER_RIGHT_LENGTH, Math.min(laserLength(BarrelRightPos ,this), laserLengthEntity(BarrelRightPos ,this))); + if (this.entityData.get(COOL_DOWN) > 88) { + this.entityData.set(LASER_LEFT_LENGTH, Math.min(laserLength(BarrelLeftPos ,this), laserLengthEntity(BarrelLeftPos ,this))); + this.entityData.set(LASER_MIDDLE_LENGTH, Math.min(laserLength(BarrelMiddlePos ,this), laserLengthEntity(BarrelMiddlePos ,this))); + this.entityData.set(LASER_RIGHT_LENGTH, Math.min(laserLength(BarrelRightPos ,this), laserLengthEntity(BarrelRightPos ,this))); + } travel(); this.refreshDimensions(); } private float laserLength (Vec3 pos, Entity cannon) { + if (this.entityData.get(COOL_DOWN) > 98) { + HitResult result = cannon.level().clip(new ClipContext(pos, pos.add(cannon.getViewVector(1).scale(512)), + ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, cannon)); + Vec3 hitPos = result.getLocation(); + laserExplosion(hitPos); + } + return (float) pos.distanceTo((Vec3.atLowerCornerOf(cannon.level().clip( new ClipContext(pos, pos.add(cannon.getViewVector(1).scale(512)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, cannon)).getBlockPos()))); @@ -315,28 +327,35 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit hitResult = entityhitresult; } if (hitResult.getType() == HitResult.Type.ENTITY) { - Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); Entity target = ((EntityHitResult) hitResult).getEntity(); - - target.hurt(ModDamageTypes.causeLaserDamage(this.level().registryAccess(), passenger, passenger), (float) 100); + target.hurt(ModDamageTypes.causeLaserDamage(this.level().registryAccess(), passenger, passenger), (float) 200); target.invulnerableTime = 0; - if (passenger instanceof ServerPlayer serverPlayer) { - serverPlayer.level().playSound(null, serverPlayer.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 0.1f, 1); - ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ClientIndicatorMessage(0, 5)); + if (this.entityData.get(COOL_DOWN) > 98) { + laserExplosion(targetPos); } - return (float) pos.distanceTo(target.position()); } } - return 512; } + private void laserExplosion(Vec3 pos) { + Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); + + CustomExplosion explosion = new CustomExplosion(this.level(), passenger, + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), passenger, passenger), 300f, + pos.x, pos.y, pos.z, 15f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + explosion.explode(); + net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); + explosion.finalizeExplosion(false); + ParticleTool.spawnHugeExplosionParticles(this.level(), pos); + } + private void destroy() { CustomExplosion explosion = new CustomExplosion(this.level(), this, - ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this), 140f, - this.getX(), this.getY(), this.getZ(), 25f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); + ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this), 160f, + this.getX(), this.getY(), this.getZ(), 20f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion); explosion.finalizeExplosion(false); @@ -347,6 +366,34 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit @Override public void cannonShoot(Player player) { + if (this.entityData.get(COOL_DOWN) > 0) { + return; + } + + Level level = player.level(); + if (level instanceof ServerLevel server) { + ItemStack stack = player.getMainHandItem(); + + + if (player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, ModSounds.ANNIHILATOR_FIRE_1P.get(), 1, 1); +// SoundTool.playLocalSound(serverPlayer, ModSounds.MK_42_RELOAD.get(), 2, 1); +// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_FIRE_3P.get(), SoundSource.PLAYERS, 6, 1); +// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_FAR.get(), SoundSource.PLAYERS, 16, 1); +// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_VERYFAR.get(), SoundSource.PLAYERS, 32, 1); + } + + this.entityData.set(COOL_DOWN, 100); + + final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ()); + + for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(20), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { + + if (target instanceof ServerPlayer serverPlayer) { + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(15, 15, 25, this.getX(), this.getEyeY(), this.getZ())); + } + } + } } @Override @@ -369,7 +416,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit } float diffY = passengerY - this.getYRot(); - float diffX = entity.getXRot() - 1.2f - this.getXRot(); + float diffX = entity.getXRot() - 0.2f - this.getXRot(); if (diffY > 180.0f) { diffY -= 360.0f; } else if (diffY < -180.0f) { @@ -379,13 +426,13 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit diffX = diffX * 0.15f; this.setYRot(this.getYRot() + diffY); - this.setXRot(Mth.clamp(this.getXRot() + Mth.clamp(diffX, -2f, 2f), -45, 6.2f)); + this.setXRot(Mth.clamp(this.getXRot() + Mth.clamp(diffX, -2f, 2f), -45, 5.2f)); this.setRot(this.getYRot(), this.getXRot()); } protected void clampRotation(Entity entity) { float f = Mth.wrapDegrees(entity.getXRot()); - float f1 = Mth.clamp(f, -45.0F, 6.2F); + float f1 = Mth.clamp(f, -45.0F, 5.2F); entity.xRotO += f1 - f; entity.setXRot(entity.getXRot() + f1 - f); } @@ -395,20 +442,16 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit this.clampRotation(entity); } -// private PlayState movementPredicate(AnimationState event) { -// 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")); -// } + private PlayState movementPredicate(AnimationState event) { + if (this.entityData.get(COOL_DOWN) > 88) { + return event.setAndContinue(RawAnimation.begin().thenPlay("animation.annihilator.fire")); + } + return event.setAndContinue(RawAnimation.begin().thenLoop("animation.annihilator.idle")); + } @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { -// data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate)); + data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate)); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index a200be007..f15082569 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -336,5 +336,7 @@ public class ModSounds { public static final RegistryObject CHARGE_RIFLE_FIRE_3P = REGISTRY.register("charge_rifle_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_3p"))); public static final RegistryObject CHARGE_RIFLE_FIRE_BOOM_1P = REGISTRY.register("charge_rifle_fire_boom_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_boom_1p"))); public static final RegistryObject CHARGE_RIFLE_FIRE_BOOM_3P = REGISTRY.register("charge_rifle_fire_boom_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_boom_3p"))); + + public static final RegistryObject ANNIHILATOR_FIRE_1P = REGISTRY.register("annihilator_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "annihilator_fire_1p"))); } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java index 4440da74b..6b1d13e0d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/CameraMixin.java @@ -1,5 +1,6 @@ package com.atsuishio.superbwarfare.mixins; +import com.atsuishio.superbwarfare.entity.AnnihilatorEntity; import com.atsuishio.superbwarfare.entity.DroneEntity; import com.atsuishio.superbwarfare.entity.Mk42Entity; import com.atsuishio.superbwarfare.entity.Mle1934Entity; @@ -71,6 +72,10 @@ public abstract class CameraMixin { move(-getMaxZoom(10), 1.3, 0.0); return; } + if (thirdPerson && entity.getVehicle() instanceof AnnihilatorEntity) { + move(-getMaxZoom(16), 1.3, 0.0); + return; + } 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)); } diff --git a/src/main/resources/assets/superbwarfare/animations/annihilator.animation.json b/src/main/resources/assets/superbwarfare/animations/annihilator.animation.json new file mode 100644 index 000000000..9a40b983d --- /dev/null +++ b/src/main/resources/assets/superbwarfare/animations/annihilator.animation.json @@ -0,0 +1,114 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.annihilator.idle": { + "animation_length": 0.25, + "bones": { + "glow1": { + "scale": 0 + }, + "light1": { + "scale": [1, 1, 0] + }, + "glow2": { + "scale": 0 + }, + "light2": { + "scale": [1, 1, 0] + }, + "glow3": { + "scale": 0 + }, + "light3": { + "scale": [1, 1, 0] + }, + "laser1": { + "scale": [0, 0, 1] + }, + "laser2": { + "scale": [0, 0, 1] + }, + "laser3": { + "scale": [0, 0, 1] + } + } + }, + "animation.annihilator.fire": { + "animation_length": 1, + "bones": { + "glow1": { + "scale": { + "0.0": [0, 0, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 0] + } + }, + "light1": { + "scale": { + "0.0": [1, 1, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [1, 1, 0] + } + }, + "glow2": { + "scale": { + "0.0": [0, 0, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 0] + } + }, + "light2": { + "scale": { + "0.0": [1, 1, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [1, 1, 0] + } + }, + "glow3": { + "scale": { + "0.0": [0, 0, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 0] + } + }, + "light3": { + "scale": { + "0.0": [1, 1, 0], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [1, 1, 0] + } + }, + "laser1": { + "scale": { + "0.0": [0, 0, 1], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 1] + } + }, + "laser2": { + "scale": { + "0.0": [0, 0, 1], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 1] + } + }, + "laser3": { + "scale": { + "0.0": [0, 0, 1], + "0.0083": [1, 1, 1], + "0.1917": [1, 1, 1], + "0.5": [0, 0, 1] + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json b/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json index c0892374e..2c4655aea 100644 --- a/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json +++ b/src/main/resources/assets/superbwarfare/geo/annihilator.geo.json @@ -43,7 +43,352 @@ "pivot": [43.25, 36.0004, -275] }, { - "name": "bone5", + "name": "light1", + "parent": "laser", + "pivot": [43.215, 35.2505, -331.2], + "cubes": [ + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 0], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, -180], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + }, + { + "origin": [43.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [43.215, 35.2505, -331.2], + "rotation": [0, -90, 90], + "uv": { + "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} + } + } + ] + }, + { + "name": "light2", + "parent": "laser", + "pivot": [-43.215, 35.2505, -331.2], + "cubes": [ + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-79.215, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [-43.215, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + } + ] + }, + { + "name": "light3", + "parent": "laser", + "pivot": [0, 35.2505, -331.2], + "cubes": [ + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 0], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.877, -333.745], + "size": [36, 0, 5.09], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, 180], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + }, + { + "origin": [-36, 37.7945, -333.8275], + "size": [36, 0, 5.255], + "pivot": [0, 35.2505, -331.2], + "rotation": [0, 90, -90], + "uv": { + "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} + } + } + ] + }, + { + "name": "glow1", "parent": "laser", "pivot": [43.25, 35.2538, -330.9], "cubes": [ @@ -77,122 +422,7 @@ ] }, { - "name": "bone7", - "parent": "bone5", - "pivot": [45.759, 35.33301, -305.2], - "cubes": [ - { - "origin": [17.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 37.877, -305.2], - "rotation": [0, -90, 0], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [17.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 32.624, -305.2], - "rotation": [0, -90, -180], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [19.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [45.759, 35.25051, -305.2], - "rotation": [0, -90, 90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [14.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [40.671, 35.2505, -305.2], - "rotation": [0, -90, -90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [14.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [40.671, 35.2505, -305.2], - "rotation": [0, -90, -90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [17.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 37.877, -305.2], - "rotation": [0, -90, 0], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [17.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 32.624, -305.2], - "rotation": [0, -90, -180], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [19.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [45.759, 35.25051, -305.2], - "rotation": [0, -90, 90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [14.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [40.671, 35.2505, -305.2], - "rotation": [0, -90, -90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [17.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 37.877, -305.2], - "rotation": [0, -90, 0], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [17.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [43.215, 32.624, -305.2], - "rotation": [0, -90, -180], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - }, - { - "origin": [19.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [45.759, 35.25051, -305.2], - "rotation": [0, -90, 90], - "uv": { - "up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]} - } - } - ] - }, - { - "name": "bone8", + "name": "glow2", "parent": "laser", "pivot": [-43.25, 35.2538, -330.9], "cubes": [ @@ -226,122 +456,7 @@ ] }, { - "name": "bone9", - "parent": "bone8", - "pivot": [-45.759, 35.33301, -305.2], - "cubes": [ - { - "origin": [-53.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-53.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-55.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-45.759, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-50.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-40.671, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-50.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-40.671, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-53.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-53.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-55.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-45.759, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-50.671, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-40.671, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-53.215, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-53.215, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [-43.215, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-55.759, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-45.759, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - } - ] - }, - { - "name": "bone10", + "name": "glow3", "parent": "laser", "pivot": [-0.035, 35.2538, -330.9], "cubes": [ @@ -374,121 +489,6 @@ } ] }, - { - "name": "bone11", - "parent": "bone10", - "pivot": [-2.544, 35.33301, -305.2], - "cubes": [ - { - "origin": [-10, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-10, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-12.544, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-2.544, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-7.456, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [2.544, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-7.456, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [2.544, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-10, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-10, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-12.544, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-2.544, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-7.456, 35.2505, -307.8275], - "size": [36, 0, 5.255], - "pivot": [2.544, 35.2505, -305.2], - "rotation": [0, 90, 90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-10, 37.877, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 37.877, -305.2], - "rotation": [0, 90, 0], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-10, 32.624, -307.745], - "size": [36, 0, 5.09], - "pivot": [0, 32.624, -305.2], - "rotation": [0, 90, 180], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - }, - { - "origin": [-12.544, 35.25051, -307.8275], - "size": [36, 0, 5.255], - "pivot": [-2.544, 35.25051, -305.2], - "rotation": [0, 90, -90], - "uv": { - "up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]} - } - } - ] - }, { "name": "laser1", "parent": "laser", diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index 736c76678..74997346d 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2389,5 +2389,13 @@ "stream": false } ] + }, + "annihilator_fire_1p": { + "sounds": [ + { + "name": "superbwarfare:annihilator/annihilator_fire_1p", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/annihilator/annihilator_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/annihilator/annihilator_fire_1p.ogg new file mode 100644 index 000000000..b53ccdca5 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/annihilator/annihilator_fire_1p.ogg differ