diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index 8050f4ac1..3d66fefc0 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -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); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java index 0606610e4..b84454655 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java @@ -56,6 +56,7 @@ public class ModPerks { public static final RegistryObject FIELD_DOCTOR = FUNC_PERKS.register("field_doctor", () -> new Perk("field_doctor", Perk.Type.FUNCTIONAL)); public static final RegistryObject SUPER_RECHARGE = FUNC_PERKS.register("super_recharge", () -> new Perk("super_recharge", Perk.Type.FUNCTIONAL)); public static final RegistryObject TURBO_CHARGER = FUNC_PERKS.register("turbo_charger", () -> new Perk("turbo_charger", Perk.Type.FUNCTIONAL)); + public static final RegistryObject POWERFUL_ATTRACTION = FUNC_PERKS.register("powerful_attraction", () -> new Perk("powerful_attraction", Perk.Type.FUNCTIONAL)); /** * Damage Perks diff --git a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java index ab27241d3..3b8704165 100644 --- a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java @@ -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(); diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index abbb5c1e0..ec34322b7 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -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", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 3a29f76cf..648e8778a 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -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": "完成击杀后填装可提升武器伤害",