From 38664862613da9d95d93c48b49bb5a0b5c2c19d7 Mon Sep 17 00:00:00 2001 From: Walkers Date: Fri, 23 Feb 2024 10:39:29 +0000 Subject: [PATCH 1/4] add toggle option for banned players in showall --- .../ExilePearl/command/CmdShowAllPearls.java | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java index 0a42c30e1..0eb26358e 100644 --- a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java +++ b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java @@ -18,6 +18,7 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; import net.md_5.bungee.api.ChatColor; import org.apache.commons.collections4.ComparatorUtils; import org.apache.commons.collections4.list.LazyList; @@ -43,6 +44,7 @@ public class CmdShowAllPearls extends PearlCommand { private static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy"); private static final Map COOLDOWNS = new HashMap<>(); private static final long COOLDOWN = 10_000; // 10 seconds + private boolean bannedPearlToggle = true; public CmdShowAllPearls(final ExilePearlApi pearlApi) { super(pearlApi); @@ -65,6 +67,10 @@ public class CmdShowAllPearls extends PearlCommand { } COOLDOWNS.put(sender.getUniqueId(), now); + generateOpenPearlsMenu(sender); + } + + private void generateOpenPearlsMenu(Player sender) { final Location senderLocation = sender.getLocation(); final double pearlExclusionRadius = this.plugin.getPearlConfig().getRulePearlRadius() * 1.2; final boolean isBanStickEnabled = this.plugin.isBanStickEnabled(); @@ -72,6 +78,14 @@ public class CmdShowAllPearls extends PearlCommand { final List> contentSuppliers = this.plugin.getPearls().stream() // Sort pearls from newest to oldest .sorted(ComparatorUtils.reversedComparator(Comparator.comparing(ExilePearl::getPearledOn))) + .filter((pearl) -> { + if (bannedPearlToggle) { + final boolean isPlayerBanned = isBanStickEnabled + && BanHandler.isPlayerBanned(pearl.getPlayerId()); + + return !isPlayerBanned; + } else return true; + }) .>map((pearl) -> () -> { final Location pearlLocation = pearl.getLocation(); final boolean isPlayerBanned = isBanStickEnabled @@ -188,7 +202,38 @@ public class CmdShowAllPearls extends PearlCommand { } LazyList lazyContents = MoreCollectionUtils.lazyList(contentSuppliers); - new MultiPageView(sender, lazyContents, "All Pearls", true).showScreen(); + final var pageView = new MultiPageView(sender, lazyContents, "All Pearls", true); + + pageView.setMenuSlot(contructBannedPearlsToggleClick(), 4); + pageView.showScreen(); } + private IClickable contructBannedPearlsToggleClick() { + final var item = new ItemStack(Material.BARRIER); + ItemUtils.handleItemMeta(item, (final ItemMeta meta) -> { + meta.displayName(Component.text() + .decoration(TextDecoration.ITALIC, false) + .color(NamedTextColor.GOLD) + .content("Toggle banned pearls") + .build()); + MetaUtils.setComponentLore(meta, + Component.text() + .decoration(TextDecoration.ITALIC, false) + .color(NamedTextColor.AQUA) + .content("Currently turned " + (!bannedPearlToggle ? "on" : "off")) + .build()); + return true; + }); + return new Clickable(item) { + @Override + public void clicked(final Player clicker) { + bannedPearlToggle = !bannedPearlToggle; + clicker.sendMessage(Component.text() + .color(NamedTextColor.GREEN) + .content("Banned pearls toggled " + (!bannedPearlToggle ? "on" : "off")) + .build()); + generateOpenPearlsMenu(clicker); + } + }; + } } From 2455dbd31cb53e51ef8df316a8b53562f6f7b685 Mon Sep 17 00:00:00 2001 From: Walkers Date: Fri, 23 Feb 2024 10:57:29 +0000 Subject: [PATCH 2/4] add cooldown to toggle button --- .../devotedmc/ExilePearl/command/CmdShowAllPearls.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java index 0eb26358e..0175e908d 100644 --- a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java +++ b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java @@ -57,17 +57,20 @@ public class CmdShowAllPearls extends PearlCommand { @Override public void perform() { final Player sender = player(); + if (onCoolDown(sender)) return; + generateOpenPearlsMenu(sender); + } + private boolean onCoolDown(Player sender) { final long now = System.currentTimeMillis(); final long previousUseTime = COOLDOWNS.compute(sender.getUniqueId(), (uuid, value) -> value == null ? 0L : value); // This is better than getOrDefault() if (previousUseTime > (now - COOLDOWN)) { sender.sendMessage(ChatColor.RED + "You can't do that yet."); - return; + return true; } COOLDOWNS.put(sender.getUniqueId(), now); - - generateOpenPearlsMenu(sender); + return false; } private void generateOpenPearlsMenu(Player sender) { @@ -227,6 +230,7 @@ public class CmdShowAllPearls extends PearlCommand { return new Clickable(item) { @Override public void clicked(final Player clicker) { + if (onCoolDown(clicker)) return; bannedPearlToggle = !bannedPearlToggle; clicker.sendMessage(Component.text() .color(NamedTextColor.GREEN) From fae6628e42bee300cf443b741f78f11f93927813 Mon Sep 17 00:00:00 2001 From: Walkers Date: Fri, 23 Feb 2024 16:22:01 +0000 Subject: [PATCH 3/4] change where toggle status is saved to be player specific --- .../ExilePearl/command/CmdShowAllPearls.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java index 0175e908d..1d1c9d910 100644 --- a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java +++ b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java @@ -44,7 +44,7 @@ public class CmdShowAllPearls extends PearlCommand { private static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy"); private static final Map COOLDOWNS = new HashMap<>(); private static final long COOLDOWN = 10_000; // 10 seconds - private boolean bannedPearlToggle = true; + private static final Map TOGGLES = new HashMap<>(); public CmdShowAllPearls(final ExilePearlApi pearlApi) { super(pearlApi); @@ -74,6 +74,8 @@ public class CmdShowAllPearls extends PearlCommand { } private void generateOpenPearlsMenu(Player sender) { + final boolean bannedPearlToggle = TOGGLES.compute(sender.getUniqueId(), + (uuid, value) -> value == null || value); // This is better than getOrDefault() final Location senderLocation = sender.getLocation(); final double pearlExclusionRadius = this.plugin.getPearlConfig().getRulePearlRadius() * 1.2; final boolean isBanStickEnabled = this.plugin.isBanStickEnabled(); @@ -207,11 +209,11 @@ public class CmdShowAllPearls extends PearlCommand { LazyList lazyContents = MoreCollectionUtils.lazyList(contentSuppliers); final var pageView = new MultiPageView(sender, lazyContents, "All Pearls", true); - pageView.setMenuSlot(contructBannedPearlsToggleClick(), 4); + pageView.setMenuSlot(constructBannedPearlsToggleClick(bannedPearlToggle), 4); pageView.showScreen(); } - private IClickable contructBannedPearlsToggleClick() { + private IClickable constructBannedPearlsToggleClick(final boolean bannedPearlToggle) { final var item = new ItemStack(Material.BARRIER); ItemUtils.handleItemMeta(item, (final ItemMeta meta) -> { meta.displayName(Component.text() @@ -231,10 +233,10 @@ public class CmdShowAllPearls extends PearlCommand { @Override public void clicked(final Player clicker) { if (onCoolDown(clicker)) return; - bannedPearlToggle = !bannedPearlToggle; + TOGGLES.put(clicker.getUniqueId(), !bannedPearlToggle); clicker.sendMessage(Component.text() .color(NamedTextColor.GREEN) - .content("Banned pearls toggled " + (!bannedPearlToggle ? "on" : "off")) + .content("Banned pearls toggled " + (bannedPearlToggle ? "on" : "off")) .build()); generateOpenPearlsMenu(clicker); } From 2f017517a5be2f595e67df93eaf0218b76764291 Mon Sep 17 00:00:00 2001 From: okx-code Date: Fri, 23 Feb 2024 23:42:50 +0000 Subject: [PATCH 4/4] Use HashSet --- .../ExilePearl/command/CmdShowAllPearls.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java index 1d1c9d910..5b3801c8a 100644 --- a/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java +++ b/plugins/exilepearl-paper/src/main/java/com/devotedmc/ExilePearl/command/CmdShowAllPearls.java @@ -8,9 +8,11 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; @@ -44,7 +46,7 @@ public class CmdShowAllPearls extends PearlCommand { private static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd MMM yyyy"); private static final Map COOLDOWNS = new HashMap<>(); private static final long COOLDOWN = 10_000; // 10 seconds - private static final Map TOGGLES = new HashMap<>(); + private static final Set TOGGLES = new HashSet<>(); public CmdShowAllPearls(final ExilePearlApi pearlApi) { super(pearlApi); @@ -74,8 +76,7 @@ public class CmdShowAllPearls extends PearlCommand { } private void generateOpenPearlsMenu(Player sender) { - final boolean bannedPearlToggle = TOGGLES.compute(sender.getUniqueId(), - (uuid, value) -> value == null || value); // This is better than getOrDefault() + final boolean bannedPearlToggle = TOGGLES.contains(sender.getUniqueId()); final Location senderLocation = sender.getLocation(); final double pearlExclusionRadius = this.plugin.getPearlConfig().getRulePearlRadius() * 1.2; final boolean isBanStickEnabled = this.plugin.isBanStickEnabled(); @@ -84,7 +85,7 @@ public class CmdShowAllPearls extends PearlCommand { // Sort pearls from newest to oldest .sorted(ComparatorUtils.reversedComparator(Comparator.comparing(ExilePearl::getPearledOn))) .filter((pearl) -> { - if (bannedPearlToggle) { + if (!bannedPearlToggle) { final boolean isPlayerBanned = isBanStickEnabled && BanHandler.isPlayerBanned(pearl.getPlayerId()); @@ -233,7 +234,11 @@ public class CmdShowAllPearls extends PearlCommand { @Override public void clicked(final Player clicker) { if (onCoolDown(clicker)) return; - TOGGLES.put(clicker.getUniqueId(), !bannedPearlToggle); + if (bannedPearlToggle) { + TOGGLES.add(clicker.getUniqueId()); + } else { + TOGGLES.remove(clicker.getUniqueId()); + } clicker.sendMessage(Component.text() .color(NamedTextColor.GREEN) .content("Banned pearls toggled " + (bannedPearlToggle ? "on" : "off"))