应用载具perk
This commit is contained in:
parent
810ccd64f3
commit
ef42cf72ce
4 changed files with 62 additions and 5 deletions
|
@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.item.PerkItem;
|
|||
import com.atsuishio.superbwarfare.menu.VehicleMenu;
|
||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
|
||||
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||
|
@ -37,6 +38,8 @@ import net.minecraft.world.InteractionHand;
|
|||
import net.minecraft.world.InteractionResult;
|
||||
import net.minecraft.world.damagesource.DamageSource;
|
||||
import net.minecraft.world.damagesource.DamageTypes;
|
||||
import net.minecraft.world.effect.MobEffect;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import net.minecraft.world.entity.*;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.entity.player.Inventory;
|
||||
|
@ -76,6 +79,7 @@ import software.bernie.geckolib.core.animation.RawAnimation;
|
|||
import software.bernie.geckolib.core.object.PlayState;
|
||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -378,6 +382,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
|||
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)
|
||||
.damage(CannonConfig.SPEEDBOAT_GUN_DAMAGE.get())
|
||||
|
@ -390,6 +395,43 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
|||
(float) 0.4);
|
||||
this.level().addFreshEntity(projectile);
|
||||
|
||||
if (this.getItemStacks().size() > 102) {
|
||||
ItemStack perkItem = this.getItemStacks().get(102);
|
||||
if (perkItem.getItem() instanceof PerkItem perk) {
|
||||
if (perk.getPerk() == ModPerks.SILVER_BULLET.get()) {
|
||||
projectile.undeadMultiple(2.5f);
|
||||
} else if (perk.getPerk() == ModPerks.BEAST_BULLET.get()) {
|
||||
projectile.beast();
|
||||
} else if (perk.getPerk() == ModPerks.JHP_BULLET.get()) {
|
||||
projectile.jhpBullet(true, 3);
|
||||
} else if (perk.getPerk() == ModPerks.HE_BULLET.get()) {
|
||||
projectile.heBullet(true, 3);
|
||||
} else if (perk.getPerk() == ModPerks.INCENDIARY_BULLET.get()) {
|
||||
projectile.fireBullet(true, 3, false);
|
||||
}
|
||||
|
||||
if (perk.getPerk() instanceof AmmoPerk ammoPerk) {
|
||||
projectile.setRGB(ammoPerk.rgb);
|
||||
if (!ammoPerk.mobEffects.get().isEmpty()) {
|
||||
ArrayList<MobEffectInstance> mobEffectInstances = new ArrayList<>();
|
||||
for (MobEffect effect : ammoPerk.mobEffects.get()) {
|
||||
mobEffectInstances.add(new MobEffectInstance(effect, 160, 2));
|
||||
}
|
||||
projectile.effect(mobEffectInstances);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (this.getItemStacks().size() > 104) {
|
||||
ItemStack perkItem = this.getItemStacks().get(104);
|
||||
if (perkItem.getItem() instanceof PerkItem perk) {
|
||||
if (perk.getPerk() == ModPerks.MONSTER_HUNTER.get()) {
|
||||
projectile.monsterMultiple(0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float pitch = this.entityData.get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * java.lang.Math.abs(60 - this.entityData.get(HEAT)));
|
||||
|
||||
if (player instanceof ServerPlayer serverPlayer) {
|
||||
|
@ -775,9 +817,9 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
|||
case VehicleMenu.DEFAULT_AMMO_PERK_SLOT ->
|
||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.AMMO;
|
||||
case VehicleMenu.DEFAULT_FUNC_PERK_SLOT ->
|
||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.FUNCTIONAL;
|
||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.FUNCTIONAL && perkItem.getPerk() == ModPerks.POWERFUL_ATTRACTION.get();
|
||||
case VehicleMenu.DEFAULT_DAMAGE_PERK_SLOT ->
|
||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.DAMAGE;
|
||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.DAMAGE && perkItem.getPerk() == ModPerks.MONSTER_HUNTER.get();
|
||||
default -> true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -713,6 +713,20 @@ public class LivingEventHandler {
|
|||
if (!(sourceEntity instanceof Player player)) return;
|
||||
ItemStack stack = player.getMainHandItem();
|
||||
|
||||
if (sourceEntity.getVehicle() instanceof IVehicleEntity vehicle && DamageTypeTool.isGunDamage(source) && !stack.is(ModTags.Items.GUN)) {
|
||||
var drops = event.getDrops();
|
||||
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 (sourceEntity.getVehicle() instanceof IVehicleEntity vehicle && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
|
||||
var drops = event.getDrops();
|
||||
if (vehicle instanceof ContainerEntity containerEntity) {
|
||||
|
|
|
@ -57,7 +57,7 @@ public class ModVillagers {
|
|||
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));
|
||||
new ItemStack(ModItems.HEAVY_AMMO.get(), 2), 32, 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));
|
||||
|
@ -68,7 +68,7 @@ public class ModVillagers {
|
|||
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));
|
||||
new ItemStack(Items.EMERALD, 1), 64, 2, 0.05f));
|
||||
|
||||
// 等级 2 交易
|
||||
trades.get(2).add(new BasicItemListing(new ItemStack(Items.EMERALD, 10),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.atsuishio.superbwarfare.menu;
|
||||
|
||||
import com.atsuishio.superbwarfare.init.ModMenuTypes;
|
||||
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||
import com.atsuishio.superbwarfare.item.PerkItem;
|
||||
import com.atsuishio.superbwarfare.perk.Perk;
|
||||
import net.minecraft.world.Container;
|
||||
|
@ -106,7 +107,7 @@ public class VehicleMenu extends AbstractContainerMenu {
|
|||
|
||||
@Override
|
||||
public boolean mayPlace(ItemStack pStack) {
|
||||
return pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == type;
|
||||
return pStack.getItem() instanceof PerkItem perkItem && (perkItem.getPerk().type == Perk.Type.AMMO || perkItem.getPerk() == ModPerks.POWERFUL_ATTRACTION.get() || perkItem.getPerk() == ModPerks.MONSTER_HUNTER.get());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Add table
Reference in a new issue