应用载具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.menu.VehicleMenu;
|
||||||
import com.atsuishio.superbwarfare.network.ModVariables;
|
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||||
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
|
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
|
||||||
|
import com.atsuishio.superbwarfare.perk.AmmoPerk;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||||
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
|
@ -37,6 +38,8 @@ import net.minecraft.world.InteractionHand;
|
||||||
import net.minecraft.world.InteractionResult;
|
import net.minecraft.world.InteractionResult;
|
||||||
import net.minecraft.world.damagesource.DamageSource;
|
import net.minecraft.world.damagesource.DamageSource;
|
||||||
import net.minecraft.world.damagesource.DamageTypes;
|
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.*;
|
||||||
import net.minecraft.world.entity.item.ItemEntity;
|
import net.minecraft.world.entity.item.ItemEntity;
|
||||||
import net.minecraft.world.entity.player.Inventory;
|
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.core.object.PlayState;
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
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())))
|
if (this.getItemStacks().stream().noneMatch(stack -> stack.is(ModItems.HEAVY_AMMO.get())) && !player.getInventory().hasAnyMatching(s -> s.is(ModItems.CREATIVE_AMMO_BOX.get())))
|
||||||
return;
|
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)
|
||||||
.damage(CannonConfig.SPEEDBOAT_GUN_DAMAGE.get())
|
.damage(CannonConfig.SPEEDBOAT_GUN_DAMAGE.get())
|
||||||
|
@ -390,6 +395,43 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
(float) 0.4);
|
(float) 0.4);
|
||||||
this.level().addFreshEntity(projectile);
|
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)));
|
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) {
|
if (player instanceof ServerPlayer serverPlayer) {
|
||||||
|
@ -775,9 +817,9 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
case VehicleMenu.DEFAULT_AMMO_PERK_SLOT ->
|
case VehicleMenu.DEFAULT_AMMO_PERK_SLOT ->
|
||||||
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.AMMO;
|
pStack.getItem() instanceof PerkItem perkItem && perkItem.getPerk().type == Perk.Type.AMMO;
|
||||||
case VehicleMenu.DEFAULT_FUNC_PERK_SLOT ->
|
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 ->
|
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;
|
default -> true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -713,6 +713,20 @@ public class LivingEventHandler {
|
||||||
if (!(sourceEntity instanceof Player player)) return;
|
if (!(sourceEntity instanceof Player player)) return;
|
||||||
ItemStack stack = player.getMainHandItem();
|
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)) {
|
if (sourceEntity.getVehicle() instanceof IVehicleEntity vehicle && source.is(ModDamageTypes.VEHICLE_STRIKE)) {
|
||||||
var drops = event.getDrops();
|
var drops = event.getDrops();
|
||||||
if (vehicle instanceof ContainerEntity containerEntity) {
|
if (vehicle instanceof ContainerEntity containerEntity) {
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class ModVillagers {
|
||||||
trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1),
|
trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1),
|
||||||
new ItemStack(ModItems.SHOTGUN_AMMO.get(), 2), 16, 1, 0.05f));
|
new ItemStack(ModItems.SHOTGUN_AMMO.get(), 2), 16, 1, 0.05f));
|
||||||
trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1),
|
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),
|
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HANDGUN_AMMO.get(), 8),
|
||||||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
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),
|
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SHOTGUN_AMMO.get(), 4),
|
||||||
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f));
|
||||||
trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HEAVY_AMMO.get(), 4),
|
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 交易
|
// 等级 2 交易
|
||||||
trades.get(2).add(new BasicItemListing(new ItemStack(Items.EMERALD, 10),
|
trades.get(2).add(new BasicItemListing(new ItemStack(Items.EMERALD, 10),
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.atsuishio.superbwarfare.menu;
|
package com.atsuishio.superbwarfare.menu;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.init.ModMenuTypes;
|
import com.atsuishio.superbwarfare.init.ModMenuTypes;
|
||||||
|
import com.atsuishio.superbwarfare.init.ModPerks;
|
||||||
import com.atsuishio.superbwarfare.item.PerkItem;
|
import com.atsuishio.superbwarfare.item.PerkItem;
|
||||||
import com.atsuishio.superbwarfare.perk.Perk;
|
import com.atsuishio.superbwarfare.perk.Perk;
|
||||||
import net.minecraft.world.Container;
|
import net.minecraft.world.Container;
|
||||||
|
@ -106,7 +107,7 @@ public class VehicleMenu extends AbstractContainerMenu {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean mayPlace(ItemStack pStack) {
|
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
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue