From 0afbbc8549ccee750223c1495a9d04d0cc07899b Mon Sep 17 00:00:00 2001 From: wolf Date: Fri, 21 Mar 2025 23:39:07 -0500 Subject: [PATCH] Fixed GUI, rate limit, and some NBT checks --- .gradle/8.5/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.5/checksums/md5-checksums.bin | Bin 41147 -> 41147 bytes .gradle/8.5/checksums/sha1-checksums.bin | Bin 171413 -> 171683 bytes .../8.5/executionHistory/executionHistory.bin | Bin 2344489 -> 2456695 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.5/fileHashes/fileHashes.bin | Bin 288969 -> 290269 bytes .gradle/8.5/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.5/fileHashes/resourceHashesCache.bin | Bin 206695 -> 210775 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../sentinel/data/config/NBTConfig.class | Bin 3642 -> 3642 bytes .../trouper/sentinel/server/gui/MainGUI.class | Bin 5238 -> 5235 bytes .../me/trouper/sentinel/utils/FileUtils.class | Bin 5043 -> 3645 bytes .../main/me/trouper/sentinel/utils/Text.class | Bin 6064 -> 6180 bytes .../compileJava/previous-compilation-data.bin | Bin 91366 -> 91618 bytes .../sentinel/data/storage/NBTStorage.java | 140 +++++-- .../data/types/CommandBlockHolder.java | 90 +++-- .../server/commands/ExtraCommand.java | 11 +- .../events/violations/AbstractViolation.java | 1 - .../events/violations/players/ChatEvent.java | 4 +- .../violations/players/CreativeHotbar.java | 9 +- .../trouper/sentinel/server/gui/MainGUI.java | 3 +- .../sentinel/server/gui/PaginatedGUI.java | 88 ++++- .../sentinel/server/gui/nbt/NBTGui.java | 110 ------ .../server/gui/whitelist/NewWhitelistGUI.java | 241 ------------ .../server/gui/whitelist/WhitelistGUI.java | 365 ++++++------------ .../me/trouper/sentinel/utils/FileUtils.java | 57 --- .../java/me/trouper/sentinel/utils/Text.java | 3 +- .../utils/display/BlockDisplayRaytracer.java | 2 +- .../sentinel/utils/trees/EmbedFormatter.java | 3 +- 30 files changed, 357 insertions(+), 770 deletions(-) delete mode 100644 src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java diff --git a/.gradle/8.5/checksums/checksums.lock b/.gradle/8.5/checksums/checksums.lock index 7c1a560ffb59aee6ed0ff5e042d54a55b2164497..3f3fdf9e196cb1815a07c9c2ca06c61ad3acfcaa 100644 GIT binary patch literal 17 VcmZSfyWC&;{v_{G1~A|$0{}Vr1r-1Q literal 17 VcmZSfyWC&;{v_{G1~A}>0{}VT1pNR2 diff --git a/.gradle/8.5/checksums/md5-checksums.bin b/.gradle/8.5/checksums/md5-checksums.bin index 5268b4d7a7e7ac485c9bf6c275130af124cb7e18..599822cc47603eadfd42694bd4b0eb715c0c25ad 100644 GIT binary patch delta 37 ocmdmekZJcprVS1qtW&v#f^{~#cBDxN?B1fx!~h270zgU+0Qad0!TI<356XpdkcAq_%fH8F^O}R? zWh}q+x0_NZlG4HfQ!WYzF9-75%yW32Z{O$h?JFzVm5_FOCIYX!awJ(V%uZi7Csbss zqJ#6WD}T7NVU5-3LDvO$tbPFONkY5QzxUt?$03PLxxkUE3%?J3IJcamal4wmjYC$Z zkYS!`8PSIRT>lBfRmj(1d1)Z;35g<*M&1n&qicu`s?f}=o6wjDhs+&>bEB^7d;Zv# z@%a_c%dGhf+ye9j@)k9W$0zM%<0%>tQDl6*i0a%Kmq0xdI=C9{Ww#RQQq>ebn_#c~ zSZq=|_b*$??m-)Md(c1&b7-O^uK44sfkGa1q)_-miZxnPr?m74dMfi_CN=pvy5&U! zoAlx+s+C{?Mw^UO>O+wvKbDZ)hsFG1>Z95|tmMl4Ljhk*{llCyq$t56>t99s4h1x* mw-nyHs@pmammi-ap|P@?>$>t(l?r5Kf87xSb2^Xst^5Ty+ML4x delta 253 zcmZ3ymuu>7t_@S3Fn-uP^$Dl&=561bq**62Foeoa-+hNsal4x^BXbtxz3pDLjDhUi zH@7gxb8gq_V-ytM9=w!Ml9fs4;YLLR=IPU)F!D{GwU*HgL^QKb`M=k%XR>3p)OMS7 zjDBp4hqrfcVZ0!}koaIW{eC5r z-1P2TCco+1tAMQYc}x=9`SY0W@vuzVy0mKh$0{Z@IhO46UwNko&SWy0?mLso3`EFH vUpSLV0x0pDZTjAsOc_Ac>ua}b&SLt&H2v`$ptR;3CW-0Mvw*DJxl9@W_FZG- diff --git a/.gradle/8.5/executionHistory/executionHistory.bin b/.gradle/8.5/executionHistory/executionHistory.bin index 070bcd1501a0b433bad536564ce49ba806a85199..1a5e0024f690a83493471b1274fc89c4535bf445 100644 GIT binary patch delta 16662 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 diff --git a/.gradle/8.5/executionHistory/executionHistory.lock b/.gradle/8.5/executionHistory/executionHistory.lock index fdf7eea3e26a5178661e5dda6913f28ff799d9eb..c279a91ba68e16c548cb228cf3e31e2fb83f7167 100644 GIT binary patch literal 17 VcmZSnD(U&&^z=?{1~3qP2LLq|1rY!M literal 17 VcmZSnD(U&&^z=?{1~3q{1^_f;1YQ6D diff --git a/.gradle/8.5/fileHashes/fileHashes.bin b/.gradle/8.5/fileHashes/fileHashes.bin index b0bd50271a4f4a012ab22a65ead228c1cf4b9ad7..89695c9fcaa3363b69f7b723950e3858279d8114 100644 GIT binary patch delta 5191 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 P0T5_A2C0UitM&f@0Nu%x delta 2999 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 delta 935 zcmYk4T}+#06vub|FT=LO(&++kadYj(DjMes8MD*?rHr(6ZUy%RONhk_DT`*XnAmt> z7)n+f5zK2m)DUqov4jgl^O~GxF{CE26%#i>4W(WTcj2ZcP)&>SNMvufe6PG`*~z0Yobhe+Ofmc%pDQ5@N@(^=OZZa)nm}jkDJ%V=&*U|(|Wu4+2f0A6) zbW|=sM?dW3WSqi$FHQw13{e2$eSxMlE?pp9T*G7~ZXcmTk{nSLq;Rn;w)Z8n*d+0) zs?Uy5^?G=eN}RYv-{IjAo_Q1F+%o|$rzcd!KPK?9435#_IGtvX1shyzMM5%G_=tbA z!7FXMut1sn?uS*B(1OO*bSM4FhX>$>YbEOrSO24ichzb0^5F$My@#IS(rf7Ap4U;5zHxj2*`35Du{EWL z4W(53=@j08_$T0jBqouqkoI@ru<+0f!m=`>P;g+9bhgeanCV%lQMlfwE_vk&dI|f| zS$E=re<9dD!5JGp&I5}Wkm4egU4pqX=Efz}m-4D|(Z%cdon$Ppbj!6B_$tJ9Qw_zK zzZ2ueFBKC1s-h$3zec>mIQOH@bsL!D;)Zhfog(IpUw%qsZ$s9-`JgE9fBOCglXY1J diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 4e38d46de2be73ed0efffed504a5e495b64be816..77f36e096ed3bf1c03322ba877804a3f4fa242fb 100644 GIT binary patch literal 17 VcmZSnKTT<6%cI}H3}7HB0suf%1w{Y= literal 17 VcmZSnKTT<6%cI}H3}7Js4gf(a1|0wZ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index 31823eb31023979a10bcba985b085cfac667e840..c020374f4ecd426983b3f83a3bf1ce8c201c924e 100644 GIT binary patch literal 8 PcmZQzV4S*pw(NQU2%Q4C literal 8 PcmZQzV4S-1``Ty#3Uvcd diff --git a/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class b/build/classes/java/main/me/trouper/sentinel/data/config/NBTConfig.class index 024789638b77e05c2ffa65ad82820395e97f0e74..a81e4caf0a7463d4babd147c4bb2b311dae6e511 100644 GIT binary patch delta 218 zcmWO0DKLa#00!XaD+*>5#r$sLKGwSL`?kv{ilQirq9|JwMX*It6oNnzR#CPnilS^$ z6h%=s_~vczT}TSaW3eiis8z2{gT{z9O}aGe*J4Pk@yN_-x1__mPMN6g>9()OfnJCD z97XrB0Vh&U4LXySi|KR2E{wP|DsRknY`Zbx)}%XA9!z`6n(-VbUd(wluV}%WMelL) n!?I5+N>+VY^Bphz*zjx9pDktEA;^RZ*-&XG)Y#2mRp0*u%@!&n delta 218 zcmWO0DKvy(0EOY_D+RvBjL=DbHfToTpD#1iPy&6m~dy(L(Y^()1IQ{*{qT|FXp{k o@D{c2mV8+DX~maS-|@zeb-y&urP=*a50E82r)=7NHa(>s4z$|=m1$( z3^EKJ46+Pi3~~&S4Dt-|3}TbR1;bdCfPCf2;zIJ1FA6%cssedxKwc!PCeRG6$)!R; zoVpCG40;R#4EmEV2*vRlG4L=L1MM&ZnrAxMTDXkYf`OC4l0gJ$gA{}H7{nNifo7Ubwh%7kwPfG~nl8d%4YbW>@@`>oM$yUa GA~^s?9vl?_ diff --git a/build/classes/java/main/me/trouper/sentinel/utils/FileUtils.class b/build/classes/java/main/me/trouper/sentinel/utils/FileUtils.class index 6f395c1b8eaa7e8d2bc0e877de2a001b40afe1b9..629fc4fbc4253317589753ca4ae4d97347f693fa 100644 GIT binary patch delta 1256 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 delta 1471 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ɰLrSnkLH0@~IVgf8d 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

>cxN?N`( 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 { // Mapping from file name to owner UUID (as a String) public Map caughtItems = new HashMap<>(); - - private final File mappingFile; - private final File storageDir; - - public NBTStorage() { - // Create the storage directory: /storage/nbt/ inside the plugin data folder - File dataFolder = Sentinel.getInstance().getDirector().io.getDataFolder(); - storageDir = new File(dataFolder, "storage/nbt"); - if (!storageDir.exists()) { - storageDir.mkdirs(); - } - // The mapping file that stores the file-name to owner UUID mapping - mappingFile = new File(dataFolder, "storage/nbt.json"); - mappingFile.getParentFile().mkdirs(); - } - + /** * Stores an ItemStack's serialized NBT to a unique file * and maps the generated file name to the owner UUID. @@ -41,11 +35,12 @@ public class NBTStorage implements JsonSerializable { */ public void storeItem(ItemStack item, UUID owner) { // Generate a unique file name with a .nbt extension + File storageDir = new File(Sentinel.getInstance().getDirector().io.getDataFolder(), "storage/nbt"); String fileName = UUID.randomUUID().toString() + ".nbt"; File file = new File(storageDir, fileName); try (FileOutputStream fos = new FileOutputStream(file); - OutputStreamWriter writer = new OutputStreamWriter(fos)) { - + OutputStreamWriter writer = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { + String nbt = serializeItem(item); writer.write(nbt); } catch (IOException e) { @@ -55,25 +50,98 @@ public class NBTStorage implements JsonSerializable { caughtItems.put(fileName, owner.toString()); save(); } + + public boolean deleteItem(String fileName) { + File storageDir = new File(Sentinel.getInstance().getDirector().io.getDataFolder(), "storage/nbt"); + File file = new File(storageDir, fileName); + caughtItems.remove(fileName); + save(); + return file.delete(); + } - /** - * Placeholder for item serialization. - * Replace this with an actual NBT serialization logic. - * - * @param item the ItemStack to serialize - * @return a String representing the NBT data of the item - */ - private String serializeItem(ItemStack item) { - - return item.toString(); + public static ItemStack getItem(String fileName) { + File storageDir = new File(Sentinel.getInstance().getDirector().io.getDataFolder(), "storage/nbt"); + File file = new File(storageDir, fileName); + try (FileInputStream fis = new FileInputStream(file)) { + StringBuilder b64 = new StringBuilder(); + int content; + while ((content = fis.read()) != -1) { + b64.append((char) content); + } + //ServerUtils.verbose("Getting item with fis: " + b64); + return deserializeItem(b64.toString()); + } catch (FileNotFoundException e) { + Sentinel.getInstance().getDirector().io.nbtStorage.caughtItems.remove(fileName); + Sentinel.getInstance().getDirector().io.nbtStorage.save(); + return new ItemBuilder().material(Material.STRUCTURE_VOID) + .name(Text.color("&cFile not found.")) + .lore(Text.color("&7This item no longer exists and has been removed from the list.")) + .build(); + } catch (IOException e) { + e.printStackTrace(); + return new ItemBuilder().material(Material.STRUCTURE_VOID) + .name(Text.color("&cUnknown IO exception.")) + .lore(Text.color("&4Check Console.")) + .build(); + } } - // Make a deserialize method too. - + public static String serializeItem(ItemStack item) { + if (item == null) { + return null; + } + try { + // Serialize ItemStack to a Map + Map serializedItem = item.serialize(); + + // Save the Map into a YAML configuration + YamlConfiguration config = new YamlConfiguration(); + config.set("item", serializedItem); + String yamlString = config.saveToString(); + + // Encode YAML string to Base64 + return Base64.getEncoder().encodeToString(yamlString.getBytes(StandardCharsets.UTF_8)); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static ItemStack deserializeItem(String data) { + if (data == null || data.isEmpty()) { + return null; + } + try { + // Decode Base64 to YAML string + byte[] decodedData = Base64.getDecoder().decode(data); + String yamlString = new String(decodedData, StandardCharsets.UTF_8); + + // Load YAML configuration from string + YamlConfiguration config = new YamlConfiguration(); + config.loadFromString(yamlString); + + // Extract the serialized Map from the configuration + ConfigurationSection itemSection = config.getConfigurationSection("item"); + if (itemSection == null) { + return null; // Invalid data + } + + // Convert ConfigurationSection to a nested Map + Map serializedItem = itemSection.getValues(true); + + // Deserialize the Map back into an ItemStack + return ItemStack.deserialize(serializedItem); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } @Override public File getFile() { - return mappingFile; + File file = new File(Sentinel.getInstance().getDirector().io.getDataFolder(), "storage/nbt.json"); + new File(Sentinel.getInstance().getDirector().io.getDataFolder(), "storage/nbt").mkdirs(); + file.getParentFile().mkdirs(); + return file; } - -} +} \ No newline at end of file diff --git a/src/main/java/me/trouper/sentinel/data/types/CommandBlockHolder.java b/src/main/java/me/trouper/sentinel/data/types/CommandBlockHolder.java index c758c5a..9d83e39 100644 --- a/src/main/java/me/trouper/sentinel/data/types/CommandBlockHolder.java +++ b/src/main/java/me/trouper/sentinel/data/types/CommandBlockHolder.java @@ -76,47 +76,57 @@ public class CommandBlockHolder { } public boolean present() { - if (this.loc.isUUID()) { - Entity cart = Bukkit.getEntity(this.loc.toUIID()); - if (!(cart instanceof CommandMinecart cm)) return false; - return this.command.equals(cm.getCommand()); - } else { - Location where = loc.translate(); - boolean preLoaded = where.isChunkLoaded(); - where.getChunk().load(false); - Block b = where.getBlock(); - if (!(b.getState() instanceof CommandBlock c) || !(b.getBlockData() instanceof org.bukkit.block.data.type.CommandBlock cb)) { - ServerUtils.verbose(1,"Block is not present due to not being a command block. Whitelisted: %s",this.isWhitelisted()); - if (!this.isWhitelisted()) this.delete(); - return false; + try { + if (this.loc.isUUID()) { + Entity cart = Bukkit.getEntity(this.loc.toUIID()); + if (!(cart instanceof CommandMinecart cm)) return false; + return this.command.equals(cm.getCommand()); + } else { + Location where = loc.translate(); + boolean preLoaded = where.isChunkLoaded(); + + if (!where.isChunkLoaded()) where.getChunk().load(false); + + + Block b = where.getBlock(); + if (!(b.getState() instanceof CommandBlock c) || !(b.getBlockData() instanceof org.bukkit.block.data.type.CommandBlock cb)) { + ServerUtils.verbose(1,"Block is not present due to not being a command block. Whitelisted: %s",this.isWhitelisted()); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (!this.getDirection().equals(cb.getFacing())) { + ServerUtils.verbose("Block is not present due to facing mismatch. Should be '%s', is '%s'",this.facing(),cb.getFacing()); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (!this.getType().equals(c.getType())) { + ServerUtils.verbose("Block is not present due to type mismatch. Should be '%s', is '%s'",this.type(),c.getType()); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (!this.command().equals(c.getCommand())) { + ServerUtils.verbose("Block is not present due to command mismatch. Should be '%s', is '%s'",this.command(),c.getCommand()); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (this.isConditional() != cb.isConditional()) { + ServerUtils.verbose("Block is not present due to conditional mismatch."); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (this.isAuto() != (c.getPersistentDataContainer().getOrDefault(Sentinel.getInstance().getNamespace("auto"), PersistentDataType.BYTE,(byte) 0) == (byte) 1)) { + ServerUtils.verbose("Block is not present due to auto mismatch."); + if (!this.isWhitelisted()) this.delete(); + return false; + } + if (!preLoaded) where.getChunk().unload(); + return true; } - if (!this.getDirection().equals(cb.getFacing())) { - ServerUtils.verbose("Block is not present due to facing mismatch. Should be '%s', is '%s'",this.facing(),cb.getFacing()); - if (!this.isWhitelisted()) this.delete(); - return false; - } - if (!this.getType().equals(c.getType())) { - ServerUtils.verbose("Block is not present due to type mismatch. Should be '%s', is '%s'",this.type(),c.getType()); - if (!this.isWhitelisted()) this.delete(); - return false; - } - if (!this.command().equals(c.getCommand())) { - ServerUtils.verbose("Block is not present due to command mismatch. Should be '%s', is '%s'",this.command(),c.getCommand()); - if (!this.isWhitelisted()) this.delete(); - return false; - } - if (this.isConditional() != cb.isConditional()) { - ServerUtils.verbose("Block is not present due to conditional mismatch."); - if (!this.isWhitelisted()) this.delete(); - return false; - } - if (this.isAuto() != (c.getPersistentDataContainer().getOrDefault(Sentinel.getInstance().getNamespace("auto"), PersistentDataType.BYTE,(byte) 0) == (byte) 1)) { - ServerUtils.verbose("Block is not present due to auto mismatch."); - if (!this.isWhitelisted()) this.delete(); - return false; - } - if (!preLoaded) where.getChunk().unload(); - return true; + } catch (IllegalStateException ex) { + ServerUtils.verbose("Do not check present command blocks asynchronously. Bukkit has something to say about this."); + ex.printStackTrace(); + ServerUtils.verbose("Not present because the command block is not loaded. I really should make this not call async, and just have a variable that I update every so often..."); + return false; } } diff --git a/src/main/java/me/trouper/sentinel/server/commands/ExtraCommand.java b/src/main/java/me/trouper/sentinel/server/commands/ExtraCommand.java index 0eefffa..5f36c52 100644 --- a/src/main/java/me/trouper/sentinel/server/commands/ExtraCommand.java +++ b/src/main/java/me/trouper/sentinel/server/commands/ExtraCommand.java @@ -13,10 +13,7 @@ import me.trouper.sentinel.Sentinel; import me.trouper.sentinel.data.types.IPLocation; import me.trouper.sentinel.data.types.SerialLocation; import me.trouper.sentinel.server.events.extras.ShadowRealmEvents; -import me.trouper.sentinel.utils.IPUtils; -import me.trouper.sentinel.utils.ImageUtils; -import me.trouper.sentinel.utils.Random; -import me.trouper.sentinel.utils.Text; +import me.trouper.sentinel.utils.*; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.Style; @@ -36,6 +33,10 @@ import java.util.concurrent.atomic.AtomicInteger; public class ExtraCommand implements CustomCommand { @Override public void dispatchCommand(CommandSender sender, Command command, String s, Args args) { + if (!PlayerUtils.isTrusted(sender)) { + sender.sendMessage(Sentinel.getInstance().getDirector().io.lang.permissions.noTrust); + return; + } if (args.getSize() < 2) { sender.sendMessage(Text.prefix(""" &r&6Extra's &7Guide&f: @@ -106,7 +107,7 @@ public class ExtraCommand implements CustomCommand { private void crashPlayer(CommandSender sender, Player victim, String target) { var player = PacketEvents.getAPI().getPlayerManager().getUser(victim); - player.sendPacket(new WrapperPlayServerUpdateViewDistance(4000)); + player.sendPacket(new WrapperPlayServerUpdateViewDistance(32000)); sender.sendMessage(Text.prefix("Crashing %s.".formatted(target))); } diff --git a/src/main/java/me/trouper/sentinel/server/events/violations/AbstractViolation.java b/src/main/java/me/trouper/sentinel/server/events/violations/AbstractViolation.java index bde902e..6beb5b0 100644 --- a/src/main/java/me/trouper/sentinel/server/events/violations/AbstractViolation.java +++ b/src/main/java/me/trouper/sentinel/server/events/violations/AbstractViolation.java @@ -142,7 +142,6 @@ public abstract class AbstractViolation implements CustomListener { itemInfo.addKeyValue(Sentinel.getInstance().getDirector().io.lang.violations.protections.infoNode.hasLore,item.getItemMeta().hasLore() ? Sentinel.getInstance().getDirector().io.lang.generic.yes : Sentinel.getInstance().getDirector().io.lang.generic.no); itemInfo.addKeyValue(Sentinel.getInstance().getDirector().io.lang.violations.protections.infoNode.hasAttributes,item.getItemMeta().hasAttributeModifiers() ? Sentinel.getInstance().getDirector().io.lang.generic.yes : Sentinel.getInstance().getDirector().io.lang.generic.no); itemInfo.addKeyValue(Sentinel.getInstance().getDirector().io.lang.violations.protections.infoNode.hasEnchants,item.getItemMeta().hasEnchants() ? Sentinel.getInstance().getDirector().io.lang.generic.yes : Sentinel.getInstance().getDirector().io.lang.generic.no); - itemInfo.addField(Sentinel.getInstance().getDirector().io.lang.violations.protections.infoNode.nbtStored, FileUtils.createNBTLog(item)); } return itemInfo; 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 8751e45..d93eb94 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,7 +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.server.gui.whitelist.WhitelistGUI; import me.trouper.sentinel.utils.PlayerUtils; import me.trouper.sentinel.utils.ServerUtils; import org.bukkit.entity.Player; @@ -60,7 +60,7 @@ public class ChatEvent implements CustomListener { UrlFilterGUI.updater.invokeCallbacks(e); ProfanityFilterGUI.updater.invokeCallbacks(e); SpamFilterGUI.updater.invokeCallbacks(e); - NewWhitelistGUI.updater.invokeCallbacks(e); + WhitelistGUI.updater.invokeCallbacks(e); DangerousCommand.updater.invokeCallbacks(e); LoggedCommand.updater.invokeCallbacks(e); SpecificCommand.updater.invokeCallbacks(e); diff --git a/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java b/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java index 303285d..613ce1f 100644 --- a/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java +++ b/src/main/java/me/trouper/sentinel/server/events/violations/players/CreativeHotbar.java @@ -24,6 +24,7 @@ import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; +import java.util.UUID; public class CreativeHotbar extends AbstractViolation { @@ -45,7 +46,10 @@ public class CreativeHotbar extends AbstractViolation { if (!new RateLimitCheck().passes(new Pair<>(p,i))) { List punishmentCommands = new ArrayList<>(); for (String punishmentCommand : Sentinel.getInstance().getDirector().io.nbtConfig.rateLimit.punishmentCommands) { - punishmentCommands.add(punishmentCommand.formatted(RateLimitCheck.dataUsed.get(p.getUniqueId()),Sentinel.getInstance().getDirector().io.nbtConfig.rateLimit.rateLimitBytes)); + try { + punishmentCommand = punishmentCommand.formatted(RateLimitCheck.dataUsed.get(p.getUniqueId()),Sentinel.getInstance().getDirector().io.nbtConfig.rateLimit.rateLimitBytes); + } catch (Exception ignored) {} + punishmentCommands.add(punishmentCommand); } ServerUtils.verbose("Player flags rate limit, performing action"); @@ -69,8 +73,7 @@ public class CreativeHotbar extends AbstractViolation { if (new ItemCheck().passes(i)) return; ServerUtils.verbose("NBT: Item doesn't pass, performing action"); - Sentinel.getInstance().getDirector().io.nbtStorage.caughtItems.put(NBTStorage.toB64(i),p.getUniqueId().toString()); - Sentinel.getInstance().getDirector().io.nbtStorage.save(); + Sentinel.getInstance().getDirector().io.nbtStorage.storeItem(i, p.getUniqueId()); ActionConfiguration.Builder config = new ActionConfiguration.Builder() .setEvent(e) diff --git a/src/main/java/me/trouper/sentinel/server/gui/MainGUI.java b/src/main/java/me/trouper/sentinel/server/gui/MainGUI.java index 85c40ad..c32be73 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/MainGUI.java +++ b/src/main/java/me/trouper/sentinel/server/gui/MainGUI.java @@ -4,7 +4,6 @@ import io.github.itzispyder.pdk.plugin.gui.CustomGui; import me.trouper.sentinel.Sentinel; import me.trouper.sentinel.server.gui.config.ConfigGUI; import me.trouper.sentinel.server.gui.nbt.NBTGui; -import me.trouper.sentinel.server.gui.whitelist.NewWhitelistGUI; import me.trouper.sentinel.server.gui.whitelist.WhitelistGUI; import me.trouper.sentinel.utils.PlayerUtils; import me.trouper.sentinel.utils.Text; @@ -32,7 +31,7 @@ public class MainGUI { .build(); private void openWhitelist(InventoryClickEvent e) { - e.getWhoClicked().openInventory(new NewWhitelistGUI().createGUI((Player) e.getWhoClicked()).getInventory()); + e.getWhoClicked().openInventory(new WhitelistGUI().createGUI((Player) e.getWhoClicked()).getInventory()); } private void openNBT(InventoryClickEvent e) { e.getWhoClicked().openInventory(new NBTGui().createGUI((Player) e.getWhoClicked()).getInventory()); diff --git a/src/main/java/me/trouper/sentinel/server/gui/PaginatedGUI.java b/src/main/java/me/trouper/sentinel/server/gui/PaginatedGUI.java index 714326e..d1fdc5b 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/PaginatedGUI.java +++ b/src/main/java/me/trouper/sentinel/server/gui/PaginatedGUI.java @@ -3,7 +3,6 @@ package me.trouper.sentinel.server.gui; import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; import io.github.itzispyder.pdk.plugin.gui.CustomGui; import me.trouper.sentinel.Sentinel; -import me.trouper.sentinel.data.types.CommandBlockHolder; import me.trouper.sentinel.utils.ServerUtils; import me.trouper.sentinel.utils.Text; import org.bukkit.Bukkit; @@ -13,8 +12,10 @@ import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; public abstract class PaginatedGUI { @@ -24,6 +25,10 @@ public abstract class PaginatedGUI { protected static final Map chosenOperator = new HashMap<>(); protected abstract CustomGui backGUI(); + protected boolean isAsynchronous() { + return false; + }; + public CustomGui createGUI(Player p) { ServerUtils.verbose("Creating GUI for player: %s", p.getName()); @@ -31,7 +36,7 @@ public abstract class PaginatedGUI { return CustomGui.create() .title(getTitle(p)) .size(54) - .onDefine(inv -> setupPage(p, inv)) + .onDefine(inv -> setupPage(p, inv, isAsynchronous())) .defineMain(e -> handleMainClick(p, e)) .define(45, createNavigationItem("Previous", page - 1), e -> changePage(p, -1)) .define(49, createFilterItem(p), e -> openFilterMenu(p)) @@ -41,29 +46,63 @@ public abstract class PaginatedGUI { protected abstract String getTitle(Player p); - protected void setupPage(Player p, Inventory inv) { - ServerUtils.verbose(1,"Setting up page for player: %s", p.getName()); + protected void setupPage(Player p, Inventory inv, boolean runAsynchronously) { + ServerUtils.verbose(1, "Setting up page for player: %s", p.getName()); int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v)); - List filtered = filterEntries(p, chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND)); - ServerUtils.verbose(1,"Current page: %d, Total entries: %d", page, filtered.size()); - - // Clear previous items - for (int i = 0; i < ITEMS_PER_PAGE; i++) { - inv.setItem(i, null); - } - - // Add paginated items - for (int i = page * ITEMS_PER_PAGE; i < (page + 1) * ITEMS_PER_PAGE && i < filtered.size(); i++) { - T item = filtered.get(i); - inv.setItem(i % ITEMS_PER_PAGE, createDisplayItem(item)); - } - - // Add persistent bottom items + FilterOperator operator = chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND); + + // Add persistent bottom items (navigation and filter) inv.setItem(45, createNavigationItem("Previous", realizePage(p, page - 1))); inv.setItem(49, createFilterItem(p)); inv.setItem(53, createNavigationItem("Next", realizePage(p, page + 1))); - } + // Fill the remaining bottom slots with red stained glass + for (int slot : new int[]{46, 47, 48, 50, 51, 52}) { + inv.setItem(slot, createPlaceholderItem(true)); + } + + Runnable task = ()->{ + List filtered = filterEntries(p, operator); + int totalEntries = filtered.size(); + int startIndex = page * ITEMS_PER_PAGE; + int endIndex = Math.min(startIndex + ITEMS_PER_PAGE, totalEntries); + List pageEntries = filtered.subList(startIndex, endIndex); + int pageSize = pageEntries.size(); + + AtomicInteger remaining = new AtomicInteger(pageSize); + + // Process each entry and update GUI as each item loads + for (int i = 0; i < pageSize; i++) { + T entry = pageEntries.get(i); + ItemStack displayItem = createDisplayItem(entry); + int slot = i; + + Bukkit.getScheduler().runTask(Sentinel.getInstance(), () -> { + inv.setItem(slot, displayItem); + if (remaining.decrementAndGet() == 0) { + // Update remaining main slots and bottom slots to lime + for (int bottomSlot : new int[]{46, 47, 48, 50, 51, 52}) { + inv.setItem(bottomSlot, createPlaceholderItem(false)); + } + } + }); + } + + // Handle case where there are no items + if (pageSize == 0) { + Bukkit.getScheduler().runTask(Sentinel.getInstance(), () -> { + for (int bottomSlot : new int[]{46, 47, 48, 50, 51, 52}) { + inv.setItem(bottomSlot, createPlaceholderItem(false)); + } + }); + } + }; + + // Start async loading of items + if (runAsynchronously) Bukkit.getScheduler().runTaskAsynchronously(Sentinel.getInstance(), task); + else task.run(); + } + protected abstract void handleMainClick(Player p, InventoryClickEvent e); protected abstract ItemStack createDisplayItem(T item); @@ -130,6 +169,15 @@ public abstract class PaginatedGUI { .build(); } + private ItemStack createPlaceholderItem(boolean isRed) { + Material material = isRed ? Material.RED_STAINED_GLASS_PANE : Material.LIME_STAINED_GLASS_PANE; + String name = isRed ? "&cComputing Entries..." : "&aAll Entries Loaded."; + return new ItemBuilder() + .material(material) + .name(Text.color(name)) + .build(); + } + private ItemStack createFilterItem(Player p) { List operatorList = new ArrayList<>(); FilterOperator chosen = chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND); diff --git a/src/main/java/me/trouper/sentinel/server/gui/nbt/NBTGui.java b/src/main/java/me/trouper/sentinel/server/gui/nbt/NBTGui.java index fea408c..e69de29 100644 --- a/src/main/java/me/trouper/sentinel/server/gui/nbt/NBTGui.java +++ b/src/main/java/me/trouper/sentinel/server/gui/nbt/NBTGui.java @@ -1,110 +0,0 @@ -package me.trouper.sentinel.server.gui.nbt; - -import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; -import io.github.itzispyder.pdk.plugin.gui.CustomGui; -import io.github.itzispyder.pdk.utils.misc.Pair; -import me.trouper.sentinel.Sentinel; -import me.trouper.sentinel.data.storage.NBTStorage; -import me.trouper.sentinel.server.gui.MainGUI; -import me.trouper.sentinel.server.gui.PaginatedGUI; -import me.trouper.sentinel.utils.ServerUtils; -import me.trouper.sentinel.utils.Text; -import org.bukkit.Bukkit; -import org.bukkit.Sound; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -import java.util.*; -import java.util.stream.Collectors; - -public class NBTGui extends PaginatedGUI> { - - private final NBTStorage nbtStorage; - - public NBTGui() { - this.nbtStorage = Sentinel.getInstance().getDirector().io.nbtStorage; - } - - @Override - protected CustomGui backGUI() { - return new MainGUI().home; - } - - @Override - protected String getTitle(Player p) { - return Text.color("&6&lItem Ownership &7(" + getFilterCount(p) + " items)"); - } - - @Override - protected void handleMainClick(Player p, InventoryClickEvent e) { - int slot = e.getSlot(); - if (slot >= 45) return; - if (e.getInventory().getItem(slot) == null) return; - int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v)); - List> filtered = filterEntries(p, chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND)); - int index = page * ITEMS_PER_PAGE + slot; - if (index < filtered.size()) { - Map.Entry entry = filtered.get(index); - ItemStack item = NBTStorage.toItem(entry.getKey()); - if (item != null) { - if (e.isLeftClick()) { - p.getInventory().addItem(item); - p.playSound(p.getLocation(), Sound.ENTITY_ITEM_PICKUP, 1, 1F); - } else if (e.isRightClick()) { - nbtStorage.caughtItems.remove(entry.getKey()); - p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1, 2F); - p.openInventory(createGUI(p).getInventory()); - } - } - } - } - - @Override - protected ItemStack createDisplayItem(Map.Entry entry) { - ItemStack item = NBTStorage.toItem(entry.getKey()); - if (item == null) return null; - - List lore = new ArrayList<>(); - lore.add(Text.color("&7Owner: " + Bukkit.getOfflinePlayer(UUID.fromString(entry.getValue())).getName())); - lore.add(""); - lore.add(Text.color("&eLeft-Click to give item")); - lore.add(Text.color("&eRight-Click to delete item")); - - return new ItemBuilder() - .material(item.getType()) - .name(Text.color("&b" + item.getType().name())) - .lore(lore) - .build(); - } - - @Override - protected void addFilterItems(CustomGui.GuiBuilder filterGui, Player p, Set filters) { - // Add any specific filter items here if needed - } - - @Override - protected List> filterEntries(Player p, FilterOperator operator) { - Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); - ServerUtils.verbose("Filtering entries for %s. Current: ", p, filters.toString()); - - return nbtStorage.caughtItems.entrySet().stream() - .filter(entry -> { - if (filters.isEmpty()) return true; - boolean result = (operator == FilterOperator.AND); // AND starts true, OR starts false - for (String filter : filters) { - boolean conditionMet = switch (filter) { - case "OWNER" -> entry.getValue().equals(p.getUniqueId().toString()); - default -> false; - }; - result = operator.apply(result, conditionMet); - // Early exit for AND (false means no need to check further) - if (operator == FilterOperator.AND && !result) return false; - // Early exit for OR (true means we already pass) - if (operator == FilterOperator.OR && result) return true; - } - return result; - }) - .collect(Collectors.toList()); - } -} 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 deleted file mode 100644 index 229b18a..0000000 --- a/src/main/java/me/trouper/sentinel/server/gui/whitelist/NewWhitelistGUI.java +++ /dev/null @@ -1,241 +0,0 @@ -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.server.gui.PaginatedGUI; -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; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.ItemStack; - -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 CustomGui backGUI() { - return new MainGUI().home; - } - - @Override - protected String getTitle(Player p) { - return Text.color("&6&lCommand Blocks &7(" + getFilterCount(p) + " filters)"); - } - - @Override - protected void handleMainClick(Player p, InventoryClickEvent e) { - int slot = e.getSlot(); - if (slot >= 45) return; - if (e.getInventory().getItem(slot) == null) return; - int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v)); - List filtered = filterEntries(p, chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND)); - int index = page * ITEMS_PER_PAGE + slot; - if (index < filtered.size()) { - CommandBlockHolder holder = filtered.get(index); - p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1, 0.8F); - openManagementMenu(p, holder); - } - } - - @Override - protected ItemStack createDisplayItem(CommandBlockHolder holder) { - Material type = holder.getType(); - String name = holder.isCart() ? - "Minecart: " + holder.loc().toUIID() : - String.format("X: %d, Y: %d, Z: %d", - (int) holder.loc().x(), - (int) holder.loc().y(), - (int) holder.loc().z()); - - List lore = new ArrayList<>(); - lore.add(Text.color("&7Owner: " + Bukkit.getOfflinePlayer(holder.owner()).getName())); - lore.add(Text.color("&7Command: &f" + holder.command())); - lore.add(Text.color("&7Type: &f" + holder.type())); - lore.add(Text.color("&7Whitelisted: " + (holder.isWhitelisted() ? "&aYes" : "&cNo"))); - lore.add(Text.color("&7Present: " + (holder.present() ? "&aYes" : "&cNo"))); - lore.add(""); - lore.add(Text.color("&eClick to manage!")); - - return new ItemBuilder() - .material(type) - .name(Text.color("&b" + name)) - .lore(lore) - .build(); - } - - @Override - protected void addFilterItems(CustomGui.GuiBuilder filterGui, Player p, Set filters) { - filterGui.define(0, createFilterToggleItem("Your Blocks", Material.PLAYER_HEAD, filters.contains("OWNER")), e -> toggleFilter(p, "OWNER")); - filterGui.define(1, createFilterToggleItem("Other Owners", Material.SPYGLASS, filters.contains("OTHER_OWNERS")), e -> toggleFilter(p, "OTHER_OWNERS")); - filterGui.define(2, createFilterToggleItem("Current World", Material.TARGET, filters.contains("CURRENT_WORLD")), e -> toggleFilter(p, "CURRENT_WORLD")); - filterGui.define(3, createFilterToggleItem("Whitelisted Blocks", Material.PAPER, filters.contains("WHITELISTED")), e -> toggleFilter(p, "WHITELISTED")); - filterGui.define(4, createFilterToggleItem("Not Whitelisted Only", Material.BARRIER, filters.contains("NOT_WHITELISTED")), e -> toggleFilter(p, "NOT_WHITELISTED")); - filterGui.define(5, createFilterToggleItem("Missing Command Blocks", Material.GLASS, filters.contains("NOT_PRESENT")), e -> toggleFilter(p, "NOT_PRESENT")); - filterGui.define(6, createFilterToggleItem("Repeating Command Blocks", Material.REPEATING_COMMAND_BLOCK, filters.contains("REPEAT")), e -> toggleFilter(p, "REPEAT")); - 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()) { - queuePlayer(p,(cfg,value)->{ - chosenPlayer.put(p.getUniqueId(),value.getAll().toString()); - },chosenPlayer.getOrDefault(p.getUniqueId(),"null")); - } - }); - } - - 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+"))); - player.sendMessage(Text.prefix("Value updated successfully")); - openFilterMenu(player); - }); - 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))); - } - - @Override - protected List filterEntries(Player p, FilterOperator operator) { - Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); - ServerUtils.verbose("Filtering entries for %s. Current: ", p, filters.toString()); - return Sentinel.getInstance().getDirector().io.commandBlocks.holders.stream() - .filter(holder -> { - if (filters.isEmpty()) return true; - boolean result = (operator == FilterOperator.AND); // AND starts true, OR starts false - for (String filter : filters) { - boolean conditionMet = switch (filter) { - case "OWNER" -> holder.owner().equals(p.getUniqueId().toString()); - case "CURRENT_WORLD" -> holder.loc().world().equals(p.getWorld().getName()); - case "OTHER_OWNERS" -> !holder.owner().equals(p.getUniqueId().toString()); - case "MINECART" -> holder.getType().equals(Material.COMMAND_BLOCK_MINECART); - case "REPEAT" -> holder.getType().equals(Material.REPEATING_COMMAND_BLOCK); - case "CHAIN" -> holder.getType().equals(Material.CHAIN_COMMAND_BLOCK); - case "IMPULSE" -> holder.getType().equals(Material.COMMAND_BLOCK); - 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); - // Early exit for AND (false means no need to check further) - if (operator == FilterOperator.AND && !result) return false; - // Early exit for OR (true means we already pass) - if (operator == FilterOperator.OR && result) return true; - } - return result; - }) - .collect(Collectors.toList()); - } - - private void openManagementMenu(Player p, CommandBlockHolder holder) { - ServerUtils.verbose("Opening management menu for %s", holder.owner()); - boolean whitelisted = holder.isWhitelisted(); - CustomGui menu = CustomGui.create() - .title(Text.color("&l ⬇ &6&lManaging Command Block")) - .size(9) - .defineMain(e -> e.setCancelled(true)) - .define(0, createDisplayItem(holder)) - .define(2, createActionItem(whitelisted ? "Un-Whitelist" : "Whitelist", whitelisted ? Material.BARRIER : Material.PAPER), e -> { - holder.setWhitelisted(!whitelisted); - p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1, 1F); - openManagementMenu(p, holder); - }) - .define(3, createActionItem("Teleport", Material.ENDER_PEARL), e -> { - if (holder.loc().isUUID()) { - // Handle minecart teleport - Entity entity = Bukkit.getEntity(holder.loc().toUIID()); - if (entity == null) { - e.getInventory().setItem(e.getSlot(), new ItemBuilder() - .material(Material.BARRIER) - .name("&cTeleport Unavailable") - .lore("&7This entity is not loaded.") - .build()); - p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1F); - return; - } - p.teleport(entity.getLocation()); - } else { - p.teleport(holder.loc().translate()); - } - p.playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 0.5F); - p.closeInventory(); - }) - .define(4, createActionItem("Restore", Material.DISPENSER), e -> { - holder.restore(); - p.openInventory(createGUI(p).getInventory()); - p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_RESONATE, 1, 1F); - }) - .define(5, createActionItem("Destroy (Shift-Click)", Material.NETHERITE_PICKAXE), e -> { - if (!e.isShiftClick()) return; - holder.destroy(); - p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1, 2F); - p.openInventory(createGUI(p).getInventory()); - }) - .define(6, createActionItem("Take Ownership", Material.NAME_TAG), e -> { - holder.setOwner(p.getUniqueId().toString()); - p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_TRADE, 1, 1F); - openManagementMenu(p, holder); - }) - .define(8, Items.BACK, e -> { - p.playSound(p.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 0.8F); - p.openInventory(createGUI(p).getInventory()); - }) - .build(); - - p.openInventory(menu.getInventory()); - } - - private ItemStack createActionItem(String name, Material mat) { - return new ItemBuilder() - .material(mat) - .name(Text.color("&b" + name)) - .lore(Text.color("&7Click to " + name.toLowerCase())) - .build(); - } - - private ItemStack createFilterToggleItem(String name, Material mat, boolean active) { - return new ItemBuilder() - .material(mat) - .name(Text.color((active ? "&a" : "&c") + name)) - .lore(Text.color("&7Click to " + (active ? "disable" : "enable"))) - .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(); - } -} \ 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 52a35b6..1890cb4 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 @@ -10,6 +10,7 @@ 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.server.gui.PaginatedGUI; import me.trouper.sentinel.utils.ServerUtils; import me.trouper.sentinel.utils.Text; import net.kyori.adventure.text.Component; @@ -21,98 +22,44 @@ import org.bukkit.Sound; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.inventory.InventoryClickEvent; -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 { +public class WhitelistGUI extends PaginatedGUI { + + private static final Map chosenPlayer = new HashMap<>(); - private static final Map currentPages = new HashMap<>(); - private static final Map> activeFilters = new HashMap<>(); - private static final Map chosenOperator = new HashMap<>(); - - public CustomGui createGUI(Player p) { - ServerUtils.verbose("Creating GUI for player: %s", p.getName()); - int page = currentPages.compute(p.getUniqueId(), (k,v) -> realizePage(p,realizePage(p,(v == null ? 0 : v)))); - return CustomGui.create() - .title(Text.color("&6&lCommand Blocks &7(" + getFilterCount(p) + " filters)")) - .size(54) - .onDefine(inv -> setupPage(p, inv)) - .defineMain(e -> { - e.setCancelled(true); - handleMainClick(p, e); - }) - .define(45, createNavigationItem("Previous",page - 1), e -> { - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_HAT,1,0.9F); - changePage(p, -1); - }) - .define(49, createFilterItem(p), e -> { - if (e.isShiftClick()) { - FilterOperator op = chosenOperator.computeIfAbsent(p.getUniqueId(),v-> FilterOperator.AND); - FilterOperator[] values = FilterOperator.values(); - chosenOperator.put(p.getUniqueId(),values[(op.ordinal() + 1) % values.length]); - e.getClickedInventory().setItem(e.getSlot(),createFilterItem(p)); - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_HAT,1,1.3F); - return; - } - openFilterMenu(p); - }) - .define(53, createNavigationItem("Next",page + 1), e -> { - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_HAT,1,1.1F); - changePage(p, 1); - }) - .build(); + @Override + protected CustomGui backGUI() { + return new MainGUI().home; } - private void setupPage(Player p, Inventory inv) { - ServerUtils.verbose("Setting up page for player: %s", p.getName()); - int page = currentPages.compute(p.getUniqueId(), (k,v) -> realizePage(p,realizePage(p,(v == null ? 0 : v)))); - List filtered = filterEntries(p,chosenOperator.computeIfAbsent(p.getUniqueId(),v->FilterOperator.AND)); - ServerUtils.verbose("Current page: %d, Total entries: %d", page, filtered.size()); - - // Clear previous items - for (int i = 0; i < 45; i++) { - inv.setItem(i, null); - } - - // Add paginated items - for (int i = page * 45; i < (page + 1) * 45 && i < filtered.size(); i++) { - CommandBlockHolder holder = filtered.get(i); - inv.setItem(i % 45, createDisplayItem(holder)); - } - - // Add persistent bottom items - inv.setItem(45, createNavigationItem("Previous",realizePage(p, page - 1))); - inv.setItem(49, createFilterItem(p)); - inv.setItem(53, createNavigationItem("Next", realizePage(p,page + 1))); + @Override + protected String getTitle(Player p) { + return Text.color("&6&lCommand Blocks &7(%s/%s filtered)".formatted(getFilterCount(p),Sentinel.getInstance().getDirector().io.commandBlocks.holders.size())); } - private void handleMainClick(Player p, InventoryClickEvent e) { + @Override + protected void handleMainClick(Player p, InventoryClickEvent e) { int slot = e.getSlot(); if (slot >= 45) return; if (e.getInventory().getItem(slot) == null) return; - - int page = currentPages.compute(p.getUniqueId(), (k,v) -> realizePage(p,realizePage(p,(v == null ? 0 : v)))); - List filtered = filterEntries(p,chosenOperator.computeIfAbsent(p.getUniqueId(),v->FilterOperator.AND)); - int index = page * 45 + slot; - + int page = currentPages.compute(p.getUniqueId(), (k, v) -> realizePage(p, v == null ? 0 : v)); + List filtered = filterEntries(p, chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND)); + int index = page * ITEMS_PER_PAGE + slot; if (index < filtered.size()) { CommandBlockHolder holder = filtered.get(index); - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_CHIME,1,0.8F); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_CHIME, 1, 0.8F); openManagementMenu(p, holder); } } - - private ItemStack createDisplayItem(CommandBlockHolder holder) { - //ServerUtils.verbose("Creating Display Item for a command block owned by %s. Type is ", holder.owner(), holder.type()); - + + @Override + protected ItemStack createDisplayItem(CommandBlockHolder holder) { Material type = holder.getType(); - - //ServerUtils.verbose("Type material is %s", type.name()); - String name = holder.isCart() ? "Minecart: " + holder.loc().toUIID() : String.format("X: %d, Y: %d, Z: %d", @@ -120,24 +67,15 @@ public class WhitelistGUI { (int) holder.loc().y(), (int) holder.loc().z()); - //ServerUtils.verbose("Name is %s", name); - List lore = new ArrayList<>(); - lore.add(Text.color("&7Owner: " + Bukkit.getOfflinePlayer(UUID.fromString(holder.owner())).getName())); - //ServerUtils.verbose("Got owner"); + lore.add(Text.color("&7Owner: " + Bukkit.getOfflinePlayer(holder.owner()).getName())); lore.add(Text.color("&7Command: &f" + holder.command())); - //ServerUtils.verbose("Got command"); lore.add(Text.color("&7Type: &f" + holder.type())); - //ServerUtils.verbose("Got type"); lore.add(Text.color("&7Whitelisted: " + (holder.isWhitelisted() ? "&aYes" : "&cNo"))); - //ServerUtils.verbose("Got whitelist status"); lore.add(Text.color("&7Present: " + (holder.present() ? "&aYes" : "&cNo"))); - //ServerUtils.verbose("Got Present Status"); lore.add(""); lore.add(Text.color("&eClick to manage!")); - //ServerUtils.verbose("Successfully created item!"); - return new ItemBuilder() .material(type) .name(Text.color("&b" + name)) @@ -145,58 +83,129 @@ public class WhitelistGUI { .build(); } + @Override + protected void addFilterItems(CustomGui.GuiBuilder filterGui, Player p, Set filters) { + filterGui.define(0, createFilterToggleItem("Your Blocks", Material.PLAYER_HEAD, filters.contains("OWNER")), e -> toggleFilter(p, "OWNER")); + filterGui.define(1, createFilterToggleItem("Other Owners", Material.SPYGLASS, filters.contains("OTHER_OWNERS")), e -> toggleFilter(p, "OTHER_OWNERS")); + filterGui.define(2, createFilterToggleItem("Current World", Material.TARGET, filters.contains("CURRENT_WORLD")), e -> toggleFilter(p, "CURRENT_WORLD")); + filterGui.define(3, createFilterToggleItem("Whitelisted Blocks", Material.PAPER, filters.contains("WHITELISTED")), e -> toggleFilter(p, "WHITELISTED")); + filterGui.define(4, createFilterToggleItem("Not Whitelisted Only", Material.BARRIER, filters.contains("NOT_WHITELISTED")), e -> toggleFilter(p, "NOT_WHITELISTED")); + filterGui.define(5, createFilterToggleItem("Missing Command Blocks", Material.GLASS, filters.contains("NOT_PRESENT")), e -> toggleFilter(p, "NOT_PRESENT")); + filterGui.define(6, createFilterToggleItem("Repeating Command Blocks", Material.REPEATING_COMMAND_BLOCK, filters.contains("REPEAT")), e -> toggleFilter(p, "REPEAT")); + 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()) { + queuePlayer(p,(cfg,value)->{ + chosenPlayer.put(p.getUniqueId(),value.getAll().toString()); + },chosenPlayer.getOrDefault(p.getUniqueId(),"null")); + } + }); + } + + 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+"))); + player.sendMessage(Text.prefix("Value updated successfully")); + openFilterMenu(player); + }); + 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))); + } + + @Override + protected List filterEntries(Player p, FilterOperator operator) { + Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); + ServerUtils.verbose("Filtering entries for %s. Current: ", p, filters.toString()); + return Sentinel.getInstance().getDirector().io.commandBlocks.holders.stream() + .filter(holder -> { + if (filters.isEmpty()) return true; + boolean result = (operator == FilterOperator.AND); // AND starts true, OR starts false + for (String filter : filters) { + boolean conditionMet = switch (filter) { + case "OWNER" -> holder.owner().equals(p.getUniqueId().toString()); + case "CURRENT_WORLD" -> holder.loc().world().equals(p.getWorld().getName()); + case "OTHER_OWNERS" -> !holder.owner().equals(p.getUniqueId().toString()); + case "MINECART" -> holder.getType().equals(Material.COMMAND_BLOCK_MINECART); + case "REPEAT" -> holder.getType().equals(Material.REPEATING_COMMAND_BLOCK); + case "CHAIN" -> holder.getType().equals(Material.CHAIN_COMMAND_BLOCK); + case "IMPULSE" -> holder.getType().equals(Material.COMMAND_BLOCK); + 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); + // Early exit for AND (false means no need to check further) + if (operator == FilterOperator.AND && !result) return false; + // Early exit for OR (true means we already pass) + if (operator == FilterOperator.OR && result) return true; + } + return result; + }) + .collect(Collectors.toList()); + } + private void openManagementMenu(Player p, CommandBlockHolder holder) { ServerUtils.verbose("Opening management menu for %s", holder.owner()); boolean whitelisted = holder.isWhitelisted(); - CustomGui menu = CustomGui.create() .title(Text.color("&l ⬇ &6&lManaging Command Block")) .size(9) .defineMain(e -> e.setCancelled(true)) - .define(0,createDisplayItem(holder)) - .define(2, createActionItem(whitelisted ? "Un-Whitelist" : "Whitelist", whitelisted ? Material.BARRIER : Material.PAPER), e -> { + .define(0, createDisplayItem(holder)) + .define(2, createActionItem(whitelisted ? "Un-Whitelist" : "Whitelist", whitelisted ? Material.BARRIER : Material.PAPER), e -> { holder.setWhitelisted(!whitelisted); - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_PLING,1,1F); - openManagementMenu(p,holder); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, 1, 1F); + openManagementMenu(p, holder); }) .define(3, createActionItem("Teleport", Material.ENDER_PEARL), e -> { if (holder.loc().isUUID()) { // Handle minecart teleport Entity entity = Bukkit.getEntity(holder.loc().toUIID()); if (entity == null) { - e.getInventory().setItem(e.getSlot(),ItemBuilder.create() - .material(Material.BARRIER) - .name("&cTeleport Unavailable") - .lore("&7This entity is not loaded.") + e.getInventory().setItem(e.getSlot(), new ItemBuilder() + .material(Material.BARRIER) + .name("&cTeleport Unavailable") + .lore("&7This entity is not loaded.") .build()); - p.playSound(p.getLocation(),Sound.BLOCK_NOTE_BLOCK_BASS,1,1F); + p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1F); return; } p.teleport(entity.getLocation()); } else { p.teleport(holder.loc().translate()); } - p.playSound(p.getLocation(),Sound.ENTITY_ENDERMAN_TELEPORT,1,0.5F); + p.playSound(p.getLocation(), Sound.ENTITY_ENDERMAN_TELEPORT, 1, 0.5F); p.closeInventory(); }) .define(4, createActionItem("Restore", Material.DISPENSER), e -> { holder.restore(); p.openInventory(createGUI(p).getInventory()); - p.playSound(p.getLocation(),Sound.BLOCK_AMETHYST_BLOCK_RESONATE,1,1F); + p.playSound(p.getLocation(), Sound.BLOCK_AMETHYST_BLOCK_RESONATE, 1, 1F); }) .define(5, createActionItem("Destroy (Shift-Click)", Material.NETHERITE_PICKAXE), e -> { if (!e.isShiftClick()) return; holder.destroy(); - p.playSound(p.getLocation(),Sound.ENTITY_GENERIC_EXPLODE,1,2F); + p.playSound(p.getLocation(), Sound.ENTITY_GENERIC_EXPLODE, 1, 2F); p.openInventory(createGUI(p).getInventory()); }) - .define(6,createActionItem("Take Ownership",Material.NAME_TAG), e -> { + .define(6, createActionItem("Take Ownership", Material.NAME_TAG), e -> { holder.setOwner(p.getUniqueId().toString()); - p.playSound(p.getLocation(),Sound.ENTITY_VILLAGER_TRADE,1,1F); - openManagementMenu(p,holder); + p.playSound(p.getLocation(), Sound.ENTITY_VILLAGER_TRADE, 1, 1F); + openManagementMenu(p, holder); }) - .define(8,Items.BACK,e->{ - p.playSound(p.getLocation(),Sound.ITEM_BOOK_PAGE_TURN,1,0.8F); + .define(8, Items.BACK, e -> { + p.playSound(p.getLocation(), Sound.ITEM_BOOK_PAGE_TURN, 1, 0.8F); p.openInventory(createGUI(p).getInventory()); }) .build(); @@ -212,103 +221,6 @@ public class WhitelistGUI { .build(); } - // Filter handling methods - private enum Filter { - OWNER, CURRENT_WORLD, OTHER_OWNERS, - MINECART, REPEAT, CHAIN, IMPULSE, - WHITELISTED, NOT_WHITELISTED, NOT_PRESENT - } - - public enum FilterOperator { - AND, // All conditions must be met - OR, // At least one condition must be met - NAND, // At least one condition must NOT be met - XOR; // Exactly one condition must be met - - public boolean apply(boolean currentValue, boolean newCondition) { - return switch (this) { - case AND -> currentValue & newCondition; - case OR -> currentValue | newCondition; - case NAND -> !(currentValue & newCondition); - case XOR -> currentValue ^ newCondition; - }; - } - } - - private List filterEntries(Player p, FilterOperator operator) { - Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), v -> new HashSet<>()); - ServerUtils.verbose("Filtering entries for %s. Current: ", p,filters.toString()); - return Sentinel.getInstance().getDirector().io.commandBlocks.holders.stream() - .filter(holder -> { - if (filters.isEmpty()) return true; - - boolean result = (operator == FilterOperator.AND); // AND starts true, OR starts false - - for (Filter filter : filters) { - boolean conditionMet = switch (filter) { - case OWNER -> holder.owner().equals(p.getUniqueId().toString()); - case CURRENT_WORLD -> holder.loc().world().equals(p.getWorld().getName()); - case OTHER_OWNERS -> !holder.owner().equals(p.getUniqueId().toString()); - case MINECART -> holder.getType().equals(Material.COMMAND_BLOCK_MINECART); - case REPEAT -> holder.getType().equals(Material.REPEATING_COMMAND_BLOCK); - case CHAIN -> holder.getType().equals(Material.CHAIN_COMMAND_BLOCK); - case IMPULSE -> holder.getType().equals(Material.COMMAND_BLOCK); - case WHITELISTED -> holder.isWhitelisted(); - case NOT_WHITELISTED -> !holder.isWhitelisted(); - case NOT_PRESENT -> !holder.present(); - }; - - result = operator.apply(result, conditionMet); - - // Early exit for AND (false means no need to check further) - if (operator == FilterOperator.AND && !result) return false; - // Early exit for OR (true means we already pass) - if (operator == FilterOperator.OR && result) return true; - } - - return result; - }) - .collect(Collectors.toList()); - } - - private void openFilterMenu(Player p) { - ServerUtils.verbose("Creating filter menu for %s", p); - Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); - - CustomGui filterGui = CustomGui.create() - .title(Text.color("&6&lFilters")) - .size(27) - .defineMain(e -> e.setCancelled(true)) - .define(0, createFilterToggleItem("Your Blocks", Material.PLAYER_HEAD, filters.contains(Filter.OWNER)), - e -> toggleFilter(p, Filter.OWNER)) - .define(1, createFilterToggleItem("Other Owners", Material.SPYGLASS, filters.contains(Filter.OTHER_OWNERS)), - e -> toggleFilter(p, Filter.OTHER_OWNERS)) - .define(2, createFilterToggleItem("Current World", Material.TARGET, filters.contains(Filter.CURRENT_WORLD)), - e -> toggleFilter(p, Filter.CURRENT_WORLD)) - .define(3, createFilterToggleItem("Whitelisted Blocks", Material.PAPER, filters.contains(Filter.WHITELISTED)), - e -> toggleFilter(p, Filter.WHITELISTED)) - .define(4, createFilterToggleItem("Not Whitelisted Only", Material.BARRIER, filters.contains(Filter.NOT_WHITELISTED)), - e -> toggleFilter(p, Filter.NOT_WHITELISTED)) - .define(5, createFilterToggleItem("Missing Command Blocks", Material.GLASS, filters.contains(Filter.NOT_PRESENT)), - e -> toggleFilter(p, Filter.NOT_PRESENT)) - .define(6, createFilterToggleItem("Repeating Command Blocks", Material.REPEATING_COMMAND_BLOCK, filters.contains(Filter.REPEAT)), - e -> toggleFilter(p, Filter.REPEAT)) - .define(7, createFilterToggleItem("Chain Command Blocks", Material.CHAIN_COMMAND_BLOCK, filters.contains(Filter.CHAIN)), - e -> toggleFilter(p, Filter.CHAIN)) - .define(8, createFilterToggleItem("Impulse Command Blocks", Material.COMMAND_BLOCK, filters.contains(Filter.IMPULSE)), - e -> toggleFilter(p, Filter.IMPULSE)) - .define(9, createFilterToggleItem("Minecart Commands", Material.COMMAND_BLOCK_MINECART, filters.contains(Filter.MINECART)), - e -> toggleFilter(p, Filter.MINECART)) - .define(26, Items.BACK, - e-> { - p.playSound(p.getLocation(),Sound.ITEM_BOOK_PAGE_TURN,1,0.8F); - p.openInventory(createGUI(p).getInventory()); - }) - .build(); - - p.openInventory(filterGui.getInventory()); - } - private ItemStack createFilterToggleItem(String name, Material mat, boolean active) { return new ItemBuilder() .material(mat) @@ -317,60 +229,13 @@ public class WhitelistGUI { .build(); } - - - private void toggleFilter(Player p, Filter filter) { - Set filters = activeFilters.computeIfAbsent(p.getUniqueId(), k -> new HashSet<>()); - ServerUtils.verbose("%s is now toggling the %s filter. Current %s", p,filter,filters); - if (filters.contains(filter)) filters.remove(filter); - else filters.add(filter); - ServerUtils.verbose("Current filters for %s: %s", p,filters); - openFilterMenu(p); - } - - private int getFilterCount(Player p) { - return activeFilters.getOrDefault(p.getUniqueId(), new HashSet<>()).size(); - } - - private void changePage(Player p, int direction) { - int current = currentPages.getOrDefault(p.getUniqueId(), 0); - int newPage = realizePage(p, current + direction); - currentPages.put(p.getUniqueId(), newPage); - p.openInventory(createGUI(p).getInventory()); - } - - private int realizePage(Player p, int requested) { - int validRequested = Math.max(0, requested); - int totalEntries = filterEntries(p, - chosenOperator.computeIfAbsent(p.getUniqueId(), v -> FilterOperator.AND)).size(); - int maxPages = Math.max(0, Math.ceilDiv(totalEntries, 45) - 1); - return Math.min(validRequested, maxPages); - } - - private ItemStack createNavigationItem(String direction, int pageTo) { + private ItemStack createFilterToggleItemValue(String name, Material mat, boolean active, String value) { return new ItemBuilder() - .material(Material.ARROW) - .name(Text.color("&b" + direction + "&7 Page")) - .lore(Text.color("&7 > &b" + pageTo)) + .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 ItemStack createFilterItem(Player p) { - List operatorList = new ArrayList<>(); - FilterOperator chosen = chosenOperator.computeIfAbsent(p.getUniqueId(),v->FilterOperator.AND); - for (FilterOperator value : FilterOperator.values()) { - if (value.equals(chosen)) operatorList.add(Text.color("&b&n" + value.name())); - else operatorList.add(Text.color("&b" + value.name())); - } - return new ItemBuilder() - .material(Material.HOPPER) - .name(Text.color("&6&lFilters")) - .lore(Text.color("&7Filters Selected: &e" + getFilterCount(p))) - .lore(Text.color("&7Shift-Click to cycle filter operator.")) - .lore(Text.color("&7Operator: ")) - .lore(operatorList) - .build(); - } - - } \ No newline at end of file diff --git a/src/main/java/me/trouper/sentinel/utils/FileUtils.java b/src/main/java/me/trouper/sentinel/utils/FileUtils.java index 7c51ab8..d88a152 100644 --- a/src/main/java/me/trouper/sentinel/utils/FileUtils.java +++ b/src/main/java/me/trouper/sentinel/utils/FileUtils.java @@ -46,63 +46,6 @@ public final class FileUtils { } } - public static String createNBTLog(String contents) { - ServerUtils.verbose("FileUtils: Creating NBT log"); - String fileName = "nbt_log-" + Random.generateID(); - - File dataFolder = Sentinel.getInstance().getDirector().io.getDataFolder(); - - File loggedNBTFolder = new File(dataFolder,"LoggedNBT"); - if (!loggedNBTFolder.exists()) { - loggedNBTFolder.mkdirs(); - } - - File file = new File(loggedNBTFolder, fileName + ".txt"); - try { - if (!file.exists()) { - file.createNewFile(); - } - - BufferedWriter writer = new BufferedWriter(new FileWriter(file, true)); - writer.append(contents); - writer.close(); - - } catch (IOException e) { - e.printStackTrace(); - } - return fileName; - } - - public static String createNBTLog(ItemStack i) { - ServerUtils.verbose("FileUtils: Creating NBT log"); - - String item = i.getType().name().toLowerCase() + i.getItemMeta().getAsString(); - - String fileName = "nbt_log-" + Random.generateID(); - - File dataFolder = Sentinel.getInstance().getDirector().io.getDataFolder(); - - File loggedNBTFolder = new File(dataFolder,"LoggedNBT"); - if (!loggedNBTFolder.exists()) { - loggedNBTFolder.mkdirs(); - } - - File file = new File(loggedNBTFolder, fileName + ".txt"); - try { - if (!file.exists()) { - file.createNewFile(); - } - - BufferedWriter writer = new BufferedWriter(new FileWriter(file, true)); - writer.append(item); - writer.close(); - - } catch (IOException e) { - e.printStackTrace(); - } - return fileName; - } - public static String createCommandLog(String command) { diff --git a/src/main/java/me/trouper/sentinel/utils/Text.java b/src/main/java/me/trouper/sentinel/utils/Text.java index 2f69154..e4f05cf 100644 --- a/src/main/java/me/trouper/sentinel/utils/Text.java +++ b/src/main/java/me/trouper/sentinel/utils/Text.java @@ -4,6 +4,7 @@ package me.trouper.sentinel.utils; import me.trouper.sentinel.Sentinel; import org.bukkit.Location; +import java.util.Locale; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -115,7 +116,7 @@ public final class Text { } public static String cleanName(String type) { - return type.replaceAll("_"," ").toLowerCase(); + return type.replaceAll("_"," ").toUpperCase(Locale.US); } public static String formatMillis(long millis) { diff --git a/src/main/java/me/trouper/sentinel/utils/display/BlockDisplayRaytracer.java b/src/main/java/me/trouper/sentinel/utils/display/BlockDisplayRaytracer.java index 8d00d0f..c047a06 100644 --- a/src/main/java/me/trouper/sentinel/utils/display/BlockDisplayRaytracer.java +++ b/src/main/java/me/trouper/sentinel/utils/display/BlockDisplayRaytracer.java @@ -8,13 +8,13 @@ import org.bukkit.World; import org.bukkit.entity.BlockDisplay; import org.bukkit.entity.Display; import org.bukkit.entity.Player; -import org.bukkit.util.Consumer; import org.bukkit.util.Transformation; import org.bukkit.util.Vector; import org.joml.AxisAngle4f; import org.joml.Vector3f; import java.util.List; +import java.util.function.Consumer; public class BlockDisplayRaytracer { diff --git a/src/main/java/me/trouper/sentinel/utils/trees/EmbedFormatter.java b/src/main/java/me/trouper/sentinel/utils/trees/EmbedFormatter.java index 32314ac..c52727c 100644 --- a/src/main/java/me/trouper/sentinel/utils/trees/EmbedFormatter.java +++ b/src/main/java/me/trouper/sentinel/utils/trees/EmbedFormatter.java @@ -24,7 +24,8 @@ public class EmbedFormatter { try { webhook.send(spec); } catch (IOException e) { - Sentinel.getInstance().getLogger().warning(e.getMessage()); + Sentinel.getInstance().getLogger().info("Discord declined the web request: " + e.getMessage()); + Sentinel.getInstance().getLogger().info("Please insure your webhook URL is correct, otherwise nothing will be logged to discord."); success.set(false); return; }