修改坠机伤害实现方式
This commit is contained in:
parent
c5652234e5
commit
e781363c0c
9 changed files with 53 additions and 54 deletions
|
@ -13,7 +13,6 @@ import com.google.common.collect.Lists;
|
|||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.particles.ParticleTypes;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
import net.minecraft.network.protocol.game.ClientGamePacketListener;
|
||||
import net.minecraft.network.syncher.EntityDataAccessor;
|
||||
|
@ -34,7 +33,6 @@ import net.minecraft.world.entity.vehicle.DismountHelper;
|
|||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.level.Explosion;
|
||||
import net.minecraft.world.level.Level;
|
||||
import net.minecraft.world.level.gameevent.GameEvent;
|
||||
import net.minecraft.world.phys.AABB;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import net.minecraftforge.event.ForgeEventFactory;
|
||||
|
@ -135,6 +133,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
|
|||
this.hurt(0.75f * Math.max(amount - 5, 0));
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void baseTick() {
|
||||
propellerRotO = this.getPropellerRot();
|
||||
|
@ -355,34 +354,17 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
|
|||
@Override
|
||||
public void destroy() {
|
||||
Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));
|
||||
if (crash) {
|
||||
List<Entity> passenger = this.getPassengers();
|
||||
for (var e : passenger) {
|
||||
if (e instanceof LivingEntity living) {
|
||||
if (e instanceof ServerPlayer victim && !(victim.isCreative() || victim.isSpectator())) {
|
||||
living.setHealth(0);
|
||||
if (attacker == null || attacker == victim) {
|
||||
living.level().players().forEach(
|
||||
p -> p.sendSystemMessage(
|
||||
Component.translatable("death.attack.air_crash", victim.getDisplayName())
|
||||
)
|
||||
);
|
||||
} else {
|
||||
living.level().players().forEach(
|
||||
p -> p.sendSystemMessage(
|
||||
Component.translatable("death.attack.air_crash_entity",
|
||||
victim.getDisplayName(),
|
||||
attacker.getDisplayName()
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
} else {
|
||||
living.setHealth(0);
|
||||
living.level().broadcastEntityEvent(living, (byte) 60);
|
||||
living.remove(RemovalReason.KILLED);
|
||||
living.gameEvent(GameEvent.ENTITY_DIE);
|
||||
}
|
||||
if (this.crash) {
|
||||
List<Entity> passengers = this.getPassengers();
|
||||
for (var entity : passengers) {
|
||||
if (entity instanceof LivingEntity living) {
|
||||
var tempAttacker = living == attacker ? null : attacker;
|
||||
|
||||
living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE);
|
||||
living.invulnerableTime = 0;
|
||||
living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE);
|
||||
living.invulnerableTime = 0;
|
||||
living.hurt(ModDamageTypes.causeAirCrashDamage(this.level().registryAccess(), null, tempAttacker), Integer.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@ import net.minecraft.core.RegistryAccess;
|
|||
import net.minecraft.core.registries.Registries;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.resources.ResourceKey;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.damagesource.DamageType;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
@ -16,21 +15,23 @@ import javax.annotation.Nullable;
|
|||
|
||||
@SuppressWarnings("OptionalGetWithoutIsPresent")
|
||||
public class ModDamageTypes {
|
||||
public static final ResourceKey<DamageType> GUN_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_absolute"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "gunfire_headshot_absolute"));
|
||||
public static final ResourceKey<DamageType> BURN = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "burn"));
|
||||
public static final ResourceKey<DamageType> MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "mine"));
|
||||
public static final ResourceKey<DamageType> BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "beast"));
|
||||
public static final ResourceKey<DamageType> SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "shock"));
|
||||
public static final ResourceKey<DamageType> PROJECTILE_BOOM = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "projectile_boom"));
|
||||
public static final ResourceKey<DamageType> CANNON_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "cannon_fire"));
|
||||
public static final ResourceKey<DamageType> CUSTOM_EXPLOSION = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "custom_explosion"));
|
||||
public static final ResourceKey<DamageType> DRONE_HIT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "drone_hit"));
|
||||
public static final ResourceKey<DamageType> LASER = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser"));
|
||||
public static final ResourceKey<DamageType> LASER_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "laser_headshot"));
|
||||
public static final ResourceKey<DamageType> VEHICLE_STRIKE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(ModUtils.MODID, "vehicle_strike"));
|
||||
|
||||
public static final ResourceKey<DamageType> GUN_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("gunfire"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("gunfire_absolute"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("gunfire_headshot"));
|
||||
public static final ResourceKey<DamageType> GUN_FIRE_HEADSHOT_ABSOLUTE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("gunfire_headshot_absolute"));
|
||||
public static final ResourceKey<DamageType> BURN = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("burn"));
|
||||
public static final ResourceKey<DamageType> MINE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("mine"));
|
||||
public static final ResourceKey<DamageType> BEAST = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("beast"));
|
||||
public static final ResourceKey<DamageType> SHOCK = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("shock"));
|
||||
public static final ResourceKey<DamageType> PROJECTILE_BOOM = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("projectile_boom"));
|
||||
public static final ResourceKey<DamageType> CANNON_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("cannon_fire"));
|
||||
public static final ResourceKey<DamageType> CUSTOM_EXPLOSION = ResourceKey.create(Registries.DAMAGE_TYPE, ModUtils.loc("custom_explosion"));
|
||||
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> 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 DamageSource causeGunFireDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
|
||||
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(GUN_FIRE), directEntity, attacker);
|
||||
|
@ -88,7 +89,12 @@ public class ModDamageTypes {
|
|||
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(VEHICLE_STRIKE), directEntity, attacker);
|
||||
}
|
||||
|
||||
public static DamageSource causeAirCrashDamage(RegistryAccess registryAccess, @Nullable Entity directEntity, @Nullable Entity attacker) {
|
||||
return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(AIR_CRASH), directEntity, attacker);
|
||||
}
|
||||
|
||||
private static class DamageMessages extends DamageSource {
|
||||
|
||||
public DamageMessages(Holder.Reference<DamageType> typeReference) {
|
||||
super(typeReference);
|
||||
}
|
||||
|
|
|
@ -352,7 +352,8 @@
|
|||
"death.attack.vehicle_strike.entity": "%1$s被%2$s创死了",
|
||||
"death.attack.vehicle_strike.item": "%1$s的被%2$s用%3$s创死了",
|
||||
"death.attack.air_crash": "%1$s坠机了",
|
||||
"death.attack.air_crash_entity": "%1$s坠机了,凶手是%2$s",
|
||||
"death.attack.air_crash.entity": "%1$s坠机了,凶手是%2$s",
|
||||
"death.attack.air_crash.item": "%1$s坠机了,凶手是%2$s",
|
||||
|
||||
"entity.superbwarfare.projectile": "Bullet",
|
||||
"entity.superbwarfare.projectile_mortar_shell": "Mortar Shell",
|
||||
|
|
|
@ -352,7 +352,8 @@
|
|||
"death.attack.vehicle_strike.entity": "%1$s被%2$s创死了",
|
||||
"death.attack.vehicle_strike.item": "%1$s的被%2$s用%3$s创死了",
|
||||
"death.attack.air_crash": "%1$s坠机了",
|
||||
"death.attack.air_crash_entity": "%1$s坠机了,凶手是%2$s",
|
||||
"death.attack.air_crash.entity": "%1$s坠机了,凶手是%2$s",
|
||||
"death.attack.air_crash.item": "%1$s坠机了,凶手是%2$s",
|
||||
|
||||
"entity.superbwarfare.projectile": "子弹",
|
||||
"entity.superbwarfare.projectile_mortar_shell": "迫击炮弹",
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
"superbwarfare:cannon_fire",
|
||||
"superbwarfare:laser",
|
||||
"superbwarfare:laser_headshot",
|
||||
"superbwarfare:vehicle_strike"
|
||||
"superbwarfare:vehicle_strike",
|
||||
"superbwarfare:air_crash"
|
||||
]
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
"superbwarfare:cannon_fire",
|
||||
"superbwarfare:laser",
|
||||
"superbwarfare:laser_headshot",
|
||||
"superbwarfare:vehicle_strike"
|
||||
"superbwarfare:vehicle_strike",
|
||||
"superbwarfare:air_crash"
|
||||
]
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
"superbwarfare:cannon_fire",
|
||||
"superbwarfare:laser",
|
||||
"superbwarfare:laser_headshot",
|
||||
"superbwarfare:vehicle_strike"
|
||||
"superbwarfare:vehicle_strike",
|
||||
"superbwarfare:air_crash"
|
||||
]
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
"superbwarfare:cannon_fire",
|
||||
"superbwarfare:laser",
|
||||
"superbwarfare:laser_headshot",
|
||||
"superbwarfare:vehicle_strike"
|
||||
"superbwarfare:vehicle_strike",
|
||||
"superbwarfare:air_crash"
|
||||
]
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"exhaustion": 0,
|
||||
"message_id": "air_crash",
|
||||
"scaling": "never"
|
||||
}
|
Loading…
Add table
Reference in a new issue