添加了强力吸引perk

This commit is contained in:
17146 2024-11-21 12:24:18 +08:00
parent 085cd68344
commit f09c50fcf0
5 changed files with 53 additions and 10 deletions

View file

@ -35,9 +35,7 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.entity.projectile.Projectile;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameRules;
import net.minecraftforge.event.entity.living.LivingDeathEvent;
import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.event.entity.living.*;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.network.PacketDistributor;
@ -643,4 +641,41 @@ public class LivingEventHandler {
}
}
}
@SubscribeEvent
public static void onLivingDrops(LivingDropsEvent event) {
DamageSource source = event.getSource();
if (source == null) return;
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) {
var drops = event.getDrops();
drops.forEach(itemEntity -> {
ItemStack item = itemEntity.getItem();
if (!player.addItem(item)) {
player.drop(item, false);
}
});
event.setCanceled(true);
}
}
@SubscribeEvent
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)));
event.setCanceled(true);
}
}
}

View file

@ -56,6 +56,7 @@ public class ModPerks {
public static final RegistryObject<Perk> FIELD_DOCTOR = FUNC_PERKS.register("field_doctor", () -> new Perk("field_doctor", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> SUPER_RECHARGE = FUNC_PERKS.register("super_recharge", () -> new Perk("super_recharge", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> TURBO_CHARGER = FUNC_PERKS.register("turbo_charger", () -> new Perk("turbo_charger", Perk.Type.FUNCTIONAL));
public static final RegistryObject<Perk> POWERFUL_ATTRACTION = FUNC_PERKS.register("powerful_attraction", () -> new Perk("powerful_attraction", Perk.Type.FUNCTIONAL));
/**
* Damage Perks

View file

@ -185,7 +185,7 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.SUBSISTENCE.get();
return perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get();
@ -203,7 +203,8 @@ public class PerkHelper {
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() ||
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get();
perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() ||
perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||
@ -221,7 +222,8 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() || perk == ModPerks.SUBSISTENCE.get();
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() ||
perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get();
@ -238,7 +240,7 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get();
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get();
@ -255,7 +257,8 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get();
return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() ||
perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||
@ -273,7 +276,7 @@ public class PerkHelper {
return true;
}
case FUNCTIONAL -> {
return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get();
return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get();
}
case DAMAGE -> {
return perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get();

View file

@ -261,7 +261,9 @@
"item.superbwarfare.super_recharge": "Super Recharge",
"des.superbwarfare.super_recharge": "Increases the recharge speed of Taser Gun",
"item.superbwarfare.turbo_charger": "Turbocharger",
"des.superbwarfare.turbo_charger": "Reduces autofire spin-up time for compatible weapons.",
"des.superbwarfare.turbo_charger": "Reduces auto fire spin-up time for compatible weapons",
"item.superbwarfare.powerful_attraction": "Powerful Attraction",
"des.superbwarfare.powerful_attraction": "Transfer items and experience dropped by killed targets to your inventory",
"item.superbwarfare.kill_clip": "Kill Clip",
"des.superbwarfare.kill_clip": "Increases the damage of weapon after dealing a final blow",

View file

@ -262,6 +262,8 @@
"des.superbwarfare.super_recharge": "增加泰瑟枪充能的速度",
"item.superbwarfare.turbo_charger": "涡轮增压器",
"des.superbwarfare.turbo_charger": "装配后减少武器自动射击所需的缓冲时间",
"item.superbwarfare.powerful_attraction": "强力吸引",
"des.superbwarfare.powerful_attraction": "击杀目标后掉落的物品和经验会直接转移到自身",
"item.superbwarfare.kill_clip": "杀戮弹匣",
"des.superbwarfare.kill_clip": "完成击杀后填装可提升武器伤害",