diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java index 1db24dddd..cce5fb8eb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/projectile/GunGrenadeEntity.java @@ -39,6 +39,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile implements GeoEnti private float damage = 40.0f; private float explosionDamage = 80f; private float explosionRadius = 5f; + private boolean charged = false; private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public GunGrenadeEntity(EntityType type, Level world) { @@ -60,6 +61,9 @@ public class GunGrenadeEntity extends ThrowableItemProjectile implements GeoEnti public void setMonsterMultiplier(float monsterMultiplier) { this.monsterMultiplier = monsterMultiplier; } + public void charged(boolean charged) { + this.charged = charged; + } @Override public Packet getAddEntityPacket() { @@ -89,6 +93,10 @@ public class GunGrenadeEntity extends ThrowableItemProjectile implements GeoEnti } } + if (charged) { + damage *= 1.25f; + } + if (entity instanceof Monster monster) { monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.2f * this.damage * damageMultiplier); } else { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 65017fb0f..8e2af7fd7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -299,12 +299,12 @@ public class ClientEventHandler { boolean lookAtEntity = false; - Entity lookingEntity = TraceTool.findLookingEntity(player, player.getEntityReach() + 2.5); + Entity lookingEntity = TraceTool.findLookingEntity(player, player.getEntityReach() + 1.5); - BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2.5)), + BlockHitResult result = player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 1.5)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)); - Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 2.5)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()); + Vec3 looking = Vec3.atLowerCornerOf(player.level().clip(new ClipContext(player.getEyePosition(), player.getEyePosition().add(player.getLookAngle().scale(player.getBlockReach() + 1.5)), ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, player)).getBlockPos()); BlockState blockState = player.level().getBlockState(BlockPos.containing(looking.x(), looking.y(), looking.z())); if (lookingEntity != null) { diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java index 36c14bbd9..3a81e40b5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java @@ -559,7 +559,7 @@ public class FireMessage { AtomicBoolean flag = new AtomicBoolean(false); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 1500) + iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 3000) ); boolean chargeFire = zoom && flag.get(); @@ -577,31 +577,41 @@ public class FireMessage { gunGrenadeEntity.setMonsterMultiplier(0.1f + 0.1f * perkLevel); } + if (chargeFire) { + gunGrenadeEntity.charged(true); + } + gunGrenadeEntity.setPos(player.getX(), player.getEyeY() - 0.1, player.getZ()); - gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (chargeFire ? 3 : 1) * (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), + gunGrenadeEntity.shoot(player.getLookAngle().x, player.getLookAngle().y, player.getLookAngle().z, (chargeFire ? 4 : 1) * (float) GunsTool.getGunDoubleTag(stack, "Velocity", 0), (float) (zoom ? 0.1 : spread)); level.addFreshEntity(gunGrenadeEntity); } if (player.level() instanceof ServerLevel serverLevel) { ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, - player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y, + player.getEyeY() - 0.35 + 1.8 * player.getLookAngle().y, player.getZ() + 1.8 * player.getLookAngle().z, 4, 0.1, 0.1, 0.1, 0.002, true); } player.getCooldowns().addCooldown(stack.getItem(), 2); - if (player instanceof ServerPlayer serverPlayer) { - SoundTool.playLocalSound(serverPlayer, ModSounds.SECONDARY_CATACLYSM_FIRE_1P.get(), 1, 1); - serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FIRE_3P.get(), SoundSource.PLAYERS, 3, 1); - serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FAR.get(), SoundSource.PLAYERS, 5, 1); - serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); - } - if (chargeFire) { + if (player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, ModSounds.SECONDARY_CATACLYSM_FIRE_1P_CHARGE.get(), 1, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FIRE_3P_CHARGE.get(), SoundSource.PLAYERS, 3, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FAR_CHARGE.get(), SoundSource.PLAYERS, 5, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR_CHARGE.get(), SoundSource.PLAYERS, 10, 1); + } stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - energy -> energy.extractEnergy(1500, false) + energy -> energy.extractEnergy(3000, false) ); + } else { + if (player instanceof ServerPlayer serverPlayer) { + SoundTool.playLocalSound(serverPlayer, ModSounds.SECONDARY_CATACLYSM_FIRE_1P.get(), 1, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FIRE_3P.get(), SoundSource.PLAYERS, 3, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_FAR.get(), SoundSource.PLAYERS, 5, 1); + serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.SECONDARY_CATACLYSM_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java index 761f193d9..604eb3131 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/LungeMineAttackMessage.java @@ -83,7 +83,7 @@ public class LungeMineAttackMessage { public static void causeLungeMineExplode(Level pLevel, Entity entity, Entity pLivingEntity) { CustomExplosion explosion = new CustomExplosion(pLevel, pLivingEntity, ModDamageTypes.causeProjectileBoomDamage(pLevel.registryAccess(), pLivingEntity, entity), 60, - pLivingEntity.getX(), pLivingEntity.getY(), pLivingEntity.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1.25f); + pLivingEntity.getX(), pLivingEntity.getEyeY(), pLivingEntity.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1.25f); explosion.explode(); net.minecraftforge.event.ForgeEventFactory.onExplosionStart(pLevel, explosion); explosion.finalizeExplosion(false); diff --git a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_1p.ogg index 3baa423a3..4f829c062 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_1p.ogg and b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_1p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_3p.ogg index 518794ca9..d377e29c8 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_3p.ogg and b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_charge_fire_3p.ogg differ diff --git a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_fire_1p.ogg b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_fire_1p.ogg index 065a1ac5d..2fa57a8d4 100644 Binary files a/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_fire_1p.ogg and b/src/main/resources/assets/superbwarfare/sounds/secondary_cataclysm/secondary_cataclysm_fire_1p.ogg differ