添加重型弹药的村民交易,撞击伤害产生的经验和掉落物(待优化)直接添加到玩家
This commit is contained in:
parent
f68ae8ba7b
commit
ee36a54567
3 changed files with 44 additions and 25 deletions
|
@ -348,8 +348,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
|||
collideBlock();
|
||||
gunnerAngle();
|
||||
gunnerFire();
|
||||
|
||||
// attractEntity();
|
||||
pickUpItem();
|
||||
|
||||
this.refreshDimensions();
|
||||
}
|
||||
|
@ -593,26 +592,22 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
|||
}
|
||||
}
|
||||
|
||||
// public boolean hasEnoughSpaceFor(Entity pEntity) {
|
||||
// return pEntity.getBbWidth() < this.getBbWidth();
|
||||
// }
|
||||
//
|
||||
// public void attractEntity() {
|
||||
// List<Entity> list = this.level().getEntities(this, this.getBoundingBox().inflate(0.2F, -0.01F, 0.2F), EntitySelector.pushableBy(this));
|
||||
|
||||
public void pickUpItem() {
|
||||
// List<Entity> list = this.level().getEntities(this, this.getBoundingBox().inflate(0.2F, 0.1, 0.2F));
|
||||
// if (!list.isEmpty()) {
|
||||
// boolean flag = !this.level().isClientSide && !(this.getControllingPassenger() instanceof Player);
|
||||
//
|
||||
// for (Entity entity : list) {
|
||||
// if (!entity.hasPassenger(this)) {
|
||||
// if (flag && this.getPassengers().size() < this.getMaxPassengers() && !entity.isPassenger() && this.hasEnoughSpaceFor(entity) && entity instanceof LivingEntity && !(entity instanceof WaterAnimal) && !(entity instanceof Player)) {
|
||||
// entity.startRiding(this);
|
||||
// } else {
|
||||
// this.push(entity);
|
||||
// }
|
||||
// if (!this.level().isClientSide && entity instanceof ItemEntity itemEntity) {
|
||||
// ItemStack itemStack = itemEntity.getItem();
|
||||
// boolean flag = !this.level().isClientSide;
|
||||
//
|
||||
// this.getItemStacks().add(itemStack);
|
||||
// itemEntity.discard();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
public static double calculateAngle(Vec3 move, Vec3 view) {
|
||||
move = move.multiply(1, 0, 1).normalize();
|
||||
|
|
|
@ -710,9 +710,10 @@ public class LivingEventHandler {
|
|||
Entity sourceEntity = source.getEntity();
|
||||
if (!(sourceEntity instanceof Player player)) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
|
||||
if (PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) {
|
||||
//TODO 将撞击致死产生掉落物添加到载具储存空间而不是直接加到玩家身上
|
||||
|
||||
if (sourceEntity.getVehicle() instanceof IVehicleEntity && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
|
||||
var drops = event.getDrops();
|
||||
drops.forEach(itemEntity -> {
|
||||
ItemStack item = itemEntity.getItem();
|
||||
|
@ -720,7 +721,17 @@ public class LivingEventHandler {
|
|||
player.drop(item, false);
|
||||
}
|
||||
});
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
if (stack.is(ModTags.Items.GUN) && PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack) > 0) {
|
||||
var drops = event.getDrops();
|
||||
drops.forEach(itemEntity -> {
|
||||
ItemStack item = itemEntity.getItem();
|
||||
if (!player.addItem(item)) {
|
||||
player.drop(item, false);
|
||||
}
|
||||
});
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
|
@ -729,15 +740,22 @@ public class LivingEventHandler {
|
|||
public static void onLivingExperienceDrop(LivingExperienceDropEvent event) {
|
||||
Player player = event.getAttackingPlayer();
|
||||
if (player == null) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (!stack.is(ModTags.Items.GUN)) return;
|
||||
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack);
|
||||
if (level > 0) {
|
||||
player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
|
||||
DamageSource source = event.getAttackingPlayer().getLastDamageSource();
|
||||
if (source == null) return;
|
||||
|
||||
if (player.getVehicle() instanceof IVehicleEntity && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
|
||||
player.giveExperiencePoints(event.getDroppedExperience());
|
||||
event.setCanceled(true);
|
||||
}
|
||||
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
if (stack.is(ModTags.Items.GUN)) {
|
||||
int level = PerkHelper.getItemPerkLevel(ModPerks.POWERFUL_ATTRACTION.get(), stack);
|
||||
if (level > 0) {
|
||||
player.giveExperiencePoints((int) (event.getDroppedExperience() * (0.8f + 0.2f * level)));
|
||||
event.setCanceled(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void handlePlayerBeamReset(Player player) {
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
package com.atsuishio.superbwarfare.init;
|
||||
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
|
||||
import com.atsuishio.superbwarfare.ModUtils;
|
||||
import net.minecraft.core.Holder;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.entity.ai.village.poi.PoiType;
|
||||
|
@ -56,6 +56,8 @@ public class ModVillagers {
|
|||
new ItemStack(ModItems.SNIPER_AMMO.get(), 2), 16, 1, 0.05f));
|
||||
trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1),
|
||||
new ItemStack(ModItems.SHOTGUN_AMMO.get(), 2), 16, 1, 0.05f));
|
||||
trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1),
|
||||
new ItemStack(ModItems.HEAVY_AMMO.get(), 2), 16, 1, 0.05f));
|
||||
|
||||
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HANDGUN_AMMO.get(), 8),
|
||||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
||||
|
@ -65,6 +67,8 @@ public class ModVillagers {
|
|||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
||||
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SHOTGUN_AMMO.get(), 4),
|
||||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
||||
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HEAVY_AMMO.get(), 4),
|
||||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
||||
|
||||
// 等级 2 交易
|
||||
trades.get(2).add(new BasicItemListing(new ItemStack(Items.EMERALD, 10),
|
||||
|
@ -204,6 +208,8 @@ public class ModVillagers {
|
|||
new ItemStack(ModItems.DEVOTION_BLUEPRINT.get()), 10, 30, 0.05f));
|
||||
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 64),
|
||||
new ItemStack(ModItems.QBZ_95_BLUEPRINT.get()), 10, 30, 0.05f));
|
||||
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 64),
|
||||
new ItemStack(ModItems.AK_12_BLUEPRINT.get()), 10, 30, 0.05f));
|
||||
|
||||
trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 16),
|
||||
new ItemStack(ModItems.HE_5_INCHES.get(), 1), 8, 10, 0.05f));
|
||||
|
|
Loading…
Add table
Reference in a new issue