diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index d773732a2..009aa4cea 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -191,7 +191,6 @@ public class ClientEventHandler { } // 开火部分 - double weight = stack.getOrCreateTag().getDouble("weight"); double speed = 1; @@ -210,7 +209,6 @@ public class ClientEventHandler { cantFireTime = Mth.clamp(cantFireTime - 6 * speed * times, 0, 24); } - if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS && (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN) && cantFireTime == 0 @@ -218,7 +216,6 @@ public class ClientEventHandler { && !notInGame() || (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10 ))) { - double customRpm = 0; if (stack.getItem() == ModItems.DEVOTION.get()) { @@ -233,12 +230,16 @@ public class ClientEventHandler { if (rpm == 0) { rpm = 600; } + + if (stack.getOrCreateTag().getInt("DesperadoTimePost") > 0) { + rpm *= 1.3; + } + double rps = rpm / 60; // cooldown in ms double cooldown = 1000 / rps; - if (!clientTimer.started()) { clientTimer.start(); // 首发瞬间发射 @@ -249,7 +250,6 @@ public class ClientEventHandler { ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(spread)); clientTimer.setProgress((long) (clientTimer.getProgress() - cooldown)); } - } else { clientTimer.stop(); fireSpread = 0; diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index dd4d3c85d..b0fe2d41e 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -451,6 +451,10 @@ public class LivingEventHandler { handleKillingTallyAddCount(stack); handleSubsistence(stack, attacker); } + + if (DamageTypeTool.isHeadshotDamage(source)) { + handleDesperado(stack); + } } private static void handleClipPerks(ItemStack stack) { @@ -584,6 +588,15 @@ public class LivingEventHandler { } } + private static void handleDesperado(ItemStack stack) { + int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); + if (level == 0) { + return; + } + + stack.getOrCreateTag().putInt("DesperadoTime", 90 + level * 10); + } + /** * 开启死亡掉落时掉落一个弹药盒 */ diff --git a/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java index b3edbc783..5fdda55fa 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ReloadEventHandler.java @@ -29,6 +29,7 @@ public class ReloadEventHandler { handleHealClipPre(stack); handleKillClipPre(stack); handleKillingTallyPre(stack); + handleDesperadoPre(stack); } @SubscribeEvent @@ -45,6 +46,7 @@ public class ReloadEventHandler { handleHealClipPost(player, stack); handleKillClipPost(stack); + handleDesperadoPost(stack); } private static void handleHealClipPre(ItemStack stack) { @@ -103,4 +105,23 @@ public class ReloadEventHandler { stack.getOrCreateTag().putInt("KillingTally", 0); } } + + private static void handleDesperadoPre(ItemStack stack) { + int time = stack.getOrCreateTag().getInt("DesperadoTime"); + if (time > 0) { + stack.getOrCreateTag().putInt("DesperadoTime", 0); + stack.getOrCreateTag().putBoolean("Desperado", true); + } else { + stack.getOrCreateTag().putBoolean("Desperado", false); + } + } + + private static void handleDesperadoPost(ItemStack stack) { + if (!stack.getOrCreateTag().getBoolean("Desperado")) { + return; + } + + int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); + stack.getOrCreateTag().putInt("DesperadoTimePost", 110 + level * 10); + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java index 0f9ee606d..df3acfa9c 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModPerks.java @@ -54,6 +54,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 DIMENSION_MAGAZINE = FUNC_PERKS.register("dimension_magazine", () -> new Perk("dimension_magazine", Perk.Type.FUNCTIONAL)); + public static final RegistryObject DESPERADO = FUNC_PERKS.register("desperado", () -> new Perk("desperado", Perk.Type.FUNCTIONAL)); /** * Damage Perks diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 93854189a..9dee86755 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -43,8 +43,7 @@ public abstract class GunItem extends Item { @Override public void inventoryTick(ItemStack itemstack, Level level, Entity entity, int slot, boolean selected) { - if (entity instanceof LivingEntity living) { - ItemStack mainHandItem = living.getMainHandItem(); + if (entity instanceof LivingEntity) { if (!itemstack.is(ModTags.Items.GUN)) { return; } @@ -57,7 +56,6 @@ public abstract class GunItem extends Item { if (itemstack.getOrCreateTag().getBoolean("draw")) { itemstack.getOrCreateTag().putBoolean("draw", false); -// itemstack.getOrCreateTag().putInt("draw_time", 0); if (itemstack.getItem() == ModItems.RPG.get() && itemstack.getOrCreateTag().getInt("ammo") == 0) { itemstack.getOrCreateTag().putDouble("empty", 1); @@ -83,9 +81,7 @@ public abstract class GunItem extends Item { if ((itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) && itemstack.getOrCreateTag().getInt("ammo") > itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag") + 1) || (!itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) && itemstack.getOrCreateTag().getInt("ammo") > itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag")) ) { - int count = itemstack.getOrCreateTag().getInt("ammo") - itemstack.getOrCreateTag().getInt("mag") + itemstack.getOrCreateTag().getInt("customMag") - (itemstack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0); - entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { if (itemstack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { @@ -156,22 +152,8 @@ public abstract class GunItem extends Item { } private void handleGunPerks(ItemStack stack) { - if (stack.getOrCreateTag().getInt("HealClipTime") > 0) { - stack.getOrCreateTag().putInt("HealClipTime", Math.max(0, stack.getOrCreateTag().getInt("HealClipTime") - 1)); - } - - if (stack.getOrCreateTag().getInt("KillClipReloadTime") > 0) { - stack.getOrCreateTag().putInt("KillClipReloadTime", Math.max(0, stack.getOrCreateTag().getInt("KillClipReloadTime") - 1)); - } - - if (stack.getOrCreateTag().getInt("KillClipTime") > 0) { - stack.getOrCreateTag().putInt("KillClipTime", Math.max(0, stack.getOrCreateTag().getInt("KillClipTime") - 1)); - } - - if (stack.getOrCreateTag().getInt("FourthTimesCharmTick") > 0) { - stack.getOrCreateTag().putInt("FourthTimesCharmTick", - Math.max(0, stack.getOrCreateTag().getInt("FourthTimesCharmTick") - 1)); - } + reduceTagTime(stack, "HealClipTime", "KillClipReloadTime", "KillClipTime", "FourthTimesCharmTick", "HeadSeeker", + "DesperadoTime", "DesperadoTimePost"); if (PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), stack) > 0) { int count = stack.getOrCreateTag().getInt("FourthTimesCharmCount"); @@ -184,10 +166,6 @@ public abstract class GunItem extends Item { } } - if (stack.getOrCreateTag().getInt("HeadSeeker") > 0) { - stack.getOrCreateTag().putInt("HeadSeeker", Math.max(0, stack.getOrCreateTag().getInt("HeadSeeker") - 1)); - } - int ctmMag = stack.getOrCreateTag().getInt("mag"); if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { stack.getOrCreateTag().putInt("customMag", (int) (Math.ceil(0.1 * PerkHelper.getItemPerkLevel(ModPerks.DIMENSION_MAGAZINE.get(), stack) * ctmMag))); @@ -201,4 +179,20 @@ public abstract class GunItem extends Item { public boolean canApplyPerk(Perk perk) { return true; } + + private void reduceTagTime(ItemStack stack, String... tag) { + if (!stack.hasTag() || stack.getTag() == null) { + return; + } + + for (String t : tag) { + if (!stack.getTag().contains(t)) { + continue; + } + + if (stack.getOrCreateTag().getInt(t) > 0) { + stack.getOrCreateTag().putInt(t, Math.max(0, stack.getOrCreateTag().getInt(t) - 1)); + } + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java index 2fc29c1c9..f48b53e1b 100644 --- a/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java +++ b/src/main/java/net/mcreator/superbwarfare/perk/PerkHelper.java @@ -203,7 +203,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.FOURTH_TIMES_CHARM.get() || perk == ModPerks.SUBSISTENCE.get() || perk == ModPerks.DESPERADO.get(); } case DAMAGE -> { return perk == ModPerks.KILL_CLIP.get() || perk == ModPerks.GUTSHOT_STRAIGHT.get() ||