From 539c1940d83574479f4888ac2e525b21f1ffe362 Mon Sep 17 00:00:00 2001 From: SamB440 Date: Tue, 30 Mar 2021 18:24:21 +0100 Subject: [PATCH] Add custom message option to requirements --- .../api/integrations/IntegrationManager.java | 22 +++++++------- .../requirements/RegionRequirement.java | 13 +++++++++ .../rpgregions/utils/MessageUtils.java | 29 +++++++++++++++++++ 3 files changed, 54 insertions(+), 10 deletions(-) create mode 100644 api/src/main/java/net/islandearth/rpgregions/utils/MessageUtils.java diff --git a/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationManager.java b/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationManager.java index fb37a87..b5fd5e1 100644 --- a/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationManager.java +++ b/api/src/main/java/net/islandearth/rpgregions/api/integrations/IntegrationManager.java @@ -7,6 +7,7 @@ import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion; import net.islandearth.rpgregions.requirements.DependencyRequirement; import net.islandearth.rpgregions.requirements.RegionRequirement; import net.islandearth.rpgregions.translation.Translations; +import net.islandearth.rpgregions.utils.MessageUtils; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; @@ -49,6 +50,7 @@ public interface IntegrationManager { ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion(region); if (configuredRegion != null && configuredRegion.getRequirements() != null) { for (RegionRequirement requirement : configuredRegion.getRequirements()) { + boolean flag = !requirement.meetsRequirements(player) && !player.hasPermission("rpgregions.bypassentry"); if (requirement instanceof DependencyRequirement) { DependencyRequirement dependencyRequirement = (DependencyRequirement) requirement; List discoveries = new ArrayList<>(); @@ -59,17 +61,17 @@ public interface IntegrationManager { e.printStackTrace(); } - if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries)) { - requirement.getPreventType().prevent(event); - Translations.CANNOT_ENTER.send(player, requirement.getText(player)); - return false; - } - } else { - if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) { - requirement.getPreventType().prevent(event); - Translations.CANNOT_ENTER.send(player, requirement.getText(player)); - return false; + flag = !player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries); + } + + if (flag) { + requirement.getPreventType().prevent(event); + if (requirement.getPreventMessage() != null) { + String requirementMessage = MessageUtils.setPapi(player, requirement.getPreventMessage()); + player.sendMessage(requirementMessage); } + Translations.CANNOT_ENTER.send(player, requirement.getText(player)); + return false; } } } diff --git a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java index ac97815..20b5896 100644 --- a/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java +++ b/api/src/main/java/net/islandearth/rpgregions/requirements/RegionRequirement.java @@ -8,6 +8,7 @@ import org.apache.commons.lang3.EnumUtils; import org.apache.commons.lang3.StringUtils; import org.bukkit.ChatColor; import org.bukkit.entity.Player; +import org.jetbrains.annotations.Nullable; public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedback { @@ -15,6 +16,9 @@ public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedb @GuiEditable(value = "Prevent Type", type = GuiEditable.GuiEditableType.CHAT) private PreventType preventType; + @GuiEditable(value = "Prevention Entry Message", type = GuiEditable.GuiEditableType.CHAT) + private String preventMessage; + public RegionRequirement(IRPGRegionsAPI api) { this(api, PreventType.TELEPORT); } @@ -45,6 +49,15 @@ public abstract class RegionRequirement implements IGuiEditable, ICustomGuiFeedb return null; } + @Nullable + public String getPreventMessage() { + return preventMessage; + } + + public void setPreventMessage(String preventMessage) { + this.preventMessage = preventMessage; + } + @Override public boolean feedback(Player player, String input) { if (EnumUtils.isValidEnum(PreventType.class, input.toUpperCase())) { diff --git a/api/src/main/java/net/islandearth/rpgregions/utils/MessageUtils.java b/api/src/main/java/net/islandearth/rpgregions/utils/MessageUtils.java new file mode 100644 index 0000000..a6b7251 --- /dev/null +++ b/api/src/main/java/net/islandearth/rpgregions/utils/MessageUtils.java @@ -0,0 +1,29 @@ +package net.islandearth.rpgregions.utils; + +import me.clip.placeholderapi.PlaceholderAPI; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class MessageUtils { + + @NotNull + public static String replaceVariables(String message, String... values) { + String modifiedMessage = message; + for (int i = 0; i < 10; i++) { + if (values.length > i) modifiedMessage = modifiedMessage.replaceAll("%" + i, values[i]); + else break; + } + + return modifiedMessage; + } + + @NotNull + public static String setPapi(Player player, String message) { + if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { + return PlaceholderAPI.setPlaceholders(player, message); + } + + return message; + } +}