Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,13 +149,19 @@ Spesific order placeholders
- `%norder_order_<id>_createDate%`
- `%norder_order_<id>_expirationDate%`

Spesific player placeholders
- `%norder_player_<player>_<>`

- `%norder_player_<player>_totalOrders%`
- `%norder_player_<player>_totalEarnings%`
- `%norder_player_<player>_totalDelivered%`
- `%norder_player_<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

Expand Down
74 changes: 60 additions & 14 deletions src/main/java/com/notpatch/nOrder/hook/PlaceholderHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -88,22 +88,68 @@ public boolean persist() {
}
}

// %norder_player_<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_<type>% - uses the player from context
// %norder_player_{player_name}_<type>% - 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}_<type>%
// 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);
}
}
}
}
}
Expand Down
Loading