diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/MobileVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/MobileVehicleEntity.java index ba72dd35d..c8626a5a7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/MobileVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/MobileVehicleEntity.java @@ -75,7 +75,7 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { collisionCoolDown = 4; } - if ((horizontalCollision)) { + if (this.horizontalCollision) { this.bounceHorizontal(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite()); this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (160 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4)))); if (!this.level().isClientSide) { @@ -83,9 +83,11 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { } } - if ((verticalCollision)) { + // TODO bug修复:本方法会在速度到达一定程度且乘客不为空时,持续对自身造成伤害 + if (this.verticalCollision) { this.bounceVertical(Direction.getNearest(this.getDeltaMovement().x(), this.getDeltaMovement().y(), this.getDeltaMovement().z()).getOpposite()); - this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (100 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4)))); + this.hurt(ModDamageTypes.causeVehicleStrikeDamage(this.level().registryAccess(), this, + this.getFirstPassenger() == null ? this : this.getFirstPassenger()), (float) (100 * ((lastTickSpeed - 0.4) * (lastTickSpeed - 0.4)))); if (!this.level().isClientSide) { this.level().playSound(null, this, ModSounds.VEHICLE_STRIKE.get(), this.getSoundSource(), 1, 1); } @@ -102,10 +104,11 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { break; } } + private void bounceVertical(Direction direction) { - if (direction.getAxis() == Direction.Axis.Y) { - this.setDeltaMovement(this.getDeltaMovement().multiply(0.9, -0.8, 0.9)); - } + if (direction.getAxis() == Direction.Axis.Y) { + this.setDeltaMovement(this.getDeltaMovement().multiply(0.9, -0.8, 0.9)); + } } /** diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java index 1791123be..563bdffa1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/VehicleEntity.java @@ -168,7 +168,7 @@ public class VehicleEntity extends Entity { if (source.is(DamageTypes.IN_FIRE)) return false; if (source.is(ModDamageTypes.VEHICLE_STRIKE)) - amount-= 20; + amount -= 20; if (source.getEntity() != null) { this.entityData.set(LAST_ATTACKER_UUID, source.getEntity().getStringUUID()); } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/EntityFindUtil.java b/src/main/java/com/atsuishio/superbwarfare/tools/EntityFindUtil.java index c8de8171c..013e11bb6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/EntityFindUtil.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/EntityFindUtil.java @@ -11,6 +11,7 @@ import net.minecraft.world.level.entity.LevelEntityGetter; import java.util.UUID; public class EntityFindUtil { + /** * 获取世界里的所有实体,对ClientLevel和ServerLevel均有效 *