添加快艇物品吸取功能

This commit is contained in:
17146 2024-12-19 15:15:30 +08:00
parent 01c90f1b47
commit b806cf6c0d
2 changed files with 17 additions and 14 deletions

View file

@ -371,7 +371,8 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
if (driver == null) return; if (driver == null) return;
if (driver instanceof Player player && !(player.getMainHandItem().is(ModTags.Items.GUN))) { 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) { if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).holdFire) {
ProjectileEntity projectile = new ProjectileEntity(driver.level()) ProjectileEntity projectile = new ProjectileEntity(driver.level())
.shooter(player) .shooter(player)
@ -682,7 +683,6 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
this.clampRotation(entity); this.clampRotation(entity);
} }
private PlayState firePredicate(AnimationState<SpeedboatEntity> event) { private PlayState firePredicate(AnimationState<SpeedboatEntity> event) {
if (this.entityData.get(COOL_DOWN) > 1 && !cannotFire) { if (this.entityData.get(COOL_DOWN) > 1 && !cannotFire) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.speedboat.fire")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.speedboat.fire"));
@ -846,7 +846,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
@Override @Override
public int getMaxEnergy() { public int getMaxEnergy() {
return (int)MAX_ENERGY; return (int) MAX_ENERGY;
} }
@Override @Override
@ -856,6 +856,6 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
@Override @Override
public float getMaxHealth() { public float getMaxHealth() {
return (int)MAX_HEALTH; return (int) MAX_HEALTH;
} }
} }

View file

@ -37,8 +37,10 @@ import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.entity.projectile.Projectile;
import net.minecraft.world.entity.vehicle.ContainerEntity;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameRules; import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.block.entity.HopperBlockEntity;
import net.minecraftforge.event.entity.living.*; import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
@ -711,17 +713,18 @@ public class LivingEventHandler {
if (!(sourceEntity instanceof Player player)) return; if (!(sourceEntity instanceof Player player)) return;
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
//TODO 将撞击致死产生掉落物添加到载具储存空间而不是直接加到玩家身上 if (sourceEntity.getVehicle() instanceof IVehicleEntity vehicle && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
if (sourceEntity.getVehicle() instanceof IVehicleEntity && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
var drops = event.getDrops(); var drops = event.getDrops();
drops.forEach(itemEntity -> { if (vehicle instanceof ContainerEntity containerEntity) {
ItemStack item = itemEntity.getItem(); drops.forEach(itemEntity -> {
if (!player.addItem(item)) { ItemStack item = itemEntity.getItem();
player.drop(item, false); if (!HopperBlockEntity.addItem(containerEntity, itemEntity)) {
} player.drop(item, false);
}); }
event.setCanceled(true); });
event.setCanceled(true);
return;
}
} }
if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) { if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) {