diff --git a/src/main/java/me/trouper/sentinel/server/events/violations/players/ChatEvent.java b/src/main/java/me/trouper/sentinel/server/events/violations/players/ChatEvent.java index a007717..73e98c7 100644 --- a/src/main/java/me/trouper/sentinel/server/events/violations/players/ChatEvent.java +++ b/src/main/java/me/trouper/sentinel/server/events/violations/players/ChatEvent.java @@ -31,6 +31,7 @@ import me.trouper.sentinel.server.gui.config.chat.ProfanityFilterGUI; import me.trouper.sentinel.server.gui.config.chat.SpamFilterGUI; import me.trouper.sentinel.server.gui.config.chat.UnicodeFilterGUI; import me.trouper.sentinel.server.gui.config.chat.UrlFilterGUI; +import me.trouper.sentinel.server.gui.whitelist.NewWhitelistGUI; import me.trouper.sentinel.utils.PlayerUtils; import me.trouper.sentinel.utils.ServerUtils; import org.bukkit.entity.Player; @@ -59,6 +60,7 @@ public class ChatEvent implements CustomListener { UrlFilterGUI.updater.invokeCallbacks(e); ProfanityFilterGUI.updater.invokeCallbacks(e); SpamFilterGUI.updater.invokeCallbacks(e); + NewWhitelistGUI. DangerousCommand.updater.invokeCallbacks(e); LoggedCommand.updater.invokeCallbacks(e); SpecificCommand.updater.invokeCallbacks(e); diff --git a/src/main/java/me/trouper/sentinel/server/gui/config/AntiNukeGUI.java b/src/main/java/me/trouper/sentinel/server/gui/config/AntiNukeGUI.java index 9190dd3..7925744 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/config/AntiNukeGUI.java +++ b/src/main/java/me/trouper/sentinel/server/gui/config/AntiNukeGUI.java @@ -16,6 +16,7 @@ import me.trouper.sentinel.server.events.violations.command.DangerousCommand; import me.trouper.sentinel.server.events.violations.command.LoggedCommand; import me.trouper.sentinel.server.events.violations.command.SpecificCommand; import me.trouper.sentinel.server.events.violations.entities.CommandMinecartBreak; +import me.trouper.sentinel.server.events.violations.entities.CommandMinecartEdit; import me.trouper.sentinel.server.events.violations.entities.CommandMinecartPlace; import me.trouper.sentinel.server.events.violations.entities.CommandMinecartUse; import me.trouper.sentinel.server.events.violations.players.CreativeHotbar; @@ -41,11 +42,11 @@ public class AntiNukeGUI { }) .define(10,getCheckItem(Material.COMMAND_BLOCK,"Command Block Break"), e->e.getWhoClicked().openInventory(new CommandBlockBreak().getConfigGui().getInventory())) - .define(11,getCheckItem(Material.REPEATING_COMMAND_BLOCK,"Command Block Edit"), + .define(11,getCheckItem(Material.COMMAND_BLOCK,"Command Block Edit"), e->e.getWhoClicked().openInventory(new CommandBlockEdit().getConfigGui().getInventory())) - .define(12,getCheckItem(Material.CHAIN_COMMAND_BLOCK,"Command Block Place"), + .define(12,getCheckItem(Material.COMMAND_BLOCK,"Command Block Place"), e->e.getWhoClicked().openInventory(new CommandBlockPlace().getConfigGui().getInventory())) - .define(13,getCheckItem(Material.CHAIN_COMMAND_BLOCK,"Command Block Use"), + .define(13,getCheckItem(Material.COMMAND_BLOCK,"Command Block Use"), e->e.getWhoClicked().openInventory(new CommandBlockUse().getConfigGui().getInventory())) .define(14,getCheckItem(Material.JIGSAW,"Jigsaw Block Break"), e->e.getWhoClicked().openInventory(new JigsawBlockBreak().getConfigGui().getInventory())) @@ -65,12 +66,14 @@ public class AntiNukeGUI { e->e.getWhoClicked().openInventory(new SpecificCommand().getConfigGui().getInventory())) .define(24,getCheckItem(Material.SPYGLASS,"Logged Commands"), e->e.getWhoClicked().openInventory(new LoggedCommand().getConfigGui().getInventory())) - .define(25,getCheckItem(Material.TNT_MINECART,"Command Minecart Break"), + .define(25,getCheckItem(Material.COMMAND_BLOCK_MINECART,"Command Minecart Break"), e->e.getWhoClicked().openInventory(new CommandMinecartBreak().getConfigGui().getInventory())) .define(29,getCheckItem(Material.COMMAND_BLOCK_MINECART,"Command Minecart Place"), e->e.getWhoClicked().openInventory(new CommandMinecartPlace().getConfigGui().getInventory())) .define(30,getCheckItem(Material.COMMAND_BLOCK_MINECART,"Command Minecart Use"), e->e.getWhoClicked().openInventory(new CommandMinecartUse().getConfigGui().getInventory())) + .define(31,getCheckItem(Material.COMMAND_BLOCK_MINECART,"Command Minecart Edit"), + e->e.getWhoClicked().openInventory(new CommandMinecartEdit().getConfigGui().getInventory())) .define(32,getCheckItem(Material.DIAMOND_SWORD,"NBT Item Pull"), e->e.getWhoClicked().openInventory(new CreativeHotbar().getConfigGui().getInventory())) .define(33,getCheckItem(Material.EMERALD,"Command Block Whitelist"), diff --git a/src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java b/src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java index 3f608a1..6bfd6b1 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java +++ b/src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java @@ -24,15 +24,14 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.function.BiConsumer; import java.util.stream.Collectors; public class NewWhitelistGUI extends PaginatedGUI { + private static final Map chosenPlayer = new HashMap<>(); + @Override protected String getTitle(Player p) { return Text.color("&6&lCommand Blocks &7(" + getFilterCount(p) + " filters)"); @@ -91,6 +90,13 @@ public class NewWhitelistGUI extends PaginatedGUI { filterGui.define(7, createFilterToggleItem("Chain Command Blocks", Material.CHAIN_COMMAND_BLOCK, filters.contains("CHAIN")), e -> toggleFilter(p, "CHAIN")); filterGui.define(8, createFilterToggleItem("Impulse Command Blocks", Material.COMMAND_BLOCK, filters.contains("IMPULSE")), e -> toggleFilter(p, "IMPULSE")); filterGui.define(9, createFilterToggleItem("Minecart Commands", Material.COMMAND_BLOCK_MINECART, filters.contains("MINECART")), e -> toggleFilter(p, "MINECART")); + filterGui.define(10, createFilterToggleItemValue("Specific Player",Material.BOW,filters.contains("USER"),chosenPlayer.getOrDefault(p.getUniqueId(),"null")), + e -> { + if (e.isLeftClick()) toggleFilter(p, "USER"); + else if (e.isRightClick()) { + + } + }) } @Override @@ -113,6 +119,7 @@ public class NewWhitelistGUI extends PaginatedGUI { case "WHITELISTED" -> holder.isWhitelisted(); case "NOT_WHITELISTED" -> !holder.isWhitelisted(); case "NOT_PRESENT" -> !holder.present(); + case "USER" -> holder.owner().equals(chosenPlayer.get(p.getUniqueId())); default -> false; }; result = operator.apply(result, conditionMet); @@ -200,20 +207,13 @@ public class NewWhitelistGUI extends PaginatedGUI { .build(); } - public static ConfigUpdater updater = new ConfigUpdater<>(Sentinel.getInstance().getDirector().io.violationConfig); - - protected void queuePlayer(Player player, BiConsumer action, String currentValue) { - MainGUI.awaitingCallback.add(player.getUniqueId()); - player.closeInventory(); - updater.queuePlayer(player, 20*60, (e)->{ - e.setCancelled(true); - return LegacyComponentSerializer.legacySection().serialize(e.message()); - }, (cfg, newValue) -> { - action.accept(cfg,new Args(newValue.split("\\s+"))); - cfg.save(); - player.sendMessage(Text.prefix("Value updated successfully")); - player.openInventory(getConfigGui().getInventory()); - }); - player.sendMessage(Component.text(Text.prefix("Enter the new value in chat. The value is currently set to &b%s&7. (Click to insert)".formatted(currentValue))).clickEvent(ClickEvent.suggestCommand(currentValue))); + private ItemStack createFilterToggleItemValue(String name, Material mat, boolean active, String value) { + return new ItemBuilder() + .material(mat) + .name(Text.color((active ? "&a" : "&c") + name)) + .lore(Text.color("&7Value&f: &b" + value)) + .lore(Text.color("&7Left Click to " + (active ? "disable" : "enable"))) + .lore(Text.color("&7Right Click to set value.")) + .build(); } } \ No newline at end of file diff --git a/src/main/java/me/trouper/sentinel/server/gui/whitelist/WhitelistGUI.java b/src/main/java/me/trouper/sentinel/server/gui/whitelist/WhitelistGUI.java index ac87c66..52a35b6 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/whitelist/WhitelistGUI.java +++ b/src/main/java/me/trouper/sentinel/server/gui/whitelist/WhitelistGUI.java @@ -1,12 +1,20 @@ package me.trouper.sentinel.server.gui.whitelist; +import io.github.itzispyder.pdk.commands.Args; import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; import io.github.itzispyder.pdk.plugin.gui.CustomGui; +import io.github.itzispyder.pdk.utils.misc.config.ConfigUpdater; +import io.papermc.paper.event.player.AsyncChatEvent; import me.trouper.sentinel.Sentinel; +import me.trouper.sentinel.data.config.ViolationConfig; import me.trouper.sentinel.data.types.CommandBlockHolder; import me.trouper.sentinel.server.gui.Items; +import me.trouper.sentinel.server.gui.MainGUI; import me.trouper.sentinel.utils.ServerUtils; import me.trouper.sentinel.utils.Text; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.event.ClickEvent; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.Sound; @@ -17,6 +25,7 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import java.util.*; +import java.util.function.BiConsumer; import java.util.stream.Collectors; public class WhitelistGUI { @@ -24,7 +33,6 @@ public class WhitelistGUI { private static final Map currentPages = new HashMap<>(); private static final Map> activeFilters = new HashMap<>(); private static final Map chosenOperator = new HashMap<>(); - private static final Map chosenPlayer = new HashMap<>(); public CustomGui createGUI(Player p) { ServerUtils.verbose("Creating GUI for player: %s", p.getName()); @@ -208,8 +216,7 @@ public class WhitelistGUI { private enum Filter { OWNER, CURRENT_WORLD, OTHER_OWNERS, MINECART, REPEAT, CHAIN, IMPULSE, - WHITELISTED, NOT_WHITELISTED, NOT_PRESENT, - USER + WHITELISTED, NOT_WHITELISTED, NOT_PRESENT } public enum FilterOperator { @@ -249,7 +256,6 @@ public class WhitelistGUI { case WHITELISTED -> holder.isWhitelisted(); case NOT_WHITELISTED -> !holder.isWhitelisted(); case NOT_PRESENT -> !holder.present(); - case USER -> holder.owner().equals(chosenPlayer.get(p.getUniqueId())); }; result = operator.apply(result, conditionMet); @@ -293,13 +299,6 @@ public class WhitelistGUI { e -> toggleFilter(p, Filter.IMPULSE)) .define(9, createFilterToggleItem("Minecart Commands", Material.COMMAND_BLOCK_MINECART, filters.contains(Filter.MINECART)), e -> toggleFilter(p, Filter.MINECART)) - .define(10, createFilterToggleItemValue("Specific Player",Material.BOW,filters.contains(Filter.USER),chosenPlayer.getOrDefault(p.getUniqueId(),"null")), - e -> { - if (e.isLeftClick()) toggleFilter(p,Filter.USER); - else if (e.isRightClick()) { - Callback - } - }) .define(26, Items.BACK, e-> { p.playSound(p.getLocation(),Sound.ITEM_BOOK_PAGE_TURN,1,0.8F); @@ -318,15 +317,7 @@ public class WhitelistGUI { .build(); } - private ItemStack createFilterToggleItemValue(String name, Material mat, boolean active, String value) { - return new ItemBuilder() - .material(mat) - .name(Text.color((active ? "&a" : "&c") + name)) - .lore(Text.color("&7Value&f: &b" + value)) - .lore(Text.color("&7Left Click to " + (active ? "disable" : "enable"))) - .lore(Text.color("&7Right Click to set value.")) - .build(); - } + private void toggleFilter(Player p, Filter filter) { Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); @@ -380,4 +371,6 @@ public class WhitelistGUI { .lore(operatorList) .build(); } + + } \ No newline at end of file