From bcd61542c1f53df301308c3509c005b8930faf4c Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 29 Nov 2024 18:11:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=99=BA=E6=85=A7=E8=8A=AF?= =?UTF-8?q?=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../event/ClientEventHandler.java | 18 ++++++++++++++-- .../superbwarfare/init/ModPerks.java | 1 + .../superbwarfare/perk/PerkHelper.java | 18 +++++++++------- .../perk/intelligent_chip_perk_crafting.json | 21 +++++++++++++++++++ 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/data/superbwarfare/recipes/perk/intelligent_chip_perk_crafting.json diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 4ec8d2cb6..a3230d9a9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -754,6 +754,7 @@ public class ClientEventHandler { if (cantFireTime <= 10) { zoomTime = Mth.clamp(zoomTime + 0.03 * speed * times, 0, 1); } + } else { zoomTime = Mth.clamp(zoomTime - 0.04 * speed * times, 0, 1); } @@ -1064,13 +1065,26 @@ public class ClientEventHandler { customZoom = Mth.lerp(0.6 * times, customZoom, stack.getOrCreateTag().getDouble("CustomZoom")); - double zoom = 1.25 + customZoom; + double zoomFov = 1.25 + customZoom; if (mc.options.getCameraType().isFirstPerson()) { - event.setFOV(event.getFOV() / (1.0 + p * (zoom - 1)) * (1 - 0.4 * breathTime)); + event.setFOV(event.getFOV() / (1.0 + p * (zoomFov - 1)) * (1 - 0.4 * breathTime)); } else if (mc.options.getCameraType() == CameraType.THIRD_PERSON_BACK) event.setFOV(event.getFOV() / (1.0 + p * 0.01) * (1 - 0.4 * breathTime)); fov = event.getFOV(); + + if (zoom && !notInGame() + && drawTime < 0.01 + && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit) { + int level = PerkHelper.getItemPerkLevel(ModPerks.INTELLIGENT_CHIP.get(), stack); + if (level > 0) { + Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 32 + 8 * (level - 1), 25 / zoomFov); + if (seekingEntity != null && seekingEntity.isAlive()) { + player.lookAt(EntityAnchorArgument.Anchor.EYES, seekingEntity.getEyePosition()); + } + } + } + return; } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java index 25020f3df..a3d097242 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModPerks.java @@ -57,6 +57,7 @@ public class ModPerks { 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)); + public static final RegistryObject INTELLIGENT_CHIP = FUNC_PERKS.register("intelligent_chip", () -> new Perk("intelligent_chip", Perk.Type.FUNCTIONAL)); /** * Damage Perks diff --git a/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java b/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java index 8dd95e8b6..e267b79f3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/com/atsuishio/superbwarfare/perk/PerkHelper.java @@ -186,7 +186,7 @@ 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(); + 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(); @@ -205,7 +205,7 @@ 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.POWERFUL_ATTRACTION.get(); + perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() || @@ -224,7 +224,8 @@ public class PerkHelper { } case FUNCTIONAL -> { return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FIELD_DOCTOR.get() || - perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.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(); @@ -241,7 +242,8 @@ public class PerkHelper { return !perk.descriptionId.equals("butterfly_bullet"); } case FUNCTIONAL -> { - return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.POWERFUL_ATTRACTION.get(); + return perk == ModPerks.HEAL_CLIP.get() || perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() + || perk == ModPerks.INTELLIGENT_CHIP.get(); } case DAMAGE -> { return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.MONSTER_HUNTER.get(); @@ -259,7 +261,8 @@ public class PerkHelper { } 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.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() || @@ -277,7 +280,8 @@ public class PerkHelper { return true; } case FUNCTIONAL -> { - return perk == ModPerks.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.POWERFUL_ATTRACTION.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(); @@ -290,6 +294,6 @@ 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(); + public static final Predicate LAUNCHER_PERKS = perk -> perk == ModPerks.MONSTER_HUNTER.get() || perk == ModPerks.POWERFUL_ATTRACTION.get() || perk == ModPerks.INTELLIGENT_CHIP.get(); } diff --git a/src/main/resources/data/superbwarfare/recipes/perk/intelligent_chip_perk_crafting.json b/src/main/resources/data/superbwarfare/recipes/perk/intelligent_chip_perk_crafting.json new file mode 100644 index 000000000..39eaaa2aa --- /dev/null +++ b/src/main/resources/data/superbwarfare/recipes/perk/intelligent_chip_perk_crafting.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "equipment", + "pattern": [ + "bbb", + "bab", + "bbb" + ], + "key": { + "a": { + "item": "superbwarfare:empty_perk" + }, + "b": { + "item": "superbwarfare:ancient_cpu" + } + }, + "result": { + "item": "superbwarfare:intelligent_chip", + "count": 1 + } +} \ No newline at end of file