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
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
import com.bencodez.advancedcore.AdvancedCorePlugin;
import com.bencodez.advancedcore.api.javascript.JavascriptEngine;
import com.bencodez.advancedcore.api.messages.PlaceholderUtils;
import com.bencodez.advancedcore.api.rewards.RewardDisplayPlaceholders;
import com.bencodez.advancedcore.api.misc.MiscUtils;
import com.bencodez.simpleapi.array.ArrayUtils;
import com.bencodez.simpleapi.messages.MessageAPI;
Expand Down Expand Up @@ -90,6 +91,7 @@ public class ItemBuilder {
private String identifier;

private HashMap<String, String> placeholders = new HashMap<>();
private HashMap<String, String> displayPlaceholders;

private String skull = "";

Expand Down Expand Up @@ -1720,10 +1722,16 @@ public ItemStack parsePlaceholders(OfflinePlayer player) {
if (player == null) {
return toItemStack();
}
setName(MessageAPI.colorize(PlaceholderUtils.replaceJavascript(player,
PlaceholderUtils.replacePlaceHolder(getName(), placeholders))));
setLore(ArrayUtils.colorize(PlaceholderUtils.replaceJavascript(player,
PlaceholderUtils.replacePlaceHolder(getLore(), placeholders))));
if (displayPlaceholders == null) {
setName(MessageAPI.colorize(PlaceholderUtils.replaceJavascript(player,
PlaceholderUtils.replacePlaceHolder(getName(), placeholders))));
setLore(ArrayUtils.colorize(PlaceholderUtils.replaceJavascript(player,
PlaceholderUtils.replacePlaceHolder(getLore(), placeholders))));
} else {
setName(MessageAPI.colorize(RewardDisplayPlaceholders.replaceFormattedJavascript(player, getName(),
displayPlaceholders)));
setLore(renderDisplayLore(player));
}
if (skull.contains("%")) {
setSkullOwner(PlaceholderUtils.replaceJavascript(player,
PlaceholderUtils.replacePlaceHolder(skull, placeholders)));
Expand Down Expand Up @@ -2039,6 +2047,32 @@ public ItemBuilder setPlaceholders(HashMap<String, String> placeholders) {
return this;
}

/**
* Sets placeholder values used only for player-facing item names and lore.
* Exact-value fields such as skull owners continue to use the ordinary
* placeholder map.
*
* @param displayPlaceholders the display placeholder map
* @return this ItemBuilder
*/
public ItemBuilder setDisplayPlaceholders(HashMap<String, String> displayPlaceholders) {
this.displayPlaceholders = displayPlaceholders;
return this;
}

private ArrayList<String> renderDisplayLore(OfflinePlayer player) {
ArrayList<String> rendered = new ArrayList<>();
for (String line : getLore()) {
rendered.add(MessageAPI.colorize(RewardDisplayPlaceholders.replaceFormattedJavascript(player, line,
displayPlaceholders)));
}
return rendered;
}

private HashMap<String, String> getDisplayPlaceholders() {
return displayPlaceholders == null ? placeholders : displayPlaceholders;
}

/**
* Sets the skull owner by offline player.
*
Expand Down Expand Up @@ -2120,10 +2154,16 @@ public ItemStack toItemStack() {
return setConditional(new JavascriptEngine()).toItemStack();
}

setName(MessageAPI.colorize(
PlaceholderUtils.replaceJavascript(PlaceholderUtils.replacePlaceHolder(getName(), placeholders))));
setLore(ArrayUtils.colorize(
PlaceholderUtils.replaceJavascript(PlaceholderUtils.replacePlaceHolder(getLore(), placeholders))));
if (displayPlaceholders == null) {
setName(MessageAPI.colorize(PlaceholderUtils.replaceJavascript(
PlaceholderUtils.replacePlaceHolder(getName(), placeholders))));
setLore(ArrayUtils.colorize(PlaceholderUtils.replaceJavascript(
PlaceholderUtils.replacePlaceHolder(getLore(), placeholders))));
} else {
setName(MessageAPI.colorize(RewardDisplayPlaceholders.replaceFormattedJavascript(null, getName(),
displayPlaceholders)));
setLore(renderDisplayLore(null));
}
if (checkLoreLength) {
checkLoreLength();
}
Expand All @@ -2140,8 +2180,12 @@ public ItemStack toItemStack(OfflinePlayer player) {
if (!placeholders.containsKey("player")) {
placeholders.put("player", player.getName());
}
if (displayPlaceholders != null && !displayPlaceholders.containsKey("player")) {
displayPlaceholders.put("player", player.getName());
}
if (conditional) {
return getConditionItemBuilder(player).setPlaceholders(placeholders).toItemStack(player);
return getConditionItemBuilder(player).setPlaceholders(placeholders)
.setDisplayPlaceholders(displayPlaceholders).toItemStack(player);
}
parsePlaceholders(player);
if (checkLoreLength) {
Expand All @@ -2160,9 +2204,12 @@ public ItemStack toItemStack(Player player) {
if (!placeholders.containsKey("player")) {
placeholders.put("player", player.getName());
}
if (displayPlaceholders != null && !displayPlaceholders.containsKey("player")) {
displayPlaceholders.put("player", player.getName());
}
if (conditional) {
return setConditional(new JavascriptEngine().addPlayer(player)).setPlaceholders(placeholders)
.toItemStack(player);
.setDisplayPlaceholders(displayPlaceholders).toItemStack(player);
}
parsePlaceholders(player);
if (checkLoreLength) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
import java.util.function.Function;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
Expand Down Expand Up @@ -118,6 +119,26 @@ public void broadcast(String broadcastMsg, Collection<? extends Player> players)
}
}

/**
* Broadcasts messages that have already been rendered for each player. The
* renderer must preserve exact interactive attributes because this method only
* parses the resulting message structure.
*/
public void broadcastPrepared(Function<Player, String> renderer, String consoleMessage) {
for (Player player : Bukkit.getOnlinePlayers()) {
String message = renderer.apply(player);
if (message == null || message.isEmpty()) continue;
for (String str1 : message.split(Pattern.quote("%newline%"))) {
for (String str : str1.split(Pattern.quote("%NewLine%"))) {
PlayerUtils.getServerHandle().sendMessage(player, PlaceholderUtils.parseJson(str));
}
}
}
if (consoleMessage != null && !consoleMessage.isEmpty()) {
Bukkit.getServer().getConsoleSender().sendMessage(MessageAPI.colorize(consoleMessage));
}
}

public boolean checkChance(double chance, double outOf) {
if ((chance == 0) || (chance == outOf)) {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,15 @@ public RewardBuilder withPlaceHolder(String toReplace, String replaceWith) {
return this;
}

/**
* Adds a value used only by formatted reward output while preserving the raw
* placeholder for commands and other exact-value actions.
*/
public RewardBuilder withDisplayPlaceHolder(String toReplace, String replaceWith) {
RewardDisplayPlaceholders.put(this.rewardOptions.getPlaceholders(), toReplace, replaceWith);
return this;
}

public RewardBuilder withPrefix(String prefix) {
this.rewardOptions.setPrefix(prefix);
return this;
Expand Down
Loading
Loading