diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index cc3f5d374..a1d7ab0e8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -350,7 +350,7 @@ public class ClientEventHandler { } public static void beamShoot(Player player, ItemStack stack) { - if (stack.is(ModItems.BEAM_TEST.get()) && stack.getOrCreateTag().getBoolean("LaserFiring")) { + if (stack.is(ModItems.BEAM_TEST.get()) && player.getUseItem() == stack) { Entity lookingEntity = TraceTool.laserfindLookingEntity(player, 512); if (player.isCrouching()) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java index ca3ce500f..a200be007 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModSounds.java @@ -334,4 +334,7 @@ public class ModSounds { public static final RegistryObject CHARGE_RIFLE_FIRE_1P = REGISTRY.register("charge_rifle_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_1p"))); 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"))); } + diff --git a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java index a0babf1ea..b399b741a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/BeamTest.java @@ -10,7 +10,6 @@ import com.atsuishio.superbwarfare.network.message.LaserShootMessage; import com.atsuishio.superbwarfare.network.message.ShakeClientMessage; import com.atsuishio.superbwarfare.tools.TraceTool; import net.minecraft.network.protocol.game.ClientboundStopSoundPacket; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; @@ -22,9 +21,11 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Level; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.PacketDistributor; -import net.minecraftforge.registries.ForgeRegistries; +import java.util.Comparator; import java.util.Set; public class BeamTest extends Item { @@ -35,15 +36,10 @@ public class BeamTest extends Item { @Override public InteractionResultHolder use(Level level, Player player, InteractionHand hand) { - ItemStack stack = player.getItemInHand(hand); player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(capability -> { player.startUsingItem(hand); - - SoundEvent sound1p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_1p")); - if (sound1p != null) { - player.playSound(sound1p, 1f, 1); - } + player.playSound(ModSounds.CHARGE_RIFLE_FIRE_1P.get(), 1, 1); if (!level.isClientSide) { double px = player.getX(); @@ -54,15 +50,7 @@ public class BeamTest extends Item { LaserEntity laserEntity = new LaserEntity(player.level(), player, px, py, pz, yHeadRotAngle, xHeadRotAngle, 6000); capability.init(new LaserHandler(player, laserEntity)); capability.start(); - - if (!stack.getOrCreateTag().getBoolean("LaserFiring") && !(player.getCooldowns().isOnCooldown(stack.getItem()))) { - stack.getOrCreateTag().putBoolean("LaserFiring", true); - } - - SoundEvent sound3p = ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_3p")); - if (sound3p != null) { - player.playSound(sound3p, 4, 1f); - } + player.playSound(ModSounds.CHARGE_RIFLE_FIRE_3P.get(), 1, 1); } }); @@ -73,7 +61,6 @@ public class BeamTest extends Item { public void releaseUsing(ItemStack stack, Level level, LivingEntity livingEntity, int timeCharged) { if (livingEntity instanceof Player player) { player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::stop); - stack.getOrCreateTag().putBoolean("LaserFiring", false); } if (livingEntity instanceof ServerPlayer serverPlayer && stack.getItem() instanceof BeamTest beamTest) { stopGunChargeSound(serverPlayer,beamTest); @@ -86,7 +73,10 @@ public class BeamTest extends Item { private static void stopGunChargeSound(ServerPlayer player, BeamTest beamTest) { beamTest.getChargeSound().forEach(sound -> { var clientboundstopsoundpacket = new ClientboundStopSoundPacket(sound.getLocation(), SoundSource.PLAYERS); - player.connection.send(clientboundstopsoundpacket); + final Vec3 center = new Vec3(player.getX(), player.getY(), player.getZ()); + for (ServerPlayer player1 : player.level().getEntitiesOfClass(ServerPlayer.class, new AABB(center, center).inflate(32), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) { + player1.connection.send(clientboundstopsoundpacket); + } }); } @@ -98,14 +88,17 @@ public class BeamTest extends Item { public ItemStack finishUsingItem(ItemStack pStack, Level pLevel, LivingEntity pLivingEntity) { if (pLivingEntity instanceof Player player) { player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::stop); - pStack.getOrCreateTag().putBoolean("LaserFiring", false); - if (player instanceof ServerPlayer serverPlayer) { - ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(30,10,20, serverPlayer.getX(), serverPlayer.getEyeY(), serverPlayer.getZ())); - } player.getCooldowns().addCooldown(pStack.getItem(), 20); if (player.level().isClientSide()) { beamShoot(player); + player.playSound(ModSounds.CHARGE_RIFLE_FIRE_BOOM_1P.get(), 1, 1); + } + if (!player.level().isClientSide) { + player.playSound(ModSounds.CHARGE_RIFLE_FIRE_BOOM_3P.get(), 4, 1); + } + if (player instanceof ServerPlayer serverPlayer) { + ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(10,10,30, serverPlayer.getX(), serverPlayer.getEyeY(), serverPlayer.getZ())); } } return super.finishUsingItem(pStack, pLevel, pLivingEntity); @@ -128,7 +121,7 @@ public class BeamTest extends Item { @Override public int getUseDuration(ItemStack stack) { - return 10; + return 11; } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java index 9b179246d..7f83fa753 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/LivingEntityMixin.java @@ -25,10 +25,12 @@ public class LivingEntityMixin { private double modifyApplyKnockbackArgs(double original) { if (this.target$source.is(ModDamageTypes.GUN_FIRE) || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || this.target$source.is(ModDamageTypes.SHOCK) || this.target$source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE) - || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE) || this.target$source.is(ModDamageTypes.BURN) - || this.target$source.is(ModDamageTypes.LASER)) { + || this.target$source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE) || this.target$source.is(ModDamageTypes.BURN)) { return 0.05 * original; } + if (this.target$source.is(ModDamageTypes.LASER)) { + return -original; + } return original; } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 6539dac98..1a0d8e2bc 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -328,7 +328,7 @@ "death.attack.drone_hit.item": "%1$s被%2$s用无人机叶片切碎了", "death.attack.laser": "%1$s被激光射穿了", "death.attack.laser.entity": "%1$s被%2$s用激光射穿了", - "death.attack.laser.item": "%1$s被%2$s用激光射穿了", + "death.attack.laser.item": "%1$s被%2$s用%3$s激光射穿了", "gui.superbwarfare.mortar_gui.button_set": "Confirm", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 0b049c4fe..3b057594d 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -328,7 +328,7 @@ "death.attack.drone_hit.item": "%1$s被%2$s用无人机叶片切碎了", "death.attack.laser": "%1$s被激光射穿了", "death.attack.laser.entity": "%1$s被%2$s用激光射穿了", - "death.attack.laser.item": "%1$s被%2$s用激光射穿了", + "death.attack.laser.item": "%1$s被%2$s用%3$s激光射穿了", "gui.superbwarfare.mortar_gui.button_set": "确认", diff --git a/src/main/resources/assets/superbwarfare/sounds.json b/src/main/resources/assets/superbwarfare/sounds.json index c66a39e7c..736c76678 100644 --- a/src/main/resources/assets/superbwarfare/sounds.json +++ b/src/main/resources/assets/superbwarfare/sounds.json @@ -2373,5 +2373,21 @@ "stream": false } ] + }, + "charge_rifle_fire_boom_1p": { + "sounds": [ + { + "name": "superbwarfare:charge_rifle/charge_rifle_fire_boom_1p", + "stream": false + } + ] + }, + "charge_rifle_fire_boom_3p": { + "sounds": [ + { + "name": "superbwarfare:charge_rifle/charge_rifle_fire_boom_3p", + "stream": false + } + ] } } \ No newline at end of file diff --git a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_1p.ogg index 96598b92b..884bc48a6 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_1p.ogg and b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_1p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_3p.ogg index 34326695f..2eced8799 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_3p.ogg and b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_3p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_1p.ogg new file mode 100644 index 000000000..4a94cc16e Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_1p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_3p.ogg new file mode 100644 index 000000000..20a2c03b8 Binary files /dev/null and b/src/main/resources/assets/superbwarfare/sounds/charge_rifle/charge_rifle_fire_boom_3p.ogg differ