From b806cf6c0dbab4a5d82c2332f377dbe6197ef6bc Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 19 Dec 2024 15:15:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BF=AB=E8=89=87=E7=89=A9?= =?UTF-8?q?=E5=93=81=E5=90=B8=E5=8F=96=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/entity/SpeedboatEntity.java | 8 +++---- .../event/LivingEventHandler.java | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index 272e9d804..697e26dd8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -371,7 +371,8 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, if (driver == null) return; if (driver instanceof Player player && !(player.getMainHandItem().is(ModTags.Items.GUN))) { - if (this.getItemStacks().stream().noneMatch(stack -> stack.is(ModItems.HEAVY_AMMO.get())) && !player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()))) return; + if (this.getItemStacks().stream().noneMatch(stack -> stack.is(ModItems.HEAVY_AMMO.get())) && !player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get()))) + return; if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).holdFire) { ProjectileEntity projectile = new ProjectileEntity(driver.level()) .shooter(player) @@ -682,7 +683,6 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, this.clampRotation(entity); } - private PlayState firePredicate(AnimationState event) { if (this.entityData.get(COOL_DOWN) > 1 && !cannotFire) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.speedboat.fire")); @@ -846,7 +846,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, @Override public int getMaxEnergy() { - return (int)MAX_ENERGY; + return (int) MAX_ENERGY; } @Override @@ -856,6 +856,6 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, @Override public float getMaxHealth() { - return (int)MAX_HEALTH; + return (int) MAX_HEALTH; } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index 80b9a5383..c04304bc9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -37,8 +37,10 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.Projectile; +import net.minecraft.world.entity.vehicle.ContainerEntity; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.GameRules; +import net.minecraft.world.level.block.entity.HopperBlockEntity; import net.minecraftforge.event.entity.living.*; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; @@ -711,17 +713,18 @@ public class LivingEventHandler { if (!(sourceEntity instanceof Player player)) return; ItemStack stack = player.getMainHandItem(); - //TODO 将撞击致死产生掉落物添加到载具储存空间而不是直接加到玩家身上 - - if (sourceEntity.getVehicle() instanceof IVehicleEntity && source.is(ModDamageTypes.VEHICLE_STRIKE)) { + if (sourceEntity.getVehicle() instanceof IVehicleEntity vehicle && source.is(ModDamageTypes.VEHICLE_STRIKE)) { var drops = event.getDrops(); - drops.forEach(itemEntity -> { - ItemStack item = itemEntity.getItem(); - if (!player.addItem(item)) { - player.drop(item, false); - } - }); - event.setCanceled(true); + if (vehicle instanceof ContainerEntity containerEntity) { + drops.forEach(itemEntity -> { + ItemStack item = itemEntity.getItem(); + if (!HopperBlockEntity.addItem(containerEntity, itemEntity)) { + player.drop(item, false); + } + }); + event.setCanceled(true); + return; + } } if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) {