diff --git a/src/main/java/com/extendedclip/deluxemenus/action/ClickAction.java b/src/main/java/com/extendedclip/deluxemenus/action/ClickAction.java index 613e9c10..b0506d3d 100644 --- a/src/main/java/com/extendedclip/deluxemenus/action/ClickAction.java +++ b/src/main/java/com/extendedclip/deluxemenus/action/ClickAction.java @@ -103,12 +103,12 @@ public void setChance(@Nullable final String chance) { * @return the parsed delay */ @SuppressWarnings("UnstableApiUsage") - public long getDelay(@NotNull final MenuHolder holder) { + public long getDelay(@NotNull final MenuHolder holder, int slot) { if (delay == null || delay.isEmpty()) { return 0; } - final var parsed = Longs.tryParse(holder.setPlaceholders(delay)); + final var parsed = Longs.tryParse(holder.setPlaceholders(delay, slot)); return parsed == null ? 0 : parsed; } @@ -120,12 +120,12 @@ public long getDelay(@NotNull final MenuHolder holder) { * @return true if the chance has passed, false otherwise */ @SuppressWarnings("UnstableApiUsage") - public boolean checkChance(@NotNull final MenuHolder holder) { + public boolean checkChance(@NotNull final MenuHolder holder, int slot) { if (chance == null) { return true; } - final Double parsedChance = Doubles.tryParse(holder.setPlaceholders(this.chance)); + final Double parsedChance = Doubles.tryParse(holder.setPlaceholders(this.chance, slot)); if (parsedChance == null) { return false; } diff --git a/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java b/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java index 20aed10d..65677610 100644 --- a/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java +++ b/src/main/java/com/extendedclip/deluxemenus/action/ClickActionTask.java @@ -26,17 +26,20 @@ public class ClickActionTask extends BukkitRunnable { private final String name; private final ActionType actionType; private final String exec; + private final int slot; public ClickActionTask( @NotNull final DeluxeMenus plugin, @NotNull final String name, @NotNull final ActionType actionType, - @NotNull final String exec + @NotNull final String exec, + @NotNull final int slot ) { this.plugin = plugin; this.name = name; this.actionType = actionType; this.exec = exec; + this.slot = slot; } @Override @@ -46,7 +49,7 @@ public void run() { return; } - final String executable = PlaceholderAPI.setPlaceholders((OfflinePlayer) player, exec); + final String executable = PlaceholderAPI.setPlaceholders((OfflinePlayer) player, exec.replace("{slot}", String.valueOf(this.slot))); final MenuHolder holder = Menu.getMenuHolder(player); switch (actionType) { diff --git a/src/main/java/com/extendedclip/deluxemenus/action/ClickHandler.java b/src/main/java/com/extendedclip/deluxemenus/action/ClickHandler.java index 0a1d1dc0..14652e33 100644 --- a/src/main/java/com/extendedclip/deluxemenus/action/ClickHandler.java +++ b/src/main/java/com/extendedclip/deluxemenus/action/ClickHandler.java @@ -5,5 +5,5 @@ public interface ClickHandler { - void onClick(@NotNull final MenuHolder menuHolder); + void onClick(@NotNull final MenuHolder menuHolder, int slot); } diff --git a/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java b/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java index b2a90e75..f4d0aa09 100644 --- a/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java +++ b/src/main/java/com/extendedclip/deluxemenus/commands/DeluxeMenusCommands.java @@ -168,7 +168,7 @@ public boolean onCommand( MenuHolder holder = Menu.getMenuHolder(target) == null ? new MenuHolder(target) : Menu.getMenuHolder(target); - if (!action.checkChance(holder)) { + if (!action.checkChance(holder, -1)) { plugin.sms(sender, Messages.CHANCE_FAIL); return true; } @@ -178,13 +178,14 @@ public boolean onCommand( plugin, target.getName(), action.getType(), - action.getExecutable() - ).runTaskLater(plugin, action.getDelay(holder)); + action.getExecutable(), + -1 + ).runTaskLater(plugin, action.getDelay(holder, -1)); plugin.sms( sender, Messages.ACTION_TO_BE_EXECUTED.message().replaceText( - AMOUNT_REPLACER_BUILDER.replacement(String.valueOf(action.getDelay(holder))).build()) + AMOUNT_REPLACER_BUILDER.replacement(String.valueOf(action.getDelay(holder, -1))).build()) ); return true; } @@ -193,7 +194,8 @@ public boolean onCommand( plugin, target.getName(), action.getType(), - action.getExecutable() + action.getExecutable(), + -1 ).runTask(plugin); plugin.sms( diff --git a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java index 7adcfa00..c98a8832 100644 --- a/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java +++ b/src/main/java/com/extendedclip/deluxemenus/config/DeluxeMenusConfig.java @@ -1469,11 +1469,11 @@ private ClickHandler getClickHandler(FileConfiguration c, String configPath) { handler = new ClickHandler() { @Override - public void onClick(@NotNull final MenuHolder holder) { + public void onClick(@NotNull final MenuHolder holder, int slot) { for (ClickAction action : actions) { - if (!action.checkChance(holder)) { + if (!action.checkChance(holder, slot)) { continue; } @@ -1482,8 +1482,9 @@ public void onClick(@NotNull final MenuHolder holder) { plugin, holder.getViewer().getName(), action.getType(), - holder.setArguments(action.getExecutable()) - ).runTaskLater(plugin, action.getDelay(holder)); + holder.setArguments(action.getExecutable()), + slot + ).runTaskLater(plugin, action.getDelay(holder, slot)); continue; } @@ -1491,7 +1492,8 @@ public void onClick(@NotNull final MenuHolder holder) { plugin, holder.getViewer().getName(), action.getType(), - holder.setArguments(action.getExecutable()) + holder.setArguments(action.getExecutable()), + slot ).runTask(plugin); } } diff --git a/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java b/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java index 3ba83c80..4223f1f5 100644 --- a/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java +++ b/src/main/java/com/extendedclip/deluxemenus/listener/PlayerListener.java @@ -154,41 +154,41 @@ public void onClick(InventoryClickEvent event) { } if (handleClick(player, holder, item.options().clickHandler(), - item.options().clickRequirements())) { + item.options().clickRequirements(), item.options().slot())) { return; } if (event.isShiftClick() && event.isLeftClick()) { if (handleClick(player, holder, item.options().shiftLeftClickHandler(), - item.options().shiftLeftClickRequirements())) { + item.options().shiftLeftClickRequirements(), item.options().slot())) { return; } } if (event.isShiftClick() && event.isRightClick()) { if (handleClick(player, holder, item.options().shiftRightClickHandler(), - item.options().shiftRightClickRequirements())) { + item.options().shiftRightClickRequirements(), item.options().slot())) { return; } } if (event.getClick() == ClickType.LEFT) { if (handleClick(player, holder, item.options().leftClickHandler(), - item.options().leftClickRequirements())) { + item.options().leftClickRequirements(), item.options().slot())) { return; } } if (event.getClick() == ClickType.RIGHT) { if (handleClick(player, holder, item.options().rightClickHandler(), - item.options().rightClickRequirements())) { + item.options().rightClickRequirements(), item.options().slot())) { return; } } if (event.getClick() == ClickType.MIDDLE) { if (handleClick(player, holder, item.options().middleClickHandler(), - item.options().middleClickRequirements())) { + item.options().middleClickRequirements(), item.options().slot())) { return; } } @@ -204,7 +204,7 @@ public void onClick(InventoryClickEvent event) { */ private boolean handleClick(final @NotNull Player player, final @NotNull MenuHolder holder, final @NotNull Optional handler, - final @NotNull Optional requirements) { + final @NotNull Optional requirements, int slot) { if (handler.isEmpty()) { return false; } @@ -212,18 +212,18 @@ private boolean handleClick(final @NotNull Player player, final @NotNull MenuHol if (requirements.isPresent()) { final ClickHandler denyHandler = requirements.get().getDenyHandler(); - if (!requirements.get().evaluate(holder)) { + if (!requirements.get().evaluate(holder, slot)) { if (denyHandler == null) { return true; } - denyHandler.onClick(holder); + denyHandler.onClick(holder, slot); return true; } } this.cache.put(player.getUniqueId(), System.currentTimeMillis()); - handler.get().onClick(holder); + handler.get().onClick(holder, slot); return true; } diff --git a/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java b/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java index 6bb91b46..6e687bc4 100644 --- a/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java +++ b/src/main/java/com/extendedclip/deluxemenus/menu/Menu.java @@ -197,7 +197,7 @@ public static void closeMenu(final Player p, boolean close, boolean executeClose if (executeCloseActions) { if (holder.getMenu().getCloseHandler() != null) { - holder.getMenu().getCloseHandler().onClick(holder); + holder.getMenu().getCloseHandler().onClick(holder, -1); } } @@ -332,9 +332,9 @@ private boolean handleOpenRequirements(MenuHolder holder) { return true; } - if (!openRequirements.evaluate(holder)) { + if (!openRequirements.evaluate(holder, -1)) { if (openRequirements.getDenyHandler() != null) { - openRequirements.getDenyHandler().onClick(holder); + openRequirements.getDenyHandler().onClick(holder, -1); } return false; } @@ -351,9 +351,9 @@ private boolean handleArgRequirements(MenuHolder holder) { continue; } - if (!rl.evaluate(holder)) { + if (!rl.evaluate(holder, -1)) { if (rl.getDenyHandler() != null) { - rl.getDenyHandler().onClick(holder); + rl.getDenyHandler().onClick(holder, -1); } return false; } @@ -407,7 +407,7 @@ public void openMenu(final Player viewer, final Map args, final if (item.options().viewRequirements().isPresent()) { - if (item.options().viewRequirements().get().evaluate(holder)) { + if (item.options().viewRequirements().get().evaluate(holder, item.options().slot())) { activeItems.add(item); break; @@ -428,10 +428,10 @@ public void openMenu(final Player viewer, final Map args, final holder.setActiveItems(activeItems); if (this.openHandler != null) { - this.openHandler.onClick(holder); + this.openHandler.onClick(holder, -1); } - String title = StringUtils.color(holder.setPlaceholders(this.menuTitle)); + String title = StringUtils.color(holder.setPlaceholders(this.menuTitle, -1)); Inventory inventory; diff --git a/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java b/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java index fa0dc8a0..f245708a 100644 --- a/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java +++ b/src/main/java/com/extendedclip/deluxemenus/menu/MenuHolder.java @@ -88,7 +88,7 @@ public Menu getMenu() { return Menu.getMenu(menuName); } - public String setPlaceholders(String string) { + public String setPlaceholders(String string, int slot) { // Set argument placeholders first if (this.typedArgs != null && !this.typedArgs.isEmpty()) { for (Entry entry : typedArgs.entrySet()) { @@ -96,6 +96,8 @@ public String setPlaceholders(String string) { } } + string = string.replace("{slot}", String.valueOf(slot)); + // Then set actual PAPI placeholders if (placeholderPlayer != null) { return PlaceholderAPI.setPlaceholders((OfflinePlayer) placeholderPlayer, string); @@ -144,7 +146,7 @@ public void refreshMenu() { if (item.options().viewRequirements().isPresent()) { - if (item.options().viewRequirements().get().evaluate(this)) { + if (item.options().viewRequirements().get().evaluate(this, item.options().slot())) { m = true; active.add(item); break; @@ -242,14 +244,14 @@ public void run() { if (item.options().dynamicAmount().isPresent()) { try { - amt = Integer.parseInt(setPlaceholders(item.options().dynamicAmount().get())); + amt = Integer.parseInt(setPlaceholders(item.options().dynamicAmount().get(), item.options().slot())); if (amt <= 0) { amt = 1; } } catch (Exception exception) { DeluxeMenus.printStacktrace( "Something went wrong while updating item in slot " + item.options().slot() + - ". Invalid dynamic amount: " + setPlaceholders(item.options().dynamicAmount().get()), + ". Invalid dynamic amount: " + setPlaceholders(item.options().dynamicAmount().get(), item.options().slot()), exception ); } @@ -258,7 +260,7 @@ public void run() { ItemMeta meta = i.getItemMeta(); if (item.options().displayNameHasPlaceholders() && item.options().displayName().isPresent()) { - meta.setDisplayName(StringUtils.color(setPlaceholders(item.options().displayName().get()))); + meta.setDisplayName(StringUtils.color(setPlaceholders(item.options().displayName().get(), item.options().slot()))); } if (item.options().loreHasPlaceholders()) { @@ -267,7 +269,7 @@ public void run() { for (String line : item.options().lore()) { updated.add(StringUtils - .color(setPlaceholders(line))); + .color(setPlaceholders(line, item.options().slot()))); } meta.setLore(updated); } diff --git a/src/main/java/com/extendedclip/deluxemenus/menu/MenuItem.java b/src/main/java/com/extendedclip/deluxemenus/menu/MenuItem.java index 46804ddd..62f65ff0 100644 --- a/src/main/java/com/extendedclip/deluxemenus/menu/MenuItem.java +++ b/src/main/java/com/extendedclip/deluxemenus/menu/MenuItem.java @@ -54,7 +54,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { String lowercaseStringMaterial = stringMaterial.toLowerCase(Locale.ROOT); if (ItemUtils.isPlaceholderMaterial(lowercaseStringMaterial)) { - stringMaterial = holder.setPlaceholders(stringMaterial.substring(PLACEHOLDER_PREFIX.length())); + stringMaterial = holder.setPlaceholders(stringMaterial.substring(PLACEHOLDER_PREFIX.length()), this.options.slot()); lowercaseStringMaterial = stringMaterial.toLowerCase(Locale.ENGLISH); } @@ -139,7 +139,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { if (meta != null) { if (this.options.rgb().isPresent()) { - final String rgbString = holder.setPlaceholders(this.options.rgb().get()); + final String rgbString = holder.setPlaceholders(this.options.rgb().get(), this.options.slot()); final String[] parts = rgbString.split(","); try { @@ -166,7 +166,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { short data = this.options.data(); if (this.options.placeholderData().isPresent()) { - final String parsedData = holder.setPlaceholders(this.options.placeholderData().get()); + final String parsedData = holder.setPlaceholders(this.options.placeholderData().get(), this.options.slot()); try { data = Short.parseShort(parsedData); } catch (final NumberFormatException exception) { @@ -187,7 +187,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { if (this.options.dynamicAmount().isPresent()) { try { - final int dynamicAmount = (int) Double.parseDouble(holder.setPlaceholders(this.options.dynamicAmount().get())); + final int dynamicAmount = (int) Double.parseDouble(holder.setPlaceholders(this.options.dynamicAmount().get(), this.options.slot())); amount = Math.max(dynamicAmount, 1); } catch (final NumberFormatException ignored) { } @@ -206,20 +206,20 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { if (this.options.customModelData().isPresent() && VersionHelper.IS_CUSTOM_MODEL_DATA) { try { - final int modelData = Integer.parseInt(holder.setPlaceholders(this.options.customModelData().get())); + final int modelData = Integer.parseInt(holder.setPlaceholders(this.options.customModelData().get(), this.options.slot())); itemMeta.setCustomModelData(modelData); } catch (final Exception ignored) { } } if (this.options.displayName().isPresent()) { - final String displayName = holder.setPlaceholders(this.options.displayName().get()); + final String displayName = holder.setPlaceholders(this.options.displayName().get(), this.options.slot()); itemMeta.setDisplayName(StringUtils.color(displayName)); } if (!this.options.lore().isEmpty()) { final List lore = this.options.lore().stream() - .map(holder::setPlaceholders) + .map(s -> holder.setPlaceholders(s, this.options.slot())) .map(StringUtils::color) .map(line -> line.split("\n")) .flatMap(Arrays::stream) @@ -257,7 +257,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { } if (itemMeta instanceof LeatherArmorMeta && this.options.rgb().isPresent()) { - final String rgbString = holder.setPlaceholders(this.options.rgb().get()); + final String rgbString = holder.setPlaceholders(this.options.rgb().get(), this.options.slot()); final String[] parts = rgbString.split(","); final LeatherArmorMeta leatherArmorMeta = (LeatherArmorMeta) itemMeta; @@ -273,7 +273,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { ); } } else if (itemMeta instanceof FireworkEffectMeta && this.options.rgb().isPresent()) { - final String rgbString = holder.setPlaceholders(this.options.rgb().get()); + final String rgbString = holder.setPlaceholders(this.options.rgb().get(), this.options.slot()); final String[] parts = rgbString.split(","); final FireworkEffectMeta fireworkEffectMeta = (FireworkEffectMeta) itemMeta; @@ -311,7 +311,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { if (NbtProvider.isAvailable()) { if (this.options.nbtString().isPresent()) { - final String tag = holder.setPlaceholders(this.options.nbtString().get()); + final String tag = holder.setPlaceholders(this.options.nbtString().get(), this.options.slot()); if (tag.contains(":")) { final String[] parts = tag.split(":", 2); itemStack = NbtProvider.setString(itemStack, parts[0], parts[1]); @@ -319,7 +319,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { } if (this.options.nbtInt().isPresent()) { - final String tag = holder.setPlaceholders(this.options.nbtInt().get()); + final String tag = holder.setPlaceholders(this.options.nbtInt().get(), this.options.slot()); if (tag.contains(":")) { final String[] parts = tag.split(":"); itemStack = NbtProvider.setInt(itemStack, parts[0], Integer.parseInt(parts[1])); @@ -327,7 +327,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { } for (String nbtTag : this.options.nbtStrings()) { - final String tag = holder.setPlaceholders(nbtTag); + final String tag = holder.setPlaceholders(nbtTag, this.options.slot()); if (tag.contains(":")) { final String[] parts = tag.split(":", 2); itemStack = NbtProvider.setString(itemStack, parts[0], parts[1]); @@ -335,7 +335,7 @@ public ItemStack getItemStack(@NotNull final MenuHolder holder) { } for (String nbtTag : this.options.nbtInts()) { - final String tag = holder.setPlaceholders(nbtTag); + final String tag = holder.setPlaceholders(nbtTag, this.options.slot()); if (tag.contains(":")) { final String[] parts = tag.split(":"); itemStack = NbtProvider.setInt(itemStack, parts[0], Integer.parseInt(parts[1])); diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/HasExpRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/HasExpRequirement.java index 4d4ab364..c8dd38a4 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/HasExpRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/HasExpRequirement.java @@ -17,14 +17,14 @@ public HasExpRequirement(String amt, boolean invert, boolean level) { } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { int amount; int has = level ? holder.getViewer().getLevel() : ExpUtils.getTotalExperience(holder.getViewer()); try { - amount = Integer.parseInt(holder.setPlaceholders(amt)); + amount = Integer.parseInt(holder.setPlaceholders(amt, slot)); } catch (final Exception exception) { DeluxeMenus.printStacktrace( - "Invalid amount found for has exp requirement: " + holder.setPlaceholders(amt), + "Invalid amount found for has exp requirement: " + holder.setPlaceholders(amt, slot), exception ); return false; diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/HasItemRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/HasItemRequirement.java index 707c5ee6..2a87a5fc 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/HasItemRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/HasItemRequirement.java @@ -22,8 +22,8 @@ public HasItemRequirement(ItemWrapper wrapper, boolean invert) { } @Override - public boolean evaluate(MenuHolder holder) { - String materialName = holder.setPlaceholders(wrapper.getMaterial()).toUpperCase(); + public boolean evaluate(MenuHolder holder, int slot) { + String materialName = holder.setPlaceholders(wrapper.getMaterial(), slot).toUpperCase(); Material material = DeluxeMenus.MATERIALS.get(materialName); if (material == null) { return invert; @@ -37,20 +37,20 @@ public boolean evaluate(MenuHolder holder) { int total = 0; for (ItemStack itemToCheck: inventory) { - if (!isRequiredItem(itemToCheck, holder, material)) continue; + if (!isRequiredItem(itemToCheck, holder, material, slot)) continue; total += itemToCheck.getAmount(); } if (offHand != null) { for (ItemStack itemToCheck: offHand) { - if (!isRequiredItem(itemToCheck, holder, material)) continue; + if (!isRequiredItem(itemToCheck, holder, material, slot)) continue; total += itemToCheck.getAmount(); } } if (armor != null) { for (ItemStack itemToCheck: armor) { - if (!isRequiredItem(itemToCheck, holder, material)) continue; + if (!isRequiredItem(itemToCheck, holder, material, slot)) continue; total += itemToCheck.getAmount(); } } @@ -58,7 +58,7 @@ public boolean evaluate(MenuHolder holder) { return invert == (total < wrapper.getAmount()); } - private boolean isRequiredItem(ItemStack itemToCheck, MenuHolder holder, Material material) { + private boolean isRequiredItem(ItemStack itemToCheck, MenuHolder holder, Material material, int slot) { if (itemToCheck == null || itemToCheck.getType() == Material.AIR) return false; if (wrapper.getMaterial() != null && itemToCheck.getType() != material) return false; if (wrapper.hasData() && itemToCheck.getDurability() != wrapper.getData()) return false; @@ -87,8 +87,8 @@ private boolean isRequiredItem(ItemStack itemToCheck, MenuHolder holder, Materia if (wrapper.getName() != null) { if (!metaToCheck.hasDisplayName()) return false; - String name = StringUtils.color(holder.setPlaceholders(wrapper.getName())); - String nameToCheck = StringUtils.color(holder.setPlaceholders(metaToCheck.getDisplayName())); + String name = StringUtils.color(holder.setPlaceholders(wrapper.getName(), slot)); + String nameToCheck = StringUtils.color(holder.setPlaceholders(metaToCheck.getDisplayName(), slot)); if (wrapper.checkNameContains() && wrapper.checkNameIgnoreCase()) { if (!org.apache.commons.lang3.StringUtils.containsIgnoreCase(nameToCheck, name)) return false; @@ -108,8 +108,8 @@ else if (!nameToCheck.equals(name)) { List loreX = metaToCheck.getLore(); if (loreX == null) return false; - String lore = wrapper.getLoreList().stream().map(holder::setPlaceholders).map(StringUtils::color).collect(Collectors.joining("&&")); - String loreToCheck = loreX.stream().map(holder::setPlaceholders).map(StringUtils::color).collect(Collectors.joining("&&")); + String lore = wrapper.getLoreList().stream().map(s -> holder.setPlaceholders(s, slot)).map(StringUtils::color).collect(Collectors.joining("&&")); + String loreToCheck = loreX.stream().map(s -> holder.setPlaceholders(s, slot)).map(StringUtils::color).collect(Collectors.joining("&&")); if (wrapper.checkLoreContains() && wrapper.checkLoreIgnoreCase()) { if (!org.apache.commons.lang3.StringUtils.containsIgnoreCase(loreToCheck, lore)) return false; @@ -129,8 +129,8 @@ else if (!loreToCheck.equals(lore)) { List loreX = metaToCheck.getLore(); if (loreX == null) return false; - String lore = StringUtils.color(holder.setPlaceholders(wrapper.getLore())); - String loreToCheck = loreX.stream().map(holder::setPlaceholders).map(StringUtils::color).collect(Collectors.joining("&&")); + String lore = StringUtils.color(holder.setPlaceholders(wrapper.getLore(), slot)); + String loreToCheck = loreX.stream().map(s -> holder.setPlaceholders(s, slot)).map(StringUtils::color).collect(Collectors.joining("&&")); if (wrapper.checkLoreContains() && wrapper.checkLoreIgnoreCase()) { return org.apache.commons.lang3.StringUtils.containsIgnoreCase(loreToCheck, lore); diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/HasMetaRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/HasMetaRequirement.java index 6f7346d5..624a918a 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/HasMetaRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/HasMetaRequirement.java @@ -19,20 +19,20 @@ public HasMetaRequirement(String key, String type, String value, boolean invert) } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { Player player = holder.getViewer(); if (player == null) { return false; } - String parsedKey = holder.setPlaceholders(key); + String parsedKey = holder.setPlaceholders(key, slot); String metaVal = DeluxeMenus.getInstance().getPersistentMetaHandler() .getMeta(player, parsedKey, type, null); if (metaVal == null) { return invert; } - String expected = holder.setPlaceholders(value); - metaVal = holder.setPlaceholders(metaVal); + String expected = holder.setPlaceholders(value, slot); + metaVal = holder.setPlaceholders(metaVal, slot); switch (type) { case "STRING": diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/HasMoneyRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/HasMoneyRequirement.java index 9c07b064..00ffe2e5 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/HasMoneyRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/HasMoneyRequirement.java @@ -16,18 +16,18 @@ public HasMoneyRequirement(double amount, boolean invert, String placeholder) { } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { if (getInstance().getVault() == null) { return false; } if (placeholder != null) { try { - String expected = holder.setPlaceholders(placeholder); + String expected = holder.setPlaceholders(placeholder, slot); amount = Double.parseDouble(expected); } catch (final NumberFormatException exception) { DeluxeMenus.printStacktrace( - "Invalid amount found for has money requirement: " + holder.setPlaceholders(placeholder), + "Invalid amount found for has money requirement: " + holder.setPlaceholders(placeholder, slot), exception ); } diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/HasPermissionRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/HasPermissionRequirement.java index 4ec6623e..6ab19313 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/HasPermissionRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/HasPermissionRequirement.java @@ -13,8 +13,8 @@ public HasPermissionRequirement(String permission, boolean invert) { } @Override - public boolean evaluate(MenuHolder holder) { - String check = holder.setPlaceholders(perm); + public boolean evaluate(MenuHolder holder, int slot) { + String check = holder.setPlaceholders(perm, slot); if (invert) { return !holder.getViewer().hasPermission(check); } else { diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/InputResultRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/InputResultRequirement.java index e9c50f75..bf5bec78 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/InputResultRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/InputResultRequirement.java @@ -16,10 +16,10 @@ public InputResultRequirement(RequirementType type, String input, String result) } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { - String parsedInput = holder.setPlaceholders(this.input); - String parsedResult = holder.setPlaceholders(this.result); + String parsedInput = holder.setPlaceholders(this.input, slot); + String parsedResult = holder.setPlaceholders(this.result, slot); switch (type) { case STRING_CONTAINS: diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/IsNearRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/IsNearRequirement.java index d207aba7..37b0b369 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/IsNearRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/IsNearRequirement.java @@ -16,7 +16,7 @@ public IsNearRequirement(Location location, int distance, boolean invert) { } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { if (holder.getViewer() == null) { return false; } diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/IsObjectRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/IsObjectRequirement.java index 3cd34c31..08d24582 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/IsObjectRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/IsObjectRequirement.java @@ -21,8 +21,8 @@ public IsObjectRequirement(String input, String object) { } @Override - public boolean evaluate(MenuHolder holder) { - String toCheck = holder.setPlaceholders(input); + public boolean evaluate(MenuHolder holder, int slot) { + String toCheck = holder.setPlaceholders(input, slot); switch (object) { case "int": diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/JavascriptRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/JavascriptRequirement.java index 9cde5401..d0dc5fd6 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/JavascriptRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/JavascriptRequirement.java @@ -36,9 +36,9 @@ public JavascriptRequirement(String expression) { } @Override - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { - String exp = holder.setPlaceholders(expression); + String exp = holder.setPlaceholders(expression, slot); try { engine.put("BukkitPlayer", holder.getViewer()); diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/RegexMatchesRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/RegexMatchesRequirement.java index be3bb7e4..3703b5ef 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/RegexMatchesRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/RegexMatchesRequirement.java @@ -16,12 +16,12 @@ public RegexMatchesRequirement(Pattern pattern, String input, boolean invert) { } @Override - public boolean evaluate(MenuHolder holder) { - String toCheck = holder.setPlaceholders(input); + public boolean evaluate(MenuHolder holder, int slot) { + String toCheck = holder.setPlaceholders(input, slot); if (invert) { - return !pattern.matcher(holder.setPlaceholders(toCheck)).find(); + return !pattern.matcher(holder.setPlaceholders(toCheck, slot)).find(); } else { - return pattern.matcher(holder.setPlaceholders(toCheck)).find(); + return pattern.matcher(holder.setPlaceholders(toCheck, slot)).find(); } } } diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/Requirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/Requirement.java index 7c49198a..b80864e6 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/Requirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/Requirement.java @@ -18,7 +18,7 @@ public Requirement(boolean optional) { this.setOptional(optional); } - public abstract boolean evaluate(MenuHolder holder); + public abstract boolean evaluate(MenuHolder holder, int slot); public ClickHandler getDenyHandler() { return denyHandler; diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/RequirementList.java b/src/main/java/com/extendedclip/deluxemenus/requirement/RequirementList.java index 9197ad32..d88ce5f3 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/RequirementList.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/RequirementList.java @@ -15,20 +15,20 @@ public RequirementList(List requirements) { this.setRequirements(requirements); } - public boolean evaluate(MenuHolder holder) { + public boolean evaluate(MenuHolder holder, int slot) { int successful = 0; for (Requirement r : getRequirements()) { - if (r.evaluate(holder)) { + if (r.evaluate(holder, slot)) { successful = successful + 1; if (r.getSuccessHandler() != null) { - r.getSuccessHandler().onClick(holder); + r.getSuccessHandler().onClick(holder, slot); } if (this.stopAtSuccess && successful >= minimumRequirements) { break; } } else { if (r.getDenyHandler() != null) { - r.getDenyHandler().onClick(holder); + r.getDenyHandler().onClick(holder, slot); } if (!r.isOptional()) { return false; diff --git a/src/main/java/com/extendedclip/deluxemenus/requirement/StringLengthRequirement.java b/src/main/java/com/extendedclip/deluxemenus/requirement/StringLengthRequirement.java index f5e56daf..d55ceb3e 100644 --- a/src/main/java/com/extendedclip/deluxemenus/requirement/StringLengthRequirement.java +++ b/src/main/java/com/extendedclip/deluxemenus/requirement/StringLengthRequirement.java @@ -15,8 +15,8 @@ public StringLengthRequirement(String input, int min, Integer max) { } @Override - public boolean evaluate(MenuHolder holder) { - String toCheck = holder.setPlaceholders(input); + public boolean evaluate(MenuHolder holder, int slot) { + String toCheck = holder.setPlaceholders(input, slot); if (max == null) { return toCheck.length() >= min; } else {