From b98d53cb5910814611f581e444a0a9b5103bb689 Mon Sep 17 00:00:00 2001 From: alezthegreat <164583776+alezthegreat@users.noreply.github.com> Date: Mon, 1 Sep 2025 19:37:57 -0500 Subject: [PATCH 1/3] Add Universal Grapple --- .../gameplay/item/GrapplingHookManager.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java index dc75c62..ee669eb 100644 --- a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java +++ b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java @@ -1,6 +1,5 @@ package org.woftnw.battlewinner.gameplay.item; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.FishHook; @@ -9,7 +8,6 @@ import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; import org.bukkit.util.Vector; import org.jetbrains.annotations.NotNull; import org.woftnw.battlewinner.Battlewinner; @@ -55,6 +53,7 @@ public void run() { FishHook hook = event.getHook(); boolean isTarget = false; + boolean isUniversal = !(isNotUniversalGrapple(offHandItem) && isNotUniversalGrapple(mainHandItem)); for (int x = -1; x < 2; x++) { for (int y = -1; y < 2; y++) { @@ -64,8 +63,7 @@ public void run() { Vector vector = new Vector(x, y, z); vector.multiply(0.5); clone.add(vector); - - if (clone.getBlock().getType() == Material.TARGET) { + if (clone.getBlock().getType() == Material.TARGET || (isUniversal && !clone.getBlock().isPassable())) { isTarget = true; break; } @@ -87,7 +85,14 @@ public void run() { private boolean isNotGrapplingHook(@NotNull ItemStack item) { if (item.getItemMeta() == null) return true; String componentString = item.getItemMeta().getAsComponentString(); - Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook: 1b.*}.*]"); + Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.* 1b.*}.*]"); + return (!pattern.matcher(componentString).find()); + } + + private boolean isNotUniversalGrapple(@NotNull ItemStack item) { + if (item.getItemMeta() == null) return true; + String componentString = item.getItemMeta().getAsComponentString(); + Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.*\\{any_blocks:.*1b}.*}.*]"); return (!pattern.matcher(componentString).find()); } From 4a188922f718b98d11debc69c599af512a3cd192 Mon Sep 17 00:00:00 2001 From: Bog Date: Wed, 3 Sep 2025 14:56:58 -0700 Subject: [PATCH 2/3] Change grappling hook regex detection isNotGrapplingHook now looks for grappling_hook:{} and added more wildcards to isNotUniversalGrapple --- .../battlewinner/gameplay/item/GrapplingHookManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java index ee669eb..5151604 100644 --- a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java +++ b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java @@ -85,14 +85,14 @@ public void run() { private boolean isNotGrapplingHook(@NotNull ItemStack item) { if (item.getItemMeta() == null) return true; String componentString = item.getItemMeta().getAsComponentString(); - Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.* 1b.*}.*]"); + Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.*\\{.*}}.*]"); return (!pattern.matcher(componentString).find()); } private boolean isNotUniversalGrapple(@NotNull ItemStack item) { if (item.getItemMeta() == null) return true; String componentString = item.getItemMeta().getAsComponentString(); - Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.*\\{any_blocks:.*1b}.*}.*]"); + Pattern pattern = Pattern.compile("\\[.*minecraft:custom_data=\\{.*grappling_hook:.*\\{.*any_blocks:1b.*}.*}.*]"); return (!pattern.matcher(componentString).find()); } From d248bcf89e9c4f059f6995392b173c8699cf2332 Mon Sep 17 00:00:00 2001 From: Bog Date: Wed, 3 Sep 2025 14:59:55 -0700 Subject: [PATCH 3/3] Remove debug messages from GrapplingHookManager --- .../woftnw/battlewinner/gameplay/item/GrapplingHookManager.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java index 5151604..0f15e18 100644 --- a/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java +++ b/src/main/java/org/woftnw/battlewinner/gameplay/item/GrapplingHookManager.java @@ -28,7 +28,6 @@ public void onPlayerFish(@NotNull PlayerFishEvent event) { if (isNotGrapplingHook(mainHandItem) && isNotGrapplingHook(offHandItem)) return; if (event.getState().equals(PlayerFishEvent.State.FISHING)) { - Battlewinner.getInstance().getLogger().info("Player launched a grappling hook!"); FishHook hook = event.getHook(); BukkitRunnable hookTask = new BukkitRunnable() { @@ -36,7 +35,6 @@ public void onPlayerFish(@NotNull PlayerFishEvent event) { public void run() { if (!hook.isValid()) this.cancel(); Vector velocity = hook.getVelocity(); - Battlewinner.getInstance().getLogger().info("Velocity: " + velocity.getX() + ", " + velocity.getY() + ", " + velocity.getZ()); if (velocity.getX() == 0.0 && velocity.getZ() == 0.0) { // setGravity(false) doesn't work // setNoPhysics(true) doesn't work