添加新伤害类型,修复手持携带强力吸引模组的武器时,炮塔击杀目标会捡起物品的bug

This commit is contained in:
Atsuihsio 2025-02-12 02:33:39 +08:00
parent 1771b5d91b
commit 1ed4a43721
15 changed files with 43 additions and 11 deletions

View file

@ -321,7 +321,7 @@ public class KillMessageOverlay {
icon = BURN;
} else if (record.damageType == ModDamageTypes.DRONE_HIT) {
icon = DRONE;
} else if (record.damageType == ModDamageTypes.LASER || record.damageType == ModDamageTypes.LASER_HEADSHOT) {
} else if (record.damageType == ModDamageTypes.LASER || record.damageType == ModDamageTypes.LASER_HEADSHOT || record.damageType == ModDamageTypes.LASER_STATIC) {
icon = LASER;
} else if (record.damageType == ModDamageTypes.VEHICLE_STRIKE) {
icon = VEHICLE;

View file

@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.tools.CustomExplosion;
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.atsuishio.superbwarfare.tools.VectorTool;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
@ -287,10 +288,12 @@ public class LaserTowerEntity extends EnergyVehicleEntity implements GeoEntity,
this.setRot(this.getYRot(), this.getXRot());
if (this.entityData.get(COOL_DOWN) == 0 && VectorTool.calculateAngle(getViewVector(1), targetVec) < 1) {
if (level() instanceof ServerLevel) {
this.level().playSound(this, getOnPos(), ModSounds.CHARGE_RIFLE_FIRE_BOOM_3P.get(), SoundSource.PLAYERS, 2, 1);
if (level() instanceof ServerLevel serverLevel) {
this.level().playSound(this, getOnPos(), ModSounds.LASER_TOWER_SHOOT.get(), SoundSource.PLAYERS, 2, 1);
sendParticle(serverLevel, ParticleTypes.END_ROD, naerestEntity.getX(), naerestEntity.getEyeY(), naerestEntity.getZ(), 12, 0, 0, 0, 0.05, true);
sendParticle(serverLevel, ParticleTypes.LAVA, naerestEntity.getX(), naerestEntity.getEyeY(), naerestEntity.getZ(), 4, 0, 0, 0, 0.15, true);
}
naerestEntity.hurt(ModDamageTypes.causeLaserDamage(this.level().registryAccess(), getOwner(), getOwner()), (float) 25);
naerestEntity.hurt(ModDamageTypes.causeLaserStaticDamage(this.level().registryAccess(), getOwner(), getOwner()), (float) 25);
naerestEntity.invulnerableTime = 0;
entityData.set(LASER_LENGTH, distanceTo(naerestEntity));
this.entityData.set(COOL_DOWN, 20);

View file

@ -765,7 +765,7 @@ public class LivingEventHandler {
return;
}
if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) {
if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0 && (DamageTypeTool.isGunDamage(source) || DamageTypeTool.isExplosionDamage(source))) {
var drops = event.getDrops();
drops.forEach(itemEntity -> {
ItemStack item = itemEntity.getItem();

View file

@ -30,6 +30,7 @@ public class ModDamageTypes {
public static final ResourceKey<DamageType> DRONE_HIT = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("drone_hit"));
public static final ResourceKey<DamageType> LASER = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("laser"));
public static final ResourceKey<DamageType> LASER_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("laser_headshot"));
public static final ResourceKey<DamageType> LASER_STATIC = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("laser_static"));
public static final ResourceKey<DamageType> VEHICLE_STRIKE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("vehicle_strike"));
public static final ResourceKey<DamageType> AIR_CRASH = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("air_crash"));
public static final ResourceKey<DamageType> LUNGE_MINE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("lunge_mine"));
@ -83,6 +84,10 @@ public class ModDamageTypes {
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER), directEntity, attacker);
}
public static DamageSource causeLaserStaticDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER_STATIC), directEntity, attacker);
}
public static DamageSource causeLaserHeadshotDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER_HEADSHOT), directEntity, attacker);
}

View file

@ -413,5 +413,6 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> BMP_MISSILE_RELOAD = REGISTRY.register("bmp_missile_reload", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("bmp_missile_reload")));
public static final RegistryObject<SoundEvent> BMP_STEP = REGISTRY.register("bmp_step", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("bmp_step")));
public static final RegistryObject<SoundEvent> WHEEL_STEP = REGISTRY.register("wheel_step", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("wheel_step")));
public static final RegistryObject<SoundEvent> LASER_TOWER_SHOOT = REGISTRY.register("laser_tower_shoot", () -> SoundEvent.createVariableRangeEvent(ModUtils.loc("laser_tower_shoot")));
}

View file

@ -19,6 +19,10 @@ public class DamageTypeTool {
|| damageType == ModDamageTypes.GUN_FIRE_ABSOLUTE || damageType == ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE;
}
public static boolean isExplosionDamage(DamageSource source) {
return source.is(ModDamageTypes.CUSTOM_EXPLOSION) || source.is(ModDamageTypes.PROJECTILE_BOOM);
}
public static boolean isHeadshotDamage(DamageSource source) {
return source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
}

View file

@ -2835,5 +2835,13 @@
"stream": false
}
]
},
"laser_tower_shoot": {
"sounds": [
{
"name": "superbwarfare:laser_tower_shoot",
"stream": false
}
]
}
}

View file

@ -5,6 +5,7 @@
"superbwarfare:custom_explosion",
"superbwarfare:cannon_fire",
"superbwarfare:laser",
"superbwarfare:laser_headshot"
"superbwarfare:laser_headshot",
"superbwarfare:laser_static"
]
}

View file

@ -9,6 +9,7 @@
"superbwarfare:laser_headshot",
"superbwarfare:vehicle_strike",
"superbwarfare:vehicle_explosion",
"superbwarfare:air_crash"
"superbwarfare:air_crash",
"superbwarfare:laser_static"
]
}

View file

@ -9,6 +9,7 @@
"superbwarfare:laser_headshot",
"superbwarfare:vehicle_strike",
"superbwarfare:air_crash",
"superbwarfare:vehicle_explosion"
"superbwarfare:vehicle_explosion",
"superbwarfare:laser_static"
]
}

View file

@ -9,6 +9,7 @@
"superbwarfare:laser_headshot",
"superbwarfare:vehicle_strike",
"superbwarfare:air_crash",
"superbwarfare:vehicle_explosion"
"superbwarfare:vehicle_explosion",
"superbwarfare:laser_static"
]
}

View file

@ -9,6 +9,7 @@
"superbwarfare:laser_headshot",
"superbwarfare:vehicle_strike",
"superbwarfare:air_crash",
"superbwarfare:vehicle_explosion"
"superbwarfare:vehicle_explosion",
"superbwarfare:laser_static"
]
}

View file

@ -4,6 +4,7 @@
"superbwarfare:projectile_boom",
"superbwarfare:custom_explosion",
"superbwarfare:laser",
"superbwarfare:laser_headshot"
"superbwarfare:laser_headshot",
"superbwarfare:laser_static"
]
}

View file

@ -0,0 +1,5 @@
{
"exhaustion": 0,
"message_id": "laser",
"scaling": "never"
}