调整载具数值平衡

This commit is contained in:
Atsuihsio 2025-01-27 02:11:31 +08:00
parent 18f0817289
commit 2c971fe2c8
23 changed files with 296 additions and 211 deletions

View file

@ -111,6 +111,10 @@ dependencies {
implementation fg.deobf("curse.maven:oculus-581495:6020952")
implementation fg.deobf("curse.maven:embeddium-908741:5681725")
implementation fg.deobf("curse.maven:timeless-and-classics-zero-1028108:6069384")
implementation fg.deobf("curse.maven:create-328085:5838779")
}
mixin {

View file

@ -63,7 +63,7 @@ public class VehicleConfig {
builder.push("mk_42");
builder.comment("The HealthPoint of MK-42");
MK42_HP = builder.defineInRange("mk_42_hp", 700, 1, 10000000);
MK42_HP = builder.defineInRange("mk_42_hp", 200, 1, 10000000);
builder.comment("The AP shell damage of MK-42");
MK42_AP_DAMAGE = builder.defineInRange("mk_42_ap_damage", 300, 1, 10000000);
@ -88,7 +88,7 @@ public class VehicleConfig {
builder.push("mle_1934");
builder.comment("The HealthPoint of MLE-1934");
MLE1934_HP = builder.defineInRange("mle_1934_hp", 800, 1, 10000000);
MLE1934_HP = builder.defineInRange("mle_1934_hp", 200, 1, 10000000);
builder.comment("The AP shell damage of MLE-1934");
MLE1934_AP_DAMAGE = builder.defineInRange("mle_1934_ap_damage", 350, 1, 10000000);
@ -113,7 +113,7 @@ public class VehicleConfig {
builder.push("annihilator");
builder.comment("The HealthPoint of Annihilator");
ANNIHILATOR_HP = builder.defineInRange("annihilator_hp", 4000, 1, 10000000);
ANNIHILATOR_HP = builder.defineInRange("annihilator_hp", 800, 1, 10000000);
builder.comment("The energy cost of Annihilator per shoot");
ANNIHILATOR_SHOOT_COST = builder.defineInRange("annihilator_shoot_cost", 2000000, 0, 2147483647);
@ -126,7 +126,7 @@ public class VehicleConfig {
builder.push("speedboat");
builder.comment("The HealthPoint of Speedboat");
SPEEDBOAT_HP = builder.defineInRange("speedboat_hp", 500, 1, 10000000);
SPEEDBOAT_HP = builder.defineInRange("speedboat_hp", 200, 1, 10000000);
builder.comment("The energy cost of Speedboat per tick");
SPEEDBOAT_ENERGY_COST = builder.defineInRange("speedboat_energy_cost", 16, 0, 2147483647);
@ -142,7 +142,7 @@ public class VehicleConfig {
builder.push("ah_6");
builder.comment("The HealthPoint of AH-6");
AH_6_HP = builder.defineInRange("ah_6_hp", 500, 1, 10000000);
AH_6_HP = builder.defineInRange("ah_6_hp", 250, 1, 10000000);
builder.comment("The min energy cost of AH-6 per tick");
AH_6_MIN_ENERGY_COST = builder.defineInRange("ah_6_min_energy_cost", 64, 0, 2147483647);
@ -170,7 +170,7 @@ public class VehicleConfig {
builder.push("lav_150");
builder.comment("The HealthPoint of Lav_150");
LAV_150_HP = builder.defineInRange("lav_150_hp", 850, 1, 10000000);
LAV_150_HP = builder.defineInRange("lav_150_hp", 250, 1, 10000000);
builder.comment("The energy cost of Lav_150 per tick");
LAV_150_ENERGY_COST = builder.defineInRange("lav_150_energy_cost", 64, 0, 2147483647);
@ -179,7 +179,7 @@ public class VehicleConfig {
LAV_150_MAX_ENERGY = builder.defineInRange("lav_150_max_energy", 3000000, 0, 2147483647);
builder.comment("The cannon damage of Lav_150");
LAV_150_CANNON_DAMAGE = builder.defineInRange("lav_150_cannon_damage", 40, 1, 10000000);
LAV_150_CANNON_DAMAGE = builder.defineInRange("lav_150_cannon_damage", 45, 1, 10000000);
builder.comment("The rocket explosion damage of Lav_150");
LAV_150_CANNON_EXPLOSION_DAMAGE = builder.defineInRange("lav_150_cannon_explosion_damage", 12, 1, 10000000);
@ -192,7 +192,7 @@ public class VehicleConfig {
builder.push("tom_6");
builder.comment("The HealthPoint of Tom_6");
TOM_6_HP = builder.defineInRange("tom_6_hp", 50, 1, 10000000);
TOM_6_HP = builder.defineInRange("tom_6_hp", 40, 1, 10000000);
builder.comment("The energy cost of Tom_6 per tick");
TOM_6_ENERGY_COST = builder.defineInRange("tom_6_energy_cost", 16, 0, 2147483647);
@ -211,7 +211,7 @@ public class VehicleConfig {
builder.push("bmp_2");
builder.comment("The HealthPoint of Bmp_2");
BMP_2_HP = builder.defineInRange("bmp_2_hp", 1000, 1, 10000000);
BMP_2_HP = builder.defineInRange("bmp_2_hp", 300, 1, 10000000);
builder.comment("The energy cost of Bmp_2 per tick");
BMP_2_ENERGY_COST = builder.defineInRange("bmp_2_energy_cost", 64, 0, 2147483647);
@ -226,7 +226,7 @@ public class VehicleConfig {
BMP_2_CANNON_EXPLOSION_DAMAGE = builder.defineInRange("bmp_2_cannon_explosion_damage", 15, 1, 10000000);
builder.comment("The rocket explosion radius of Bmp_2");
BMP_2_CANNON_EXPLOSION_RADIUS = builder.defineInRange("bmp_2_cannon_explosion_radius", 4d, 1d, 10000000d);
BMP_2_CANNON_EXPLOSION_RADIUS = builder.defineInRange("bmp_2_cannon_explosion_radius", 3.2d, 1d, 10000000d);
builder.pop();
}

View file

@ -197,7 +197,7 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
ModUtils.queueServerWork(1, () -> {
if (!level.isClientSide())
triggerExplode(target);
triggerExplode();
});
}
}
@ -241,10 +241,10 @@ public class ClaymoreEntity extends Entity implements GeoEntity, AnimatedEntity,
}
}
private void triggerExplode(Entity target) {
private void triggerExplode() {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeMineDamage(this.level().registryAccess(), this.getOwner()), 140f,
target.getX(), target.getY(), target.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
this.getX(), this.getEyeY(), this.getZ(), 4f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);

View file

@ -98,9 +98,9 @@ public class GunGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
}
if (entity instanceof Monster monster) {
monster.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), 1.2f * this.damage * damageMultiplier);
monster.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), 1.2f * this.damage * damageMultiplier);
} else {
entity.hurt(ModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), damage);
entity.hurt(ModDamageTypes.causeCannonFireDamage(this.level().registryAccess(), this, this.getOwner()), damage);
}
if (entity instanceof LivingEntity) {

View file

@ -263,9 +263,9 @@ public class JavelinMissileEntity extends ThrowableItemProjectile implements Geo
this,
this.getOwner()),
explosion_damage,
result.getLocation().x,
result.getLocation().y,
result.getLocation().z,
this.getX(),
this.getEyeY(),
this.getZ(),
explosion_radius,
ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).
setDamageMultiplier(this.monsterMultiplier);

View file

@ -113,7 +113,7 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti
public static void causeRgoExplode(ThrowableItemProjectile projectile, @Nullable DamageSource source, Entity entity, float damage, float radius, float damageMultiplier) {
CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, source, damage,
entity.getX(), entity.getY(), entity.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
projectile.getX(), projectile.getY(), projectile.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion);
explosion.finalizeExplosion(false);

View file

@ -178,7 +178,7 @@ public class RpgRocketEntity extends ThrowableItemProjectile implements GeoEntit
public static void causeRpgExplode(ThrowableItemProjectile projectile, @Nullable DamageSource source, Entity target, float damage, float radius, float damageMultiplier) {
CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, source, damage,
target.getX(), target.getY(), target.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
projectile.getX(), projectile.getY(), projectile.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion);
explosion.finalizeExplosion(false);

View file

@ -118,9 +118,9 @@ public class SmallCannonShellEntity extends ThrowableItemProjectile implements G
this,
this.getOwner()),
explosionDamage,
result.getLocation().x,
result.getLocation().y,
result.getLocation().z,
this.getX(),
this.getEyeY(),
this.getZ(),
explosionRadius,
ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).
setDamageMultiplier(1.25f);

View file

@ -27,6 +27,7 @@ import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
@ -130,23 +131,62 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
if (this.level() instanceof ServerLevel serverLevel) {
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 2.5, this.getZ(), 4, 0.2, 0.2, 0.2, 0.2, false);
}
if (source.is(DamageTypes.ARROW)) {
amount *= 0.1f;
}
if (source.is(DamageTypes.TRIDENT)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK_NO_AGGRO)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_PROJECTILE)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.PLAYER_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.LAVA)) {
amount *= 2f;
}
if (source.is(DamageTypes.EXPLOSION)) {
amount *= 3.5f;
}
if (source.is(DamageTypes.PLAYER_EXPLOSION)) {
amount *= 3.5f;
}
if (source.is(ModDamageTypes.CUSTOM_EXPLOSION)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 1f;
amount *= 0.5f;
}
if (source.is(ModDamageTypes.MINE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.LUNGE_MINE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 1.5f;
amount *= 0.6f;
}
if (source.is(ModDamageTypes.GUN_FIRE)) {
amount *= 0.3f;
if (source.is(ModTags.DamageTypes.PROJECTILE)) {
amount *= 0.08f;
}
if (source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)) {
amount *= 0.7f;
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
amount *= 4f;
amount *= 5f;
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.hurt(0.75f * Math.max(amount - 5, 0));
this.hurt(Math.max(amount - 2, 0));
return true;
}
@ -651,16 +691,6 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
return super.getDismountLocationForPassenger(passenger);
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.5f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.9f;
}
@Override
public boolean isDriver(Player player) {
return player == this.getFirstPassenger();

View file

@ -27,6 +27,7 @@ import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
@ -135,25 +136,64 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha
if (this.level() instanceof ServerLevel serverLevel) {
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 2.5, this.getZ(), 4, 0.2, 0.2, 0.2, 0.2, false);
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 1.2f;
if (source.is(DamageTypes.ARROW)) {
amount *= 0.1f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 2f;
if (source.is(DamageTypes.TRIDENT)) {
amount *= 0.1f;
}
if (source.is(ModDamageTypes.GUN_FIRE)) {
amount *= 0.2f;
}
if (source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)) {
if (source.is(DamageTypes.MOB_ATTACK)) {
amount *= 0.3f;
}
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
if (source.is(DamageTypes.MOB_ATTACK_NO_AGGRO)) {
amount *= 0.15f;
}
if (source.is(DamageTypes.MOB_PROJECTILE)) {
amount *= 0.15f;
}
if (source.is(DamageTypes.PLAYER_ATTACK)) {
amount *= 0.1f;
}
if (source.is(DamageTypes.LAVA)) {
amount *= 2.5f;
}
if (source.is(DamageTypes.EXPLOSION)) {
amount *= 2f;
}
if (source.is(DamageTypes.PLAYER_EXPLOSION)) {
amount *= 2f;
}
if (source.is(ModDamageTypes.CUSTOM_EXPLOSION)) {
amount *= 0.4f;
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 0.4f;
}
if (source.is(ModDamageTypes.MINE)) {
amount *= 0.14f;
}
if (source.is(ModDamageTypes.LUNGE_MINE)) {
amount *= 0.14f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 0.3f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE)) {
amount *= 0.02f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
amount *= 0.14f;
}
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
amount *= 1.7f;
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.hurt(0.5f * Math.max(amount - 13, 0));
this.hurt(Math.max(amount - 8, 0));
return true;
}
@ -434,12 +474,17 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha
if (backInputDown) {
this.entityData.set(POWER, Math.max(this.entityData.get(POWER) - (this.entityData.get(POWER) > 0 ? 0.016f : 0.0024f), -0.16f));
}
if (rightInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) - 0.1f);
} else if (this.leftInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) + 0.1f);
if (rightInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) + 0.1f);
} else if (this.leftInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) - 0.1f);
}
} else {
if (rightInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) - 0.1f);
} else if (this.leftInputDown) {
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) + 0.1f);
}
}
if (this.forwardInputDown || this.backInputDown) {
@ -461,8 +506,8 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha
this.setLeftWheelRot((float) ((this.getLeftWheelRot() - 1.25 * s0) + Mth.clamp(0.75f * this.entityData.get(DELTA_ROT), -5f, 5f)));
this.setRightWheelRot((float) ((this.getRightWheelRot() - 1.25 * s0) - Mth.clamp(0.75f * this.entityData.get(DELTA_ROT), -5f, 5f)));
this.entityData.set(TRACK_L, (float) ((entityData.get(TRACK_L) - 1.7 * Math.PI * s0) + Mth.clamp(0.75f * Math.PI * this.entityData.get(DELTA_ROT), -5f, 5f)));
this.entityData.set(TRACK_R, (float) ((entityData.get(TRACK_R) - 1.7 * Math.PI * s0) - Mth.clamp(0.75f * Math.PI * this.entityData.get(DELTA_ROT), -5f, 5f)));
this.entityData.set(TRACK_L, (float) ((entityData.get(TRACK_L) - 1.9 * Math.PI * s0) + Mth.clamp(0.4f * Math.PI * this.entityData.get(DELTA_ROT), -5f, 5f)));
this.entityData.set(TRACK_R, (float) ((entityData.get(TRACK_R) - 1.9 * Math.PI * s0) - Mth.clamp(0.4f * Math.PI * this.entityData.get(DELTA_ROT), -5f, 5f)));
if (this.isInWater() || onGround()) {
@ -662,16 +707,6 @@ public class Bmp2Entity extends ContainerMobileEntity implements GeoEntity, ICha
return this.cache;
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.9f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.9f;
}
@Override
public int getMaxEnergy() {
return MAX_ENERGY;

View file

@ -598,16 +598,6 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
return this.cache;
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return 0;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return 0;
}
@Override
public void onRemovedFromWorld() {
if (this.level() instanceof ServerLevel serverLevel) {

View file

@ -27,6 +27,7 @@ import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
@ -133,25 +134,62 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC
if (this.level() instanceof ServerLevel serverLevel) {
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 2.5, this.getZ(), 4, 0.2, 0.2, 0.2, 0.2, false);
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 1.5f;
if (source.is(DamageTypes.ARROW)) {
amount *= 0.1f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
if (source.is(DamageTypes.TRIDENT)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK_NO_AGGRO)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_PROJECTILE)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.PLAYER_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.LAVA)) {
amount *= 2.5f;
}
if (source.is(ModDamageTypes.GUN_FIRE)) {
if (source.is(DamageTypes.EXPLOSION)) {
amount *= 2f;
}
if (source.is(DamageTypes.PLAYER_EXPLOSION)) {
amount *= 2f;
}
if (source.is(ModDamageTypes.CUSTOM_EXPLOSION)) {
amount *= 0.4f;
}
if (source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)) {
amount *= 0.6f;
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 0.4f;
}
if (source.is(ModDamageTypes.MINE)) {
amount *= 0.15f;
}
if (source.is(ModDamageTypes.LUNGE_MINE)) {
amount *= 0.15f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 0.3f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE)) {
amount *= 0.05f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
amount *= 0.17f;
}
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
amount *= 0.7f;
amount *= 2f;
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.hurt(0.5f * Math.max(amount - 10, 0));
this.hurt(Math.max(amount - 7, 0));
return true;
}
@ -679,16 +717,6 @@ public class Lav150Entity extends ContainerMobileEntity implements GeoEntity, IC
return this.cache;
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.9f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.9f;
}
@Override
public int getMaxEnergy() {
return MAX_ENERGY;

View file

@ -86,10 +86,10 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
if ((verticalCollision)) {
if (this instanceof IHelicopterEntity) {
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (100 * ((lastTickSpeed - 0.3) * (lastTickSpeed - 0.3))));
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (20 * ((lastTickSpeed - 0.3) * (lastTickSpeed - 0.3))));
this.bounceVertical(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite());
} else if (Mth.abs((float) lastTickVerticalSpeed) > 0.6) {
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (240 * ((Mth.abs((float) lastTickVerticalSpeed) - 0.6) * (lastTickSpeed - 0.4) * (lastTickSpeed - 0.4))));
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (48 * ((Mth.abs((float) lastTickVerticalSpeed) - 0.6) * (lastTickSpeed - 0.4) * (lastTickSpeed - 0.4))));
if (!this.level().isClientSide) {
this.level().playSound(null, this, ModSounds.VEHICLE_STRIKE.get(), this.getSoundSource(), 1, 1);
}
@ -98,7 +98,7 @@ public class MobileVehicleEntity extends EnergyVehicleEntity {
}
if (this.horizontalCollision) {
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (180 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4))));
this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (36 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4))));
this.bounceHorizontal(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite());
if (!this.level().isClientSide) {
this.level().playSound(null, this, ModSounds.VEHICLE_STRIKE.get(), this.getSoundSource(), 1, 1);

View file

@ -25,6 +25,7 @@ import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.damagesource.DamageSource;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.LivingEntity;
@ -121,21 +122,62 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity,
if (this.level() instanceof ServerLevel serverLevel) {
sendParticle(serverLevel, ModParticleTypes.FIRE_STAR.get(), this.getX(), this.getY() + 2.5, this.getZ(), 4, 0.2, 0.2, 0.2, 0.2, false);
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
if (source.is(DamageTypes.ARROW)) {
amount *= 0.1f;
}
if (source.is(DamageTypes.TRIDENT)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_ATTACK_NO_AGGRO)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.MOB_PROJECTILE)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.PLAYER_ATTACK)) {
amount *= 0.2f;
}
if (source.is(DamageTypes.LAVA)) {
amount *= 2f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 3f;
if (source.is(DamageTypes.EXPLOSION)) {
amount *= 3.5f;
}
if (source.is(ModDamageTypes.GUN_FIRE)) {
amount *= 0.3f;
if (source.is(DamageTypes.PLAYER_EXPLOSION)) {
amount *= 3.5f;
}
if (source.is(ModDamageTypes.GUN_FIRE_ABSOLUTE)) {
amount *= 0.7f;
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.hurt(0.5f * Math.max(amount - 3, 0));
if (source.is(ModDamageTypes.CUSTOM_EXPLOSION)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.PROJECTILE_BOOM)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.MINE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.LUNGE_MINE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.CANNON_FIRE)) {
amount *= 0.6f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE)) {
amount *= 0.08f;
}
if (source.is(ModTags.DamageTypes.PROJECTILE_ABSOLUTE)) {
amount *= 0.5f;
}
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
amount *= 5f;
}
this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1);
this.hurt(Math.max(amount - 2, 0));
return true;
}
@ -230,7 +272,7 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity,
.headShot(2f)
.zoom(false);
projectile.bypassArmorRate(0.9f);
projectile.bypassArmorRate(1f);
projectile.setPos(this.xo - this.getViewVector(1).scale(0.54).x - this.getDeltaMovement().x, this.yo + 3.0, this.zo - this.getViewVector(1).scale(0.54).z - this.getDeltaMovement().z);
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + (zooming() ? 0.002f : -0.009f), player.getLookAngle().z, 20,
(float) 0.4);
@ -475,16 +517,6 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity,
return this.cache;
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.5f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.9f;
}
@Override
public int getMaxPassengers() {
return 5;

View file

@ -331,16 +331,6 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
this.discard();
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.2f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.3f;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
}

View file

@ -147,27 +147,18 @@ public class VehicleEntity extends Entity {
return false;
if (source.is(DamageTypes.DROWN))
return false;
if (source.is(DamageTypes.LIGHTNING_BOLT))
return false;
if (source.is(DamageTypes.FALLING_ANVIL))
return false;
if (source.is(DamageTypes.DRAGON_BREATH))
return false;
if (source.is(DamageTypes.WITHER))
return false;
if (source.is(DamageTypes.WITHER_SKULL))
return false;
if (source.is(DamageTypes.ON_FIRE))
return false;
if (source.is(DamageTypes.IN_FIRE))
return false;
if (source.is(ModDamageTypes.VEHICLE_STRIKE)) {
amount -= 20;
crash = true;
} else {
crash = false;
}
if (source.getEntity() != null) {
this.entityData.set(LAST_ATTACKER_UUID, source.getEntity().getStringUUID());
}
@ -323,14 +314,6 @@ public class VehicleEntity extends Entity {
public void travel() {
}
public float ignoreExplosionHorizontalKnockBack() {
return -1f;
}
public float ignoreExplosionVerticalKnockBack() {
return -1f;
}
// From Immersive_Aircraft
public Matrix4f getVehicleTransform() {
Matrix4f transform = new Matrix4f();

View file

@ -277,16 +277,6 @@ public class WheelChairEntity extends MobileVehicleEntity implements GeoEntity {
this.discard();
}
@Override
public float ignoreExplosionHorizontalKnockBack() {
return -0.2f;
}
@Override
public float ignoreExplosionVerticalKnockBack() {
return -0.3f;
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
}

View file

@ -200,12 +200,10 @@ public class CustomExplosion extends Explosion {
d11 = damagePercent;
}
xDistance *= d11;
yDistance *= d11;
zDistance *= d11;
if (entity instanceof VehicleEntity vehicle && !bullet) {
Vec3 knockbackVec = new Vec3(vehicle.ignoreExplosionHorizontalKnockBack() * xDistance, vehicle.ignoreExplosionVerticalKnockBack() * yDistance, vehicle.ignoreExplosionHorizontalKnockBack() * zDistance);
Vec3 knockbackVec = new Vec3(0, -0.2 * yDistance, 0);
vehicle.setDeltaMovement(vehicle.getDeltaMovement().add(knockbackVec));
}
}

View file

@ -13,7 +13,7 @@ public class ProjectileTool {
public static void causeCustomExplode(ThrowableItemProjectile projectile, @Nullable DamageSource source, Entity target, float damage, float radius, float damageMultiplier) {
CustomExplosion explosion = new CustomExplosion(projectile.level(), projectile, source, damage,
target.getX(), target.getY(), target.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
projectile.getX(), projectile.getEyeY(), projectile.getZ(), radius, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(damageMultiplier);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(projectile.level(), explosion);
explosion.finalizeExplosion(false);

View file

@ -8909,8 +8909,25 @@
{
"name": "trackL",
"parent": "root",
"pivot": [30, 24.43117, 54.91481],
"pivot": [30, 24.43117, 54.91481]
},
{
"name": "bone21",
"parent": "trackL",
"pivot": [30, 20.09532, -60.28029],
"cubes": [
{
"origin": [26.9, 20.70298, -61.02558],
"size": [6.2, 1.1, 6.4],
"pivot": [30, 20.27286, -60.10428],
"rotation": [45.25, 0, 0],
"uv": {
"east": {"uv": [93, 61], "uv_size": [-1, 1]},
"west": {"uv": [63, 92], "uv_size": [-1, 1]},
"up": {"uv": [84, 65], "uv_size": [2, -1]},
"down": {"uv": [84, 65], "uv_size": [2, 1]}
}
},
{
"origin": [26.9, 24.13117, -57.33519],
"size": [6.2, 1.1, 114.5],
@ -8948,9 +8965,9 @@
}
},
{
"origin": [26.9, 11.49318, 55.14941],
"size": [6.2, 1.1, 17.75],
"pivot": [30, 11.03655, 55.75669],
"origin": [26.9, 11.49316, 53.24941],
"size": [6.2, 1.1, 19.15],
"pivot": [30, 11.03653, 55.25669],
"rotation": [-147.75, 0, 0],
"uv": {
"east": {"uv": [92, 61], "uv_size": [1, 1]},
@ -8960,8 +8977,8 @@
}
},
{
"origin": [26.9, 2.58572, 40.8747],
"size": [6.2, 1.1, 83.25],
"origin": [26.9, 2.58572, 41.3747],
"size": [6.2, 1.1, 82.75],
"pivot": [30, 2.12908, 41.48198],
"rotation": [180, 0, 0],
"uv": {
@ -8973,7 +8990,7 @@
},
{
"origin": [26.9, 12.03349, 51.02174],
"size": [6.2, 1.1, 6.15],
"size": [6.2, 1.1, 5.15],
"pivot": [30, 11.60338, 56.50044],
"rotation": [-135.25, 0, 0],
"uv": {
@ -9018,18 +9035,6 @@
"up": {"uv": [84, 65], "uv_size": [2, -1]},
"down": {"uv": [84, 65], "uv_size": [2, 1]}
}
},
{
"origin": [26.9, 20.70298, -61.02558],
"size": [6.2, 1.1, 6.4],
"pivot": [30, 20.27286, -60.10428],
"rotation": [45.25, 0, 0],
"uv": {
"east": {"uv": [93, 61], "uv_size": [-1, 1]},
"west": {"uv": [63, 92], "uv_size": [-1, 1]},
"up": {"uv": [84, 65], "uv_size": [2, -1]},
"down": {"uv": [84, 65], "uv_size": [2, 1]}
}
}
]
},
@ -10339,10 +10344,22 @@
"pivot": [-30, 24.43117, 54.91481]
},
{
"name": "bone21",
"name": "bone45",
"parent": "trackR",
"pivot": [-30, 20.27286, -60.10428],
"pivot": [-30, 20.09532, -60.28029],
"cubes": [
{
"origin": [-33.1, 20.70298, -61.02558],
"size": [6.2, 1.1, 6.4],
"pivot": [-30, 20.27286, -60.10428],
"rotation": [45.25, 0, 0],
"uv": {
"east": {"uv": [62, 92], "uv_size": [1, 1]},
"west": {"uv": [92, 61], "uv_size": [1, 1]},
"up": {"uv": [86, 65], "uv_size": [-2, -1]},
"down": {"uv": [86, 65], "uv_size": [-2, 1]}
}
},
{
"origin": [-33.1, 24.13117, -57.33519],
"size": [6.2, 1.1, 114.5],
@ -10380,9 +10397,9 @@
}
},
{
"origin": [-33.1, 11.49318, 55.14941],
"size": [6.2, 1.1, 17.75],
"pivot": [-30, 11.03655, 55.75669],
"origin": [-33.1, 11.49316, 53.24941],
"size": [6.2, 1.1, 19.15],
"pivot": [-30, 11.03653, 55.25669],
"rotation": [-147.75, 0, 0],
"uv": {
"east": {"uv": [63, 92], "uv_size": [-1, 1]},
@ -10392,8 +10409,8 @@
}
},
{
"origin": [-33.1, 2.58572, 40.8747],
"size": [6.2, 1.1, 83.25],
"origin": [-33.1, 2.58572, 41.3747],
"size": [6.2, 1.1, 82.75],
"pivot": [-30, 2.12908, 41.48198],
"rotation": [180, 0, 0],
"uv": {
@ -10405,7 +10422,7 @@
},
{
"origin": [-33.1, 12.03349, 51.02174],
"size": [6.2, 1.1, 6.15],
"size": [6.2, 1.1, 5.15],
"pivot": [-30, 11.60338, 56.50044],
"rotation": [-135.25, 0, 0],
"uv": {
@ -10450,18 +10467,6 @@
"up": {"uv": [86, 65], "uv_size": [-2, -1]},
"down": {"uv": [86, 65], "uv_size": [-2, 1]}
}
},
{
"origin": [-33.1, 20.70298, -61.02558],
"size": [6.2, 1.1, 6.4],
"pivot": [-30, 20.27286, -60.10428],
"rotation": [45.25, 0, 0],
"uv": {
"east": {"uv": [62, 92], "uv_size": [1, 1]},
"west": {"uv": [92, 61], "uv_size": [1, 1]},
"up": {"uv": [86, 65], "uv_size": [-2, -1]},
"down": {"uv": [86, 65], "uv_size": [-2, 1]}
}
}
]
},

View file

@ -4,7 +4,7 @@
"Magazine": 1,
"Weight": 10,
"EmptyReloadTime": 78,
"Damage": 300,
"ExplosionDamage": 100,
"ExplosionRadius": 6
"Damage": 450,
"ExplosionDamage": 50,
"ExplosionRadius": 4
}

View file

@ -2,9 +2,9 @@
"Spread": 5,
"RecoilX": 0.008,
"RecoilY": 0.018,
"Damage": 200,
"ExplosionDamage": 150,
"ExplosionRadius": 10,
"Damage": 250,
"ExplosionDamage": 130,
"ExplosionRadius": 7,
"Velocity": 4,
"Magazine": 1,
"Weight": 7,

View file

@ -2,9 +2,9 @@
"Spread": 1.5,
"RecoilX": 0.004,
"RecoilY": 0.023,
"Damage": 50,
"Damage": 30,
"ExplosionDamage": 50,
"ExplosionRadius": 7,
"ExplosionRadius": 5,
"Velocity": 3.75,
"Magazine": 8,
"Weight": 9,