From d63aa2099121fad84d525349064ed2b79bf84452 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 22 Dec 2024 20:32:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E5=86=8C=E6=96=B0perk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/entity/SpeedboatEntity.java | 2 +- .../event/LivingEventHandler.java | 14 ++++++-- .../superbwarfare/init/ModPerks.java | 1 + .../superbwarfare/init/ModVillagers.java | 3 ++ .../superbwarfare/perk/PerkHelper.java | 33 ++++++++++--------- .../assets/superbwarfare/lang/en_us.json | 14 ++++---- .../assets/superbwarfare/lang/zh_cn.json | 8 ++--- 7 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index c65733403..d1b427da4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -243,7 +243,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, } this.level().playSound(null, this.getOnPos(), ModSounds.HIT.get(), SoundSource.PLAYERS, 1, 1); - this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * java.lang.Math.max(amount - 3, 0)); + this.entityData.set(HEALTH, this.entityData.get(HEALTH) - 0.5f * Math.max(amount - 3, 0)); return true; } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index b90c3b0d4..372860396 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -116,7 +116,7 @@ public class LivingEventHandler { ItemStack stack = sourceEntity instanceof LivingEntity living ? living.getMainHandItem() : ItemStack.EMPTY; var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); - //距离衰减 + // 距离衰减 if (DamageTypeTool.isGunDamage(source)) { double distance = entity.position().distanceTo(sourceEntity.position()); @@ -137,7 +137,7 @@ public class LivingEventHandler { } } - //计算防弹插板减伤 + // 计算防弹插板减伤 ItemStack armor = entity.getItemBySlot(EquipmentSlot.CHEST); if (armor != ItemStack.EMPTY && armor.getTag() != null && armor.getTag().contains("ArmorPlate")) { @@ -466,6 +466,7 @@ public class LivingEventHandler { if (DamageTypeTool.isGunDamage(source) || source.is(ModDamageTypes.PROJECTILE_BOOM)) { handleKillClipDamage(stack, event); + handleVorpalWeaponDamage(stack, event); } if (DamageTypeTool.isGunFireDamage(source) && source.getDirectEntity() instanceof ProjectileEntity projectile && projectile.isZoom()) { @@ -775,4 +776,13 @@ public class LivingEventHandler { public static void handlePlayerBeamReset(Player player) { player.getCapability(ModCapabilities.LASER_CAPABILITY).ifPresent(LaserCapability.ILaserCapability::end); } + + private static void handleVorpalWeaponDamage(ItemStack stack, LivingHurtEvent event) { + var entity = event.getEntity(); + int level = PerkHelper.getItemPerkLevel(ModPerks.VORPAL_WEAPON.get(), stack); + if (level <= 0) return; + if (entity.getMaxHealth() < 100.0f) return; + + event.setAmount(event.getAmount() * (1.15f + 0.05f * level)); + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java index f9aadbd85..0e069a708 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java @@ -71,6 +71,7 @@ public class ModPerks { public static final RegistryObject MONSTER_HUNTER = DAMAGE_PERKS.register("monster_hunter", () -> new Perk("monster_hunter", Perk.Type.DAMAGE)); public static final RegistryObject VOLT_OVERLOAD = DAMAGE_PERKS.register("volt_overload", () -> new Perk("volt_overload", Perk.Type.DAMAGE)); public static final RegistryObject DESPERADO = DAMAGE_PERKS.register("desperado", () -> new Perk("desperado", Perk.Type.DAMAGE)); + public static final RegistryObject VORPAL_WEAPON = DAMAGE_PERKS.register("vorpal_weapon", () -> new Perk("vorpal_weapon", Perk.Type.DAMAGE)); public static void registerCompatPerks() { if (ModList.get().isLoaded(CompatHolder.DMV)) { diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java index 4a241ae68..08f9b0f0a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java @@ -24,6 +24,7 @@ import java.util.List; @Mod.EventBusSubscriber(modid = ModUtils.MODID) public class ModVillagers { + public static final DeferredRegister POI_TYPES = DeferredRegister.create(ForgeRegistries.POI_TYPES, ModUtils.MODID); public static final DeferredRegister VILLAGER_PROFESSIONS = DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, ModUtils.MODID); @@ -185,6 +186,8 @@ public class ModVillagers { new ItemStack(getItemHolder("fourth_times_charm"), 1), 4, 15, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 48), new ItemStack(getItemHolder("monster_hunter"), 1), 4, 25, 0.05f)); + trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 40), + new ItemStack(getItemHolder("vorpal_weapon"), 1), 4, 25, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 64), new ItemStack(ModItems.HUNTING_RIFLE_BLUEPRINT.get()), 10, 30, 0.05f)); diff --git a/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java b/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java index e267b79f3..fcf169578 100644 --- a/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java @@ -186,10 +186,12 @@ public class PerkHelper { return !perk.descriptionId.equals("butterfly_bullet"); } case FUNCTIONAL -> { - return perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); + return perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.HEAL_CLIP.get() || + perk == ModPerks.FIELD_DOCTOR.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILL_CLIP.get(); + return perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILL_CLIP.get() || + perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -208,8 +210,8 @@ public class PerkHelper { perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || - perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get(); + return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || + perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get() || perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -228,7 +230,8 @@ public class PerkHelper { || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get(); + return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || + perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -246,7 +249,7 @@ public class PerkHelper { || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get(); + return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -260,13 +263,12 @@ public class PerkHelper { return true; } case FUNCTIONAL -> { - return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || - perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() - || perk == ModPerks.INTELLIGENT_CHIP.get(); + return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || + perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || - perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get(); + return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || perk == ModPerks.MONSTER_HUNTER.get() || + perk == ModPerks.HEAD_SEEKER.get() || perk == ModPerks.DESPERADO.get() || perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -280,11 +282,11 @@ public class PerkHelper { return true; } case FUNCTIONAL -> { - return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() - || perk == ModPerks.INTELLIGENT_CHIP.get(); + return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || + perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { - return perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get(); + return perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.KILLING_TALLY.get() || perk == ModPerks.VORPAL_WEAPON.get(); } default -> { return false; @@ -294,6 +296,7 @@ public class PerkHelper { public static final Predicate MAGAZINE_PERKS = perk -> false; - public static final Predicate LAUNCHER_PERKS = perk -> perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); + public static final Predicate LAUNCHER_PERKS = perk -> perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || + perk == ModPerks.INTELLIGENT_CHIP.get() || perk == ModPerks.VORPAL_WEAPON.get(); } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 8f6b73bf6..6d788aad5 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -292,11 +292,13 @@ "item.superbwarfare.head_seeker": "Head Seeker", "des.superbwarfare.head_seeker": "Body shots landed with this weapon increase precision damage for a short time", "item.superbwarfare.monster_hunter": "Monster Hunter", - "des.superbwarfare.monster_hunter": "Increases the damage of weapon against monsters", + "des.superbwarfare.monster_hunter": "Increases damage of weapon against monsters", "item.superbwarfare.volt_overload": "Volt Overload", - "des.superbwarfare.volt_overload": "Increases the shock damage of Taser Gun", + "des.superbwarfare.volt_overload": "Increases shock damage of Taser Gun", "item.superbwarfare.desperado": "Desperado", - "des.superbwarfare.desperado": "精准击杀后进行换弹,可暂时提升射速", + "des.superbwarfare.desperado": "Reload after a precision final blow increases your rate of fire", + "item.superbwarfare.vorpal_weapon": "Vorpal Weapon", + "des.superbwarfare.vorpal_weapon": "Increases damage against bosses", "item.superbwarfare.empty_perk": "Empty Perk", "item.superbwarfare.shortcut_pack": "Shortcut Pack", @@ -391,26 +393,22 @@ "item.minecraft.splash_potion.effect.superbwarfare_long_shock": "Splash Potion of Shock", "item.minecraft.lingering_potion.effect.superbwarfare_long_shock": "Lingering Potion of Shock", - "des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s", - "des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]", - "commands.ammo.get": "Current %s ammo: %s", "commands.ammo.set": "Set %s ammo to %s for %s players", "commands.ammo.add": "Added %s ammo of amount %s for %s players", + "des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s", "des.superbwarfare.monitor.linked": "Connect!", "des.superbwarfare.monitor.monitor_already_linked": "This monitor has been connected!", "des.superbwarfare.monitor.already_linked": "This device has been connected!", "des.superbwarfare.monitor.unlinked": "Disconnect!", "des.superbwarfare.no_cloth_config": "您尚未安装 Cloth Config API,无法打开配置界面", - "des.superbwarfare.drone.distance": "DISTANCE:", "des.superbwarfare.drone.health": "HEALTH:", "des.superbwarfare.drone.ammo": "AMMO:", "des.superbwarfare.drone.range": "RANGE:", "des.superbwarfare.drone.kamikaze": "KAMIKAZE", "des.superbwarfare.drone.warning": "WARNING!", - "des.superbwarfare.shoot.rings": "Rings ", "entity.minecraft.villager.superbwarfare.armory": "Armory", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index ad4529cb8..36154900a 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -297,6 +297,8 @@ "des.superbwarfare.volt_overload": "增加泰瑟枪电击的伤害", "item.superbwarfare.desperado": "亡命之徒", "des.superbwarfare.desperado": "精准击杀后进行换弹,可暂时提升射速", + "item.superbwarfare.vorpal_weapon": "斩首武器", + "des.superbwarfare.vorpal_weapon": "提升对强大敌人造成的伤害", "item.superbwarfare.empty_perk": "空白模组", "item.superbwarfare.shortcut_pack": "捷径包", @@ -391,26 +393,22 @@ "item.minecraft.splash_potion.effect.superbwarfare_long_shock": "喷溅型电击药水", "item.minecraft.lingering_potion.effect.superbwarfare_long_shock": "滞留型电击药水", - "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", - "des.superbwarfare.need_bolt_action": "【需要拉栓】", - "commands.ammo.get": "当前%s弹药数量: %s", "commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s", "commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药", + "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", "des.superbwarfare.monitor.linked": "连接成功!", "des.superbwarfare.monitor.monitor_already_linked": "这个遥控器已连接到一个设备!", "des.superbwarfare.monitor.already_linked": "这个设备已被连接!", "des.superbwarfare.monitor.unlinked": "断开连接!", "des.superbwarfare.no_cloth_config": "您尚未安装 Cloth Config API,无法打开配置界面", - "des.superbwarfare.drone.distance": "飞手距离:", "des.superbwarfare.drone.health": "耐久值:", "des.superbwarfare.drone.ammo": "弹药:", "des.superbwarfare.drone.range": "测距:", "des.superbwarfare.drone.kamikaze": "自爆模式", "des.superbwarfare.drone.warning": "警告!", - "des.superbwarfare.shoot.rings": "环 ", "entity.minecraft.villager.superbwarfare.armory": "军械师",