diff --git a/build.gradle b/build.gradle index f02ed9d1..a409f235 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = 'net.momirealms' -version = '1.3.0.3-hotfix' +version = '1.3.0.4' repositories { mavenCentral() diff --git a/src/main/java/net/momirealms/customfishing/integration/job/JobsRebornImpl.java b/src/main/java/net/momirealms/customfishing/integration/job/JobsRebornImpl.java index dedbd3ea..a503dbd2 100644 --- a/src/main/java/net/momirealms/customfishing/integration/job/JobsRebornImpl.java +++ b/src/main/java/net/momirealms/customfishing/integration/job/JobsRebornImpl.java @@ -29,15 +29,9 @@ import java.util.List; public class JobsRebornImpl implements JobInterface { - private final PlayerManager playerManager; - - public JobsRebornImpl() { - this.playerManager = Jobs.getPlayerManager(); - } - @Override public void addXp(Player player, double amount) { - JobsPlayer jobsPlayer = playerManager.getJobsPlayer(player); + JobsPlayer jobsPlayer = Jobs.getPlayerManager().getJobsPlayer(player); if (jobsPlayer != null) { List jobs = jobsPlayer.getJobProgression(); Job job = Jobs.getJob("Fisherman"); diff --git a/src/main/java/net/momirealms/customfishing/integration/papi/PlaceholderManager.java b/src/main/java/net/momirealms/customfishing/integration/papi/PlaceholderManager.java index 6f01e003..1f1f81e7 100644 --- a/src/main/java/net/momirealms/customfishing/integration/papi/PlaceholderManager.java +++ b/src/main/java/net/momirealms/customfishing/integration/papi/PlaceholderManager.java @@ -18,13 +18,15 @@ package net.momirealms.customfishing.integration.papi; import net.momirealms.customfishing.CustomFishing; +import net.momirealms.customfishing.fishing.competition.Competition; +import net.momirealms.customfishing.manager.MessageManager; import net.momirealms.customfishing.object.Function; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -33,6 +35,7 @@ public class PlaceholderManager extends Function { private CustomFishing plugin; private final Pattern basicPattern = Pattern.compile("%([^%]*)%"); private final Pattern betterPattern = Pattern.compile("\\{(.+?)\\}"); + private final Pattern allPattern = Pattern.compile("%([^%]*)%|\\{(.+?)\\}"); private CompetitionPapi competitionPapi; private StatisticsPapi statisticsPapi; private boolean hasPlaceholderAPI = false; @@ -46,13 +49,6 @@ public class PlaceholderManager extends Function { } } - public String parse(Player player, String text) { - if (hasPlaceholderAPI) { - return ParseUtil.setPlaceholders(player, text); - } - return text; - } - @Override public void load() { if (competitionPapi != null) competitionPapi.register(); @@ -65,19 +61,99 @@ public class PlaceholderManager extends Function { if (this.statisticsPapi != null) statisticsPapi.unregister(); } - public List detectBasicPlaceholders(String text){ - if (text == null || !text.contains("%")) return Collections.emptyList(); + public String parse(Player player, String text) { + if (hasPlaceholderAPI) { + return ParseUtil.setPlaceholders(player, parseInner(player, text)); + } + else { + return parseInner(player, text); + } + } + + public String parseInner(Player player, String text) { + List papis = detectBetterPlaceholders(text); + for (String papi : papis) { + text = text.replace(papi, parseSingleInner(player, papi)); + } + return text; + } + + public String parseSinglePlaceholder(Player player, String placeholder) { + if (placeholder.startsWith("{")) { + return parseSingleInner(player, placeholder); + } + else if (hasPlaceholderAPI) { + return ParseUtil.setPlaceholders(player, placeholder); + } + return placeholder; + } + + public List detectBasicPlaceholders(String text) { List placeholders = new ArrayList<>(); Matcher matcher = basicPattern.matcher(text); while (matcher.find()) placeholders.add(matcher.group()); return placeholders; } - public List detectBetterPlaceholders(String text){ - if (text == null || !(text.contains("{") && text.contains("}"))) return Collections.emptyList(); + public List detectBetterPlaceholders(String text) { List placeholders = new ArrayList<>(); Matcher matcher = betterPattern.matcher(text); while (matcher.find()) placeholders.add(matcher.group()); return placeholders; } + + public List detectAllPlaceholders(String text) { + List placeholders = new ArrayList<>(); + Matcher matcher = allPattern.matcher(text); + while (matcher.find()) placeholders.add(matcher.group()); + return placeholders; + } + + public List detectPlaceholders(String text) { + return hasPlaceholderAPI ? detectAllPlaceholders(text) : detectBetterPlaceholders(text); + } + + public String parseSingleInner(Player player, String placeholder) { + switch (placeholder) { + case "{player}" -> { + return player.getName(); + } + case "{rank}" -> { + return Competition.currentCompetition.getPlayerRank(player); + } + case "{time}" -> { + return String.valueOf(Competition.currentCompetition.getRemainingTime()); + } + case "{minute}" -> { + return String.format("%02d", Competition.currentCompetition.getRemainingTime() / 60); + } + case "{second}" -> { + return String.format("%02d", Competition.currentCompetition.getRemainingTime() % 60); + } + case "{score}" -> { + return String.format("%.1f", Competition.currentCompetition.getScore(player)); + } + case "{1st_player}" -> { + return Optional.ofNullable(Competition.currentCompetition.getRanking().getPlayerAt(1)).orElse(MessageManager.noPlayer); + } + case "{1st_score}" -> { + return Competition.currentCompetition.getRanking().getScoreAt(1) <= 0 ? MessageManager.noScore : String.format("%.1f", Competition.currentCompetition.getRanking().getScoreAt(1)); + } + case "{2nd_player}" -> { + return Optional.ofNullable(Competition.currentCompetition.getRanking().getPlayerAt(2)).orElse(MessageManager.noPlayer); + } + case "{2nd_score}" -> { + return Competition.currentCompetition.getRanking().getScoreAt(2) <= 0 ? MessageManager.noScore : String.format("%.1f", Competition.currentCompetition.getRanking().getScoreAt(2)); + } + case "{3rd_player}" -> { + return Optional.ofNullable(Competition.currentCompetition.getRanking().getPlayerAt(3)).orElse(MessageManager.noPlayer); + } + case "{3rd_score}" -> { + return Competition.currentCompetition.getRanking().getScoreAt(3) <= 0 ? MessageManager.noScore : String.format("%.1f", Competition.currentCompetition.getRanking().getScoreAt(3)); + } + default -> { + return placeholder; + } + } + } } diff --git a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java index 74624874..11800176 100644 --- a/src/main/java/net/momirealms/customfishing/manager/FishingManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/FishingManager.java @@ -925,6 +925,10 @@ public class FishingManager extends Function { } private void useFinder(Player player) { + if (!ConfigManager.getWorldsList().contains(player.getWorld().getName())) { + return; + } + FishingCondition fishingCondition = new FishingCondition(player.getLocation(), player); List possibleLoots = getPossibleLootList(fishingCondition, true, plugin.getLootManager().getAllLoots()); diff --git a/src/main/java/net/momirealms/customfishing/manager/SellManager.java b/src/main/java/net/momirealms/customfishing/manager/SellManager.java index 9b96829c..d85c2bc7 100644 --- a/src/main/java/net/momirealms/customfishing/manager/SellManager.java +++ b/src/main/java/net/momirealms/customfishing/manager/SellManager.java @@ -447,14 +447,11 @@ public class SellManager extends DataFunction { StructureModifier wrappedChatComponentStructureModifier = packet.getChatComponents(); WrappedChatComponent component = wrappedChatComponentStructureModifier.getValues().get(0); if (component.getJson().equals("{\"text\":\"{CustomFishing_Sell}\"}")) { - PlaceholderManager placeholderManager = plugin.getIntegrationManager().getPlaceholderManager(); - String text = SellManager.title.replace("{player}", player.getName()); - placeholderManager.parse(player, text); wrappedChatComponentStructureModifier.write(0, WrappedChatComponent.fromJson( GsonComponentSerializer.gson().serialize( MiniMessage.miniMessage().deserialize( - AdventureUtil.replaceLegacy(text) + AdventureUtil.replaceLegacy(plugin.getIntegrationManager().getPlaceholderManager().parse(player, SellManager.title)) ) ) ) diff --git a/src/main/java/net/momirealms/customfishing/object/DynamicText.java b/src/main/java/net/momirealms/customfishing/object/DynamicText.java index dd348524..90a67fe3 100644 --- a/src/main/java/net/momirealms/customfishing/object/DynamicText.java +++ b/src/main/java/net/momirealms/customfishing/object/DynamicText.java @@ -41,7 +41,7 @@ public class DynamicText { } private void analyze(String value) { - List placeholdersOwner = new ArrayList<>(CustomFishing.getInstance().getIntegrationManager().getPlaceholderManager().detectBasicPlaceholders(value)); + List placeholdersOwner = new ArrayList<>(CustomFishing.getInstance().getIntegrationManager().getPlaceholderManager().detectPlaceholders(value)); String origin = value; for (String placeholder : placeholdersOwner) { origin = origin.replace(placeholder, "%s"); @@ -61,31 +61,16 @@ public class DynamicText { if (ownerPlaceholders.length != 0) { PlaceholderManager placeholderManager = CustomFishing.getInstance().getIntegrationManager().getPlaceholderManager(); if ("%s".equals(originalValue)) { - string = placeholderManager.parse(owner, ownerPlaceholders[0]); + string = placeholderManager.parseSinglePlaceholder(owner, ownerPlaceholders[0]); } else { Object[] values = new String[ownerPlaceholders.length]; for (int i = 0; i < ownerPlaceholders.length; i++) { - values[i] = placeholderManager.parse(owner, ownerPlaceholders[i]); + values[i] = placeholderManager.parseSinglePlaceholder(owner, ownerPlaceholders[i]); } string = String.format(originalValue, values); } } - - RankingInterface ranking = Competition.currentCompetition.getRanking(); - - string = string .replace("{rank}", Competition.currentCompetition.getPlayerRank(owner)) - .replace("{time}", String.valueOf(Competition.currentCompetition.getRemainingTime())) - .replace("{minute}", String.format("%02d", Competition.currentCompetition.getRemainingTime() / 60)) - .replace("{second}",String.format("%02d", Competition.currentCompetition.getRemainingTime() % 60)) - .replace("{score}", String.format("%.1f", Competition.currentCompetition.getScore(owner))) - .replace("{1st_player}", Optional.ofNullable(ranking.getPlayerAt(1)).orElse(MessageManager.noPlayer)) - .replace("{1st_score}", ranking.getScoreAt(1) <= 0 ? MessageManager.noScore : String.format("%.1f", ranking.getScoreAt(1))) - .replace("{2nd_player}", Optional.ofNullable(ranking.getPlayerAt(2)).orElse(MessageManager.noPlayer)) - .replace("{2nd_score}", ranking.getScoreAt(2) <= 0 ? MessageManager.noScore : String.format("%.1f", ranking.getScoreAt(2))) - .replace("{3rd_player}", Optional.ofNullable(ranking.getPlayerAt(3)).orElse(MessageManager.noPlayer)) - .replace("{3rd_score}", ranking.getScoreAt(3) <= 0 ? MessageManager.noScore : String.format("%.1f", ranking.getScoreAt(3))); - if (!latestValue.equals(string)) { latestValue = string; return true;