添加新伤害类型,修复手持携带强力吸引模组的武器时,炮塔击杀目标会捡起物品的bug
This commit is contained in:
parent
1771b5d91b
commit
1ed4a43721
15 changed files with 43 additions and 11 deletions
|
@ -321,7 +321,7 @@ public class KillMessageOverlay {
|
||||||
icon = BURN;
|
icon = BURN;
|
||||||
} else if (record.damageType == ModDamageTypes.DRONE_HIT) {
|
} else if (record.damageType == ModDamageTypes.DRONE_HIT) {
|
||||||
icon = DRONE;
|
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;
|
icon = LASER;
|
||||||
} else if (record.damageType == ModDamageTypes.VEHICLE_STRIKE) {
|
} else if (record.damageType == ModDamageTypes.VEHICLE_STRIKE) {
|
||||||
icon = VEHICLE;
|
icon = VEHICLE;
|
||||||
|
|
|
@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||||
import com.atsuishio.superbwarfare.tools.VectorTool;
|
import com.atsuishio.superbwarfare.tools.VectorTool;
|
||||||
|
import net.minecraft.core.particles.ParticleTypes;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||||
|
@ -287,10 +288,12 @@ public class LaserTowerEntity extends EnergyVehicleEntity implements GeoEntity,
|
||||||
this.setRot(this.getYRot(), this.getXRot());
|
this.setRot(this.getYRot(), this.getXRot());
|
||||||
|
|
||||||
if (this.entityData.get(COOL_DOWN) == 0 && VectorTool.calculateAngle(getViewVector(1), targetVec) < 1) {
|
if (this.entityData.get(COOL_DOWN) == 0 && VectorTool.calculateAngle(getViewVector(1), targetVec) < 1) {
|
||||||
if (level() instanceof ServerLevel) {
|
if (level() instanceof ServerLevel serverLevel) {
|
||||||
this.level().playSound(this, getOnPos(), ModSounds.CHARGE_RIFLE_FIRE_BOOM_3P.get(), SoundSource.PLAYERS, 2, 1);
|
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;
|
naerestEntity.invulnerableTime = 0;
|
||||||
entityData.set(LASER_LENGTH, distanceTo(naerestEntity));
|
entityData.set(LASER_LENGTH, distanceTo(naerestEntity));
|
||||||
this.entityData.set(COOL_DOWN, 20);
|
this.entityData.set(COOL_DOWN, 20);
|
||||||
|
|
|
@ -765,7 +765,7 @@ public class LivingEventHandler {
|
||||||
return;
|
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();
|
var drops = event.getDrops();
|
||||||
drops.forEach(itemEntity -> {
|
drops.forEach(itemEntity -> {
|
||||||
ItemStack item = itemEntity.getItem();
|
ItemStack item = itemEntity.getItem();
|
||||||
|
|
|
@ -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> 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 = 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_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> 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> 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"));
|
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);
|
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) {
|
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);
|
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(LASER_HEADSHOT), directEntity, attacker);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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_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> 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> 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")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,10 @@ public class DamageTypeTool {
|
||||||
|| damageType == ModDamageTypes.GUN_FIRE_ABSOLUTE || damageType == ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE;
|
|| 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) {
|
public static boolean isHeadshotDamage(DamageSource source) {
|
||||||
return source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
|
return source.is(ModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT_ABSOLUTE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2835,5 +2835,13 @@
|
||||||
"stream": false
|
"stream": false
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"laser_tower_shoot": {
|
||||||
|
"sounds": [
|
||||||
|
{
|
||||||
|
"name": "superbwarfare:laser_tower_shoot",
|
||||||
|
"stream": false
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
Binary file not shown.
|
@ -5,6 +5,7 @@
|
||||||
"superbwarfare:custom_explosion",
|
"superbwarfare:custom_explosion",
|
||||||
"superbwarfare:cannon_fire",
|
"superbwarfare:cannon_fire",
|
||||||
"superbwarfare:laser",
|
"superbwarfare:laser",
|
||||||
"superbwarfare:laser_headshot"
|
"superbwarfare:laser_headshot",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
"superbwarfare:laser_headshot",
|
"superbwarfare:laser_headshot",
|
||||||
"superbwarfare:vehicle_strike",
|
"superbwarfare:vehicle_strike",
|
||||||
"superbwarfare:vehicle_explosion",
|
"superbwarfare:vehicle_explosion",
|
||||||
"superbwarfare:air_crash"
|
"superbwarfare:air_crash",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
"superbwarfare:laser_headshot",
|
"superbwarfare:laser_headshot",
|
||||||
"superbwarfare:vehicle_strike",
|
"superbwarfare:vehicle_strike",
|
||||||
"superbwarfare:air_crash",
|
"superbwarfare:air_crash",
|
||||||
"superbwarfare:vehicle_explosion"
|
"superbwarfare:vehicle_explosion",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
"superbwarfare:laser_headshot",
|
"superbwarfare:laser_headshot",
|
||||||
"superbwarfare:vehicle_strike",
|
"superbwarfare:vehicle_strike",
|
||||||
"superbwarfare:air_crash",
|
"superbwarfare:air_crash",
|
||||||
"superbwarfare:vehicle_explosion"
|
"superbwarfare:vehicle_explosion",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -9,6 +9,7 @@
|
||||||
"superbwarfare:laser_headshot",
|
"superbwarfare:laser_headshot",
|
||||||
"superbwarfare:vehicle_strike",
|
"superbwarfare:vehicle_strike",
|
||||||
"superbwarfare:air_crash",
|
"superbwarfare:air_crash",
|
||||||
"superbwarfare:vehicle_explosion"
|
"superbwarfare:vehicle_explosion",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -4,6 +4,7 @@
|
||||||
"superbwarfare:projectile_boom",
|
"superbwarfare:projectile_boom",
|
||||||
"superbwarfare:custom_explosion",
|
"superbwarfare:custom_explosion",
|
||||||
"superbwarfare:laser",
|
"superbwarfare:laser",
|
||||||
"superbwarfare:laser_headshot"
|
"superbwarfare:laser_headshot",
|
||||||
|
"superbwarfare:laser_static"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"exhaustion": 0,
|
||||||
|
"message_id": "laser",
|
||||||
|
"scaling": "never"
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue