调整二次灾变充能发射音效和充能后的伤害,修复拔粪宝顶飞载具的bug

This commit is contained in:
Atsuihsio 2025-01-18 16:16:41 +08:00
parent b7f9ebce65
commit 16ce71da61
7 changed files with 33 additions and 15 deletions

View file

@ -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<? extends GunGrenadeEntity> 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<ClientGamePacketListener> 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 {

View file

@ -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) {

View file

@ -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);
}
}

View file

@ -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);