From c3ccc14b699c8c08095d91cab141a9a7723af83a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Dec 2025 10:57:13 +0000 Subject: [PATCH 1/2] Initial plan From bfcc5ca185a6d91cc5ed5f46fc8bfdd90ca90a79 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 26 Dec 2025 11:00:46 +0000 Subject: [PATCH 2/2] Fix placeholder parsing for player names with underscores Co-authored-by: NotPatch <57406847+NotPatch@users.noreply.github.com> --- README.md | 20 +++-- .../notpatch/nOrder/hook/PlaceholderHook.java | 74 +++++++++++++++---- 2 files changed, 73 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 65f9607..f48fb49 100644 --- a/README.md +++ b/README.md @@ -149,13 +149,19 @@ Spesific order placeholders - `%norder_order__createDate%` - `%norder_order__expirationDate%` -Spesific player placeholders -- `%norder_player__<>` - -- `%norder_player__totalOrders%` -- `%norder_player__totalEarnings%` -- `%norder_player__totalDelivered%` -- `%norder_player__totalCollected%` +Player statistics placeholders (for the player viewing the placeholder) +- `%norder_player_totalOrders%` - Total orders created by the player +- `%norder_player_totalEarnings%` - Total earnings from delivered orders +- `%norder_player_totalDelivered%` - Total items delivered to orders +- `%norder_player_totalCollected%` - Total items collected from orders + +Specific player statistics placeholders (for looking up other players) +- `%norder_player_{player_name}_totalOrders%` - Total orders by specific player +- `%norder_player_{player_name}_totalEarnings%` - Total earnings by specific player +- `%norder_player_{player_name}_totalDelivered%` - Total items delivered by specific player +- `%norder_player_{player_name}_totalCollected%` - Total items collected by specific player + +Note: Player names can contain underscores (e.g., `%norder_player_ItzFabbb____totalOrders%`) ## Discord Webhooks diff --git a/src/main/java/com/notpatch/nOrder/hook/PlaceholderHook.java b/src/main/java/com/notpatch/nOrder/hook/PlaceholderHook.java index db428c9..bbd265d 100644 --- a/src/main/java/com/notpatch/nOrder/hook/PlaceholderHook.java +++ b/src/main/java/com/notpatch/nOrder/hook/PlaceholderHook.java @@ -88,22 +88,68 @@ public boolean persist() { } } - // %norder_player__* - if (parts.length >= 3 && parts[0].equals("player")) { - String playerName = parts[1]; - String field = parts[2]; - switch (field) { - case "totalOrders" -> { - return getPlayerTotalOrders(playerName); + // %norder_player_% - uses the player from context + // %norder_player_{player_name}_% - looks up specific player + if (parts.length >= 2 && parts[0].equals("player")) { + // Check if this is a simple player stat request without a player name + // e.g., %norder_player_totalOrders% + if (parts.length == 2) { + String field = parts[1]; + if (player == null) { + return ""; } - case "totalEarnings" -> { - return getPlayerTotalEarnings(playerName); + String playerName = player.getName(); + switch (field) { + case "totalOrders" -> { + return getPlayerTotalOrders(playerName); + } + case "totalEarnings" -> { + return getPlayerTotalEarnings(playerName); + } + case "totalDelivered" -> { + return getPlayerTotalDeliveredItems(playerName); + } + case "totalCollected" -> { + return getPlayerTotalCollectedItems(playerName); + } } - case "totalDelivered" -> { - return getPlayerTotalDeliveredItems(playerName); - } - case "totalCollected" -> { - return getPlayerTotalCollectedItems(playerName); + } + + // For player-specific stats: %norder_player_{player_name}_% + // We need to find the field name (last part) and extract player name from the middle + if (parts.length >= 3) { + String lastPart = parts[parts.length - 1]; + + // Check if the last part is a valid field + if (lastPart.equals("totalOrders") || lastPart.equals("totalEarnings") || + lastPart.equals("totalDelivered") || lastPart.equals("totalCollected")) { + + // Extract player name from parts[1] to parts[length-2] + // e.g., for "player_ItzFabbb____totalOrders", parts = ["player", "ItzFabbb", "", "", "", "totalOrders"] + // player name = "ItzFabbb___" (join parts[1] to parts[length-2] with underscores) + StringBuilder playerNameBuilder = new StringBuilder(); + for (int i = 1; i < parts.length - 1; i++) { + if (i > 1) { + playerNameBuilder.append("_"); + } + playerNameBuilder.append(parts[i]); + } + String playerName = playerNameBuilder.toString(); + + switch (lastPart) { + case "totalOrders" -> { + return getPlayerTotalOrders(playerName); + } + case "totalEarnings" -> { + return getPlayerTotalEarnings(playerName); + } + case "totalDelivered" -> { + return getPlayerTotalDeliveredItems(playerName); + } + case "totalCollected" -> { + return getPlayerTotalCollectedItems(playerName); + } + } } } }