From 1b7d5d5beb327b1aef6c0f26197a414deb61feb0 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 10 Oct 2024 00:58:38 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0common=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/mcreator/superbwarfare/ModUtils.java | 2 ++ .../client/screens/CrossHairOverlay.java | 12 ++++---- .../compat/clothconfig/ClothConfigHelper.java | 3 ++ .../client/DisplayClothConfig.java | 8 ----- .../common/GameplayClothConfig.java | 22 ++++++++++++++ .../superbwarfare/config/CommonConfig.java | 16 ++++++++++ .../config/client/DisplayConfig.java | 4 --- .../config/common/GameplayConfig.java | 18 ++++++++++++ .../event/LivingEventHandler.java | 6 ++-- .../mcreator/superbwarfare/item/Monitor.java | 29 ++++++++++++++----- .../superbwarfare/tools/TooltipTool.java | 19 ------------ .../assets/superbwarfare/lang/en_us.json | 8 ++--- .../assets/superbwarfare/lang/zh_cn.json | 8 ++--- 13 files changed, 98 insertions(+), 57 deletions(-) create mode 100644 src/main/java/net/mcreator/superbwarfare/compat/clothconfig/common/GameplayClothConfig.java create mode 100644 src/main/java/net/mcreator/superbwarfare/config/CommonConfig.java create mode 100644 src/main/java/net/mcreator/superbwarfare/config/common/GameplayConfig.java diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index fff326228..b1e6b6f76 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -1,6 +1,7 @@ package net.mcreator.superbwarfare; import net.mcreator.superbwarfare.config.ClientConfig; +import net.mcreator.superbwarfare.config.CommonConfig; import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.message.*; @@ -43,6 +44,7 @@ public class ModUtils { public ModUtils() { ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, ClientConfig.init()); + ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, CommonConfig.init()); IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus(); diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java index 8b804204e..27c946524 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java @@ -82,12 +82,12 @@ public class CrossHairOverlay { if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0) { if (stack.is(ModTags.Items.SHOTGUN)) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { - normalCrossHair(guiGraphics, w ,h , spread, moveX, moveY); + normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); } else { shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength); } } else { - normalCrossHair(guiGraphics, w ,h , spread, moveX, moveY); + normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); } } } @@ -98,19 +98,17 @@ public class CrossHairOverlay { if (!player.isSprinting() || player.getPersistentData().getDouble("noRun") > 0 || ClientEventHandler.pullPos > 0) { if (ClientEventHandler.zoomTime < 0.1) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { - normalCrossHair(guiGraphics, w ,h , spread, moveX, moveY); + normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); } else { shotgunCrossHair(guiGraphics, finPosX, finPosY, finLength); } } else { - normalCrossHair(guiGraphics, w ,h , spread, moveX, moveY); + normalCrossHair(guiGraphics, w, h, spread, moveX, moveY); } } } } - - // 在开启伤害指示器时才进行渲染 if (DisplayConfig.KILL_INDICATION.get()) { renderKillIndicator(guiGraphics, w, h, moveX, moveY); @@ -133,7 +131,7 @@ public class CrossHairOverlay { } - private static void normalCrossHair(GuiGraphics guiGraphics, int w, int h, double spread, float moveX, float moveY ) { + private static void normalCrossHair(GuiGraphics guiGraphics, int w, int h, double spread, float moveX, float moveY) { preciseBlit(guiGraphics, REX_HORIZONTAL, (float) (w / 2f - 13.5f - 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(guiGraphics, REX_HORIZONTAL, (float) (w / 2f - 2.5f + 2.8f * spread) + moveX, h / 2f - 7.5f + moveY, 0, 0, 16, 16, 16, 16); preciseBlit(guiGraphics, REX_VERTICAL, w / 2f - 7.5f + moveX, (float) (h / 2f - 2.5f + 2.8f * spread) + moveY, 0, 0, 16, 16, 16, 16); diff --git a/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/ClothConfigHelper.java b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/ClothConfigHelper.java index 2679fd43f..b07288ac8 100644 --- a/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/ClothConfigHelper.java +++ b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/ClothConfigHelper.java @@ -5,6 +5,7 @@ import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; import net.mcreator.superbwarfare.compat.clothconfig.client.DisplayClothConfig; import net.mcreator.superbwarfare.compat.clothconfig.client.KillMessageClothConfig; import net.mcreator.superbwarfare.compat.clothconfig.client.ReloadClothConfig; +import net.mcreator.superbwarfare.compat.clothconfig.common.GameplayClothConfig; import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.Component; import net.minecraftforge.client.ConfigScreenHandler; @@ -23,6 +24,8 @@ public class ClothConfigHelper { KillMessageClothConfig.init(root, entryBuilder); DisplayClothConfig.init(root, entryBuilder); + GameplayClothConfig.init(root, entryBuilder); + return root; } diff --git a/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java index 40e9b61db..af8c698c0 100644 --- a/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java +++ b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java @@ -19,14 +19,6 @@ public class DisplayClothConfig { .build() ); - category.addEntry(entryBuilder - .startBooleanToggle(Component.translatable("config.superbwarfare.client.display.global_indication"), DisplayConfig.GLOBAL_INDICATION.get()) - .setDefaultValue(false) - .setSaveConsumer(DisplayConfig.GLOBAL_INDICATION::set) - .setTooltip(Component.translatable("config.superbwarfare.client.display.global_indication.des")) - .build() - ); - category.addEntry(entryBuilder .startBooleanToggle(Component.translatable("config.superbwarfare.client.display.ammo_hud"), DisplayConfig.AMMO_HUD.get()) .setDefaultValue(true) diff --git a/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/common/GameplayClothConfig.java b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/common/GameplayClothConfig.java new file mode 100644 index 000000000..355545481 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/compat/clothconfig/common/GameplayClothConfig.java @@ -0,0 +1,22 @@ +package net.mcreator.superbwarfare.compat.clothconfig.common; + +import me.shedaniel.clothconfig2.api.ConfigBuilder; +import me.shedaniel.clothconfig2.api.ConfigCategory; +import me.shedaniel.clothconfig2.api.ConfigEntryBuilder; +import net.mcreator.superbwarfare.config.common.GameplayConfig; +import net.minecraft.network.chat.Component; + +public class GameplayClothConfig { + + public static void init(ConfigBuilder root, ConfigEntryBuilder entryBuilder) { + ConfigCategory category = root.getOrCreateCategory(Component.translatable("config.superbwarfare.common.gameplay")); + + category.addEntry(entryBuilder + .startBooleanToggle(Component.translatable("config.superbwarfare.common.gameplay.global_indication"), GameplayConfig.GLOBAL_INDICATION.get()) + .setDefaultValue(false) + .setSaveConsumer(GameplayConfig.GLOBAL_INDICATION::set) + .setTooltip(Component.translatable("config.superbwarfare.common.gameplay.global_indication.des")) + .build() + ); + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/config/CommonConfig.java b/src/main/java/net/mcreator/superbwarfare/config/CommonConfig.java new file mode 100644 index 000000000..289926d65 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/config/CommonConfig.java @@ -0,0 +1,16 @@ +package net.mcreator.superbwarfare.config; + +import net.mcreator.superbwarfare.config.common.GameplayConfig; +import net.minecraftforge.common.ForgeConfigSpec; + +public class CommonConfig { + + public static ForgeConfigSpec init() { + ForgeConfigSpec.Builder builder = new ForgeConfigSpec.Builder(); + + GameplayConfig.init(builder); + + return builder.build(); + } + +} diff --git a/src/main/java/net/mcreator/superbwarfare/config/client/DisplayConfig.java b/src/main/java/net/mcreator/superbwarfare/config/client/DisplayConfig.java index f7533772a..8bbb977a8 100644 --- a/src/main/java/net/mcreator/superbwarfare/config/client/DisplayConfig.java +++ b/src/main/java/net/mcreator/superbwarfare/config/client/DisplayConfig.java @@ -5,7 +5,6 @@ import net.minecraftforge.common.ForgeConfigSpec; public class DisplayConfig { public static ForgeConfigSpec.BooleanValue KILL_INDICATION; - public static ForgeConfigSpec.BooleanValue GLOBAL_INDICATION; public static ForgeConfigSpec.BooleanValue AMMO_HUD; public static ForgeConfigSpec.BooleanValue FLOAT_CROSS_HAIR; public static ForgeConfigSpec.BooleanValue CAMERA_ROTATE; @@ -17,9 +16,6 @@ public class DisplayConfig { builder.comment("Set TRUE if you want to show kill indication while killing an entity"); KILL_INDICATION = builder.define("kill_indication", true); - builder.comment("Set FALSE if you want to show kill indication ONLY while killing an entity with a gun"); - GLOBAL_INDICATION = builder.define("global_indication", true); - builder.comment("Set TRUE to show ammo and gun info on HUD"); AMMO_HUD = builder.define("ammo_hud", true); diff --git a/src/main/java/net/mcreator/superbwarfare/config/common/GameplayConfig.java b/src/main/java/net/mcreator/superbwarfare/config/common/GameplayConfig.java new file mode 100644 index 000000000..5e006011c --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/config/common/GameplayConfig.java @@ -0,0 +1,18 @@ +package net.mcreator.superbwarfare.config.common; + +import net.minecraftforge.common.ForgeConfigSpec; + +public class GameplayConfig { + + public static ForgeConfigSpec.BooleanValue GLOBAL_INDICATION; + + public static void init(ForgeConfigSpec.Builder builder) { + builder.push("gameplay"); + + builder.comment("Set FALSE if you want to show kill indication ONLY while killing an entity with a gun"); + GLOBAL_INDICATION = builder.define("global_indication", true); + + builder.pop(); + } + +} diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index df60df71f..301fbe8aa 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -1,7 +1,7 @@ package net.mcreator.superbwarfare.event; import net.mcreator.superbwarfare.ModUtils; -import net.mcreator.superbwarfare.config.client.DisplayConfig; +import net.mcreator.superbwarfare.config.common.GameplayConfig; import net.mcreator.superbwarfare.entity.TargetEntity; import net.mcreator.superbwarfare.entity.projectile.ProjectileEntity; import net.mcreator.superbwarfare.init.*; @@ -193,12 +193,12 @@ public class LivingEventHandler { } // 如果配置不选择全局伤害提示,则只在伤害类型为mod添加的时显示指示器 - if (!DisplayConfig.GLOBAL_INDICATION.get() && !DamageTypeTool.isModDamage(source)) { + if (!GameplayConfig.GLOBAL_INDICATION.get() && !DamageTypeTool.isModDamage(source)) { return; } if (!sourceEntity.level().isClientSide() && sourceEntity instanceof ServerPlayer player) { - SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 100f, 1f); + SoundTool.playLocalSound(player, ModSounds.TARGET_DOWN.get(), 3f, 1f); ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(2, 8)); } diff --git a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java index 6a7af3921..472ec3884 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java +++ b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java @@ -4,7 +4,8 @@ import com.google.common.collect.ImmutableMultimap; import com.google.common.collect.Multimap; import net.mcreator.superbwarfare.entity.DroneEntity; import net.mcreator.superbwarfare.tools.ItemNBTTool; -import net.mcreator.superbwarfare.tools.TooltipTool; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; import net.minecraft.network.chat.Component; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResultHolder; @@ -19,6 +20,7 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.level.Level; +import java.text.DecimalFormat; import java.util.List; public class Monitor extends Item { @@ -65,28 +67,39 @@ public class Monitor extends Item { } @Override - public Multimap getDefaultAttributeModifiers(EquipmentSlot equipmentSlot) { - if (equipmentSlot == EquipmentSlot.MAINHAND) { + public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { + if (slot == EquipmentSlot.MAINHAND) { ImmutableMultimap.Builder builder = ImmutableMultimap.builder(); - builder.putAll(super.getDefaultAttributeModifiers(equipmentSlot)); + builder.putAll(super.getAttributeModifiers(slot, stack)); builder.put(Attributes.ATTACK_DAMAGE, new AttributeModifier(BASE_ATTACK_DAMAGE_UUID, "Item modifier", 2d, AttributeModifier.Operation.ADDITION)); builder.put(Attributes.ATTACK_SPEED, new AttributeModifier(BASE_ATTACK_SPEED_UUID, "Item modifier", -2.4, AttributeModifier.Operation.ADDITION)); return builder.build(); } - return super.getDefaultAttributeModifiers(equipmentSlot); - } + return super.getAttributeModifiers(slot, stack); + } @Override public void appendHoverText(ItemStack stack, Level world, List list, TooltipFlag flag) { - TooltipTool.addMonitorTips(list, stack.getOrCreateTag().getString(LINKED_DRONE)); + if (stack.getOrCreateTag().getString(LINKED_DRONE).equals("none")) return; + + Player player = Minecraft.getInstance().player; + if (player == null) return; + + DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512)) + .stream().filter(e -> e.getStringUUID().equals(stack.getOrCreateTag().getString(LINKED_DRONE))).findFirst().orElse(null); + if (entity == null) return; + + list.add(Component.translatable("des.superbwarfare.tips.distance").withStyle(ChatFormatting.GRAY) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal("Distance:" + new DecimalFormat("##.#").format(player.distanceTo(entity)) + "M").withStyle(ChatFormatting.GRAY))); } @Override public void inventoryTick(ItemStack itemstack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(itemstack, world, entity, slot, selected); if (!selected) { - itemstack.getOrCreateTag().putBoolean("Using",false); + itemstack.getOrCreateTag().putBoolean("Using", false); DroneEntity drone = entity.level().getEntitiesOfClass(DroneEntity.class, entity.getBoundingBox().inflate(512)) .stream().filter(e -> e.getStringUUID().equals(itemstack.getOrCreateTag().getString("LinkedDrone"))).findFirst().orElse(null); diff --git a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java index 65e11dc95..a747eaa22 100644 --- a/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java +++ b/src/main/java/net/mcreator/superbwarfare/tools/TooltipTool.java @@ -1,18 +1,15 @@ package net.mcreator.superbwarfare.tools; -import net.mcreator.superbwarfare.entity.DroneEntity; import net.mcreator.superbwarfare.init.ModPerks; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.perk.AmmoPerk; import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.util.Mth; -import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.capabilities.ForgeCapabilities; @@ -308,20 +305,4 @@ public class TooltipTool { } - public static void addMonitorTips(List tooltip, String id) { - if (id.equals("none")) return; - - Player player = Minecraft.getInstance().player; - if (player == null) return; - - DroneEntity entity = player.level().getEntitiesOfClass(DroneEntity.class, player.getBoundingBox().inflate(512)) - .stream().filter(e -> e.getStringUUID().equals(id)).findFirst().orElse(null); - - if (entity == null) return; - - tooltip.add(Component.translatable("des.superbwarfare.tips.distance").withStyle(ChatFormatting.GRAY) - .append(Component.literal("").withStyle(ChatFormatting.RESET)) - .append(Component.literal("Distance:" + new DecimalFormat("##.#").format(player.distanceTo(entity)) + "M").withStyle(ChatFormatting.GRAY))); - } - } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 07c553031..97c7811dd 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -345,8 +345,6 @@ "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", - "commands.pvp_mode.on": "Enabled PVP Mode", - "commands.pvp_mode.off": "Disabled PVP Mode", "des.superbwarfare.monitor.linked": "Connect!", "des.superbwarfare.monitor.monitor_already_linked": "This monitor has been connected!", @@ -379,8 +377,6 @@ "config.superbwarfare.client.display": "Display Config", "config.superbwarfare.client.display.kill_indication": "Kill Indication", "config.superbwarfare.client.display.kill_indication.des": "The kill indicator will appear around the cross hair after a creature is killed when turned on", - "config.superbwarfare.client.display.global_indication": "Global damage indicator", - "config.superbwarfare.client.display.global_indication.des": "Whether to show a kill indication around the cross hair when killing a creature with only the damage type of this module", "config.superbwarfare.client.display.ammo_hud": "Ammo HUD", "config.superbwarfare.client.display.ammo_hud.des": "Display firearm and ammo information in the lower right corner when turned on", "config.superbwarfare.client.display.float_cross_hair": "Dynamic Cross Hair", @@ -390,6 +386,10 @@ "config.superbwarfare.client.display.armor_plate_hud": "Armor Plate HUD", "config.superbwarfare.client.display.armor_plate_hud.des": "Display the durability of the bulletproof insert currently equipped on the chest armor in the lower left corner when turned on", + "config.superbwarfare.common.gameplay": "Gameplay Config", + "config.superbwarfare.common.gameplay.global_indication": "Global damage indicator", + "config.superbwarfare.common.gameplay.global_indication.des": "Whether to show a kill indication around the cross hair when killing a creature with only the damage type of this module", + "des.superbwarfare.perk_damage_reduce": "Damage -", "des.superbwarfare.perk_damage_plus": "Damage +", "des.superbwarfare.perk_speed_reduce": "Velocity -", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 832ace927..bbc00c932 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -345,8 +345,6 @@ "commands.ammo.get": "当前%s弹药数量: %s", "commands.ammo.set": "为%3$s位玩家的%1$s弹药数量设置为%2$s", "commands.ammo.add": "为%3$s位玩家添加了%2$s发%1$s弹药", - "commands.pvp_mode.on": "已启用PVP模式", - "commands.pvp_mode.off": "已禁用PVP模式", "des.superbwarfare.monitor.linked": "连接成功!", "des.superbwarfare.monitor.monitor_already_linked": "这个遥控器已连接到一个设备!", @@ -379,8 +377,6 @@ "config.superbwarfare.client.display": "显示配置", "config.superbwarfare.client.display.kill_indication": "击杀提示", "config.superbwarfare.client.display.kill_indication.des": "开启时,击杀生物时会在准星周围显示击杀提示", - "config.superbwarfare.client.display.global_indication": "全局伤害提示", - "config.superbwarfare.client.display.global_indication.des": "是否在仅使用本模组的伤害类型击杀生物时,在准星周围显示击杀提示", "config.superbwarfare.client.display.ammo_hud": "枪械信息", "config.superbwarfare.client.display.ammo_hud.des": "开启时,在屏幕右下角显示枪械和弹药信息", "config.superbwarfare.client.display.float_cross_hair": "浮动准星", @@ -390,6 +386,10 @@ "config.superbwarfare.client.display.armor_plate_hud": "防弹插板信息", "config.superbwarfare.client.display.armor_plate_hud.des": "开启时,在屏幕左下角显示当前胸甲装备的防弹插板的耐久", + "config.superbwarfare.common.gameplay": "游戏内容配置", + "config.superbwarfare.common.gameplay.global_indication": "全局伤害提示", + "config.superbwarfare.common.gameplay.global_indication.des": "是否在仅使用本模组的伤害类型击杀生物时,在准星周围显示击杀提示", + "des.superbwarfare.perk_damage_reduce": "伤害 -", "des.superbwarfare.perk_damage_plus": "伤害 +", "des.superbwarfare.perk_speed_reduce": "子弹初速 -",