diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java index c8d80e8f6..8c84e066e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/MobileVehicleEntity.java @@ -85,23 +85,37 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { crushEntities(this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().add(0.0, -0.06, 0.0)); this.move(MoverType.SELF, this.getDeltaMovement()); + collideLilyPadBlock(); this.refreshDimensions(); } + public void collideLilyPadBlock() { + if (level() instanceof ServerLevel) { + AABB aabb = getBoundingBox().inflate(0.05).move(this.getDeltaMovement().scale(0.6)); + BlockPos.betweenClosedStream(aabb).forEach((pos) -> { + BlockState blockstate = this.level().getBlockState(pos); + if (blockstate.is(Blocks.LILY_PAD)) { + this.level().destroyBlock(pos, true); + } + }); + } + } + public void collideBlock() { if (level() instanceof ServerLevel) { if (!VehicleConfig.COLLISION_DESTROY_BLOCKS.get()) return; - AABB aabb = getBoundingBox().inflate(0.1).move(this.getDeltaMovement().scale(0.6)); + AABB aabb = getBoundingBox().move(this.getDeltaMovement().scale(0.6)); BlockPos.betweenClosedStream(aabb).forEach((pos) -> { BlockState blockstate = this.level().getBlockState(pos); - if (blockstate.is(Blocks.LILY_PAD) || blockstate.is(Blocks.CACTUS) + if (blockstate.is(Blocks.CACTUS) || blockstate.is(BlockTags.LEAVES) || blockstate.is(BlockTags.FENCES) || blockstate.is(BlockTags.FENCE_GATES) || blockstate.is(BlockTags.DOORS) || blockstate.is(BlockTags.TRAPDOORS) || blockstate.is(Blocks.BAMBOO) || blockstate.is(Blocks.MELON) || blockstate.is(Blocks.PUMPKIN) || blockstate.is(Blocks.HAY_BLOCK) || blockstate.is(Blocks.BELL) - || blockstate.is(BlockTags.WALLS) || blockstate.is(Blocks.CHAIN)) { + || blockstate.is(BlockTags.WALLS) || blockstate.is(Blocks.CHAIN) + || blockstate.is(Blocks.SNOW_BLOCK)) { this.level().destroyBlock(pos, true); this.setDeltaMovement(this.getDeltaMovement().scale(0.96)); } @@ -113,11 +127,13 @@ public class MobileVehicleEntity extends EnergyVehicleEntity { if (level() instanceof ServerLevel) { if (!VehicleConfig.COLLISION_DESTROY_HARD_BLOCKS.get()) return; - AABB aabb = getBoundingBox().inflate(0.1).move(this.getDeltaMovement().scale(0.6)); + AABB aabb = getBoundingBox().move(this.getDeltaMovement().scale(0.6)); BlockPos.betweenClosedStream(aabb).forEach((pos) -> { BlockState blockstate = this.level().getBlockState(pos); if (blockstate.is(BlockTags.LOGS) || blockstate.is(BlockTags.PLANKS) - || blockstate.is(Tags.Blocks.GLASS) || blockstate.is(Tags.Blocks.GLASS_PANES)) { + || blockstate.is(Tags.Blocks.GLASS) || blockstate.is(Tags.Blocks.GLASS_PANES) + || blockstate.is(Blocks.ICE) || blockstate.is(Blocks.FROSTED_ICE) + || blockstate.is(Blocks.PACKED_ICE) || blockstate.is(Blocks.BLUE_ICE)) { this.level().destroyBlock(pos, true); this.setDeltaMovement(this.getDeltaMovement().scale(0.6)); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index 43d6d4f75..9c58809db 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -12,7 +12,6 @@ import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; -import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; @@ -35,8 +34,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; import net.minecraftforge.fluids.FluidType; @@ -245,9 +242,12 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity, sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, this.getX() - 4.5 * this.getLookAngle().x, this.getY() - 0.25, this.getZ() - 4.5 * this.getLookAngle().z, (int) (40 * Mth.abs(this.entityData.get(POWER))), 0.15, 0.15, 0.15, 0.02, true); } - collideBoatBlock(); gunnerAngle(); lowHealthWarning(); + collideBlock(); + if (this.getDeltaMovement().length() > 0.15) { + collideHardBlock(); + } this.refreshDimensions(); } @@ -304,20 +304,6 @@ public class SpeedboatEntity extends ContainerMobileEntity implements GeoEntity, this.getItemStacks().stream().filter(stack -> stack.is(ModItems.HEAVY_AMMO.get())).findFirst().ifPresent(stack -> stack.shrink(1)); } - - /** - * 撞掉莲叶和冰块 - */ - public void collideBoatBlock() { - AABB aabb = AABB.ofSize(new Vec3(this.getX(), this.getY() + this.getBbHeight() * 0.5, this.getZ()), 3.6, 2.6, 3.6); - BlockPos.betweenClosedStream(aabb).forEach((pos) -> { - BlockState blockstate = this.level().getBlockState(pos); - if (blockstate.is(Blocks.LILY_PAD) || blockstate.is(Blocks.ICE) || blockstate.is(Blocks.FROSTED_ICE)) { - this.level().destroyBlock(pos, true); - } - }); - } - @Override public void travel() { Entity passenger0 = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java index 3a407129d..dda675e3b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/VehicleEntity.java @@ -159,7 +159,7 @@ public class VehicleEntity extends Entity { if (source.is(DamageTypes.WITHER_SKULL)) return false; if (source.is(ModDamageTypes.VEHICLE_STRIKE)) { - amount -= 20; + amount -= 8; crash = true; } else { crash = false;