From 4611464e40b38201db8c42e97663688e62176133 Mon Sep 17 00:00:00 2001 From: TheTrouper <93684527+thetrouper@users.noreply.github.com> Date: Tue, 27 Feb 2024 14:33:26 -0600 Subject: [PATCH] Added a bypass for dupeban --- .gitignore | 2 + .gradle/8.2-rc-2/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/8.2-rc-2/checksums/md5-checksums.bin | Bin 0 -> 18597 bytes .gradle/8.2-rc-2/checksums/sha1-checksums.bin | Bin 0 -> 19685 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../executionHistory/executionHistory.lock | Bin 0 -> 17 bytes .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 + .../ultradupe/cmds/DupeBansCommand.java | 66 ---------- .../trouper}/ultradupe/UltraDupe.java | 18 +-- .../ultradupe/cmds/DupeBansCommand.java | 43 ++++++ .../trouper}/ultradupe/cmds/DupeCommand.java | 21 +-- .../ultradupe/cmds/MultiplyCommand.java | 30 +++-- .../ultradupe/cmds/UltraDupeCommand.java | 123 ++++++++++++++++++ .../ultradupe/data/DupeBanStorage.java | 15 ++- .../ultradupe/data/GUIs/DupeBanGUI.java | 6 +- .../ultradupe/data/GUIs/GuiItems.java | 2 +- .../ultradupe/data/config/Config.java | 4 +- .../trouper}/ultradupe/events/GuiEvents.java | 5 +- .../server/functions/DupeBanCheck.java | 10 +- .../ultradupe/server/sound/SoundPlayer.java | 4 +- .../ultradupe/server/util/CipherUtils.java | 2 +- .../ultradupe/server/util/FileUtils.java | 4 +- .../ultradupe/server/util/MathUtils.java | 2 +- .../ultradupe/server/util/Randomizer.java | 2 +- .../ultradupe/server/util/ServerUtils.java | 4 +- .../trouper}/ultradupe/server/util/Text.java | 4 +- src/main/resources/plugin.yml | 29 +++-- 28 files changed, 263 insertions(+), 135 deletions(-) create mode 100644 .gradle/8.2-rc-2/checksums/md5-checksums.bin create mode 100644 .gradle/8.2-rc-2/checksums/sha1-checksums.bin create mode 100644 .gradle/8.2-rc-2/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.2-rc-2/executionHistory/executionHistory.lock create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 src/main/java/io/github/thetrouper/ultradupe/cmds/DupeBansCommand.java rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/UltraDupe.java (85%) create mode 100644 src/main/java/me/trouper/ultradupe/cmds/DupeBansCommand.java rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/cmds/DupeCommand.java (74%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/cmds/MultiplyCommand.java (61%) create mode 100644 src/main/java/me/trouper/ultradupe/cmds/UltraDupeCommand.java rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/data/DupeBanStorage.java (52%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/data/GUIs/DupeBanGUI.java (86%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/data/GUIs/GuiItems.java (92%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/data/config/Config.java (82%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/events/GuiEvents.java (68%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/functions/DupeBanCheck.java (90%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/sound/SoundPlayer.java (98%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/CipherUtils.java (96%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/FileUtils.java (82%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/MathUtils.java (97%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/Randomizer.java (97%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/ServerUtils.java (97%) rename src/main/java/{io/github/thetrouper => me/trouper}/ultradupe/server/util/Text.java (95%) diff --git a/.gitignore b/.gitignore index 85e7c1d..14e5aca 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ /.idea/ +/.gradle/ +/build/ diff --git a/.gradle/8.2-rc-2/checksums/checksums.lock b/.gradle/8.2-rc-2/checksums/checksums.lock index 06123778e65e974529240dd3c932d658ef9c2f25..d2eb3400cda3a5a5a0540766a4b38ecde3df2f01 100644 GIT binary patch literal 17 TcmZQx(qPnWt}n>W00CM6A$tOi literal 17 TcmZQx(qPnWt}n>W00DdeAzuP< diff --git a/.gradle/8.2-rc-2/checksums/md5-checksums.bin b/.gradle/8.2-rc-2/checksums/md5-checksums.bin new file mode 100644 index 0000000000000000000000000000000000000000..59aed22f9b03dfa18f0511b4ba0a0dfb922b57a2 GIT binary patch literal 18597 zcmeI%AxlG16ae7sY$7-Y>Z-vo5EaaZp~#X=u!vC*lY)jNe}F-j#GlrCr!oQr2oNAZfB*pk1PBly zK!5-N0t5&UAVA>12&}}13}ufgPZiQ+WG{r-;g}Sf=WA#0-TfqM*LL#%gPZ#C$IJEd zNv~eb>-ib$)vRYHK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0Rja6QeZA#R*7pOUB$P?Ycg}OR2gg}rTK-ejSvP7HpjbHu^FSZ8n@}+ h6T9`!-C?`+xqW)M{_r?cz1RSwT4V4O5{7ern66ksOJ`Y|p?z;Z!y3hA+&-1<4zVGkn z^L_34Z(9h4*;>q!1A97FJe|S}41fVJ00zJS7ytuc01SWuFaQR?02lxRU;qq&0Wbgt zzyKKdzZi(d53&p$#@35YOqQo$7{?T!SZA(3D6ly56hnC=i_3;$1 zZE2iJ-*QHUc;tSHYhHdSJJIRFMRK1ginpenoE&ZzmLe`lp?I5-C)ZAXJC)=$6z|Jv zWe&7>l#slS;zmNh$>ybJy%CQzqqv&`>!=4$u6hvF~1Q#4t3 zNmokpGKvcVr@Ge^Hp|I<#wi|kv2C-=ek*w{LC`#(_6(uNt6R|e$Y6@c^qjFRXjJVW z_fMpFQgTVlx4)G;As()v_+GAK!uAi%{KtRu zU;qq&0WbgtzyKHk17H9QfB`T72EYIq00UqE41fVJ00zJS7ytuc01SWuFaQR?02lxR zU;qq&0WbgtzyKHk17H9QfPw#x0WRJO@dJ2g;>G4CR@{{5i5ddj__>wRtlZ>3LRlC_ zJEGTixS*bwD)9S;zo%9{p}!}bEw_JT^Wil2RPS932Ca%nNo+c9$c8RG#7MnQ~l+|!c$>7RNc*aRYDre?I;^L_c=>z`>af+8fIVe2qGPW%} z#9l+BP8Gj$XYmwQ_hS<`>2#DejlmYtLvFb!?rkJe*O<=a|1k`8Sl@>w_^p%V?^SzA zP0N096&V+n6R8^7*Si<5wNsk9W7?e&8~j*(BH?_|(S+EHQ6i<+cH^HLF$~rEcd4XK zy=wN=A@5Zcr5z8WHSGm6Kii`Y)hp*pt=YH=zd!RtsgJv!z8zXE#+2;?=ii($9}kg^ z6Df(!-JH49^PSfhrp{gd?jWys&$_r5w+Za3nNQq3UE_(=HKuPCs`ZwET72(6gER*m zO~rdmUVD3_mi<%Qzh=P$|oyurMegEik z&SyFzRYSXqo(=2qnuV#PM=_y{A=~E;WPdco{nAZS+a$YzIxO>M&2j59t4Of;Hmo7!@FUe-qC)Xs$!O_90#qA2w$9@#}`a0Oo04ssI20 literal 0 HcmV?d00001 diff --git a/.gradle/8.2-rc-2/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.2-rc-2/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..f9f81a8b50d8302a5d8c64db98a8e5453e22234d GIT binary patch literal 17 ScmZS1h}XWawn#UP0SW*p7y~c> literal 0 HcmV?d00001 diff --git a/.gradle/8.2-rc-2/executionHistory/executionHistory.lock b/.gradle/8.2-rc-2/executionHistory/executionHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..860b2ef1c6ca569b555db0bb1dda2a80fc523ca3 GIT binary patch literal 17 TcmZQx|MJkbM|Zy}F+c$TOOOTX literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..75a5bb7b2af370c1008f0316aee52ebb87887ae6 GIT binary patch literal 17 UcmZSXyP2DF%4L5c0|YPv068H9g8%>k literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..06cc0b5 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue Feb 27 07:35:11 CST 2024 +gradle.version=8.2-rc-2 diff --git a/src/main/java/io/github/thetrouper/ultradupe/cmds/DupeBansCommand.java b/src/main/java/io/github/thetrouper/ultradupe/cmds/DupeBansCommand.java deleted file mode 100644 index df5b33c..0000000 --- a/src/main/java/io/github/thetrouper/ultradupe/cmds/DupeBansCommand.java +++ /dev/null @@ -1,66 +0,0 @@ -package io.github.thetrouper.ultradupe.cmds; - -import io.github.itzispyder.pdk.Global; -import io.github.itzispyder.pdk.commands.Args; -import io.github.itzispyder.pdk.commands.CommandRegistry; -import io.github.itzispyder.pdk.commands.CustomCommand; -import io.github.itzispyder.pdk.commands.Permission; -import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; -import io.github.thetrouper.ultradupe.UltraDupe; -import io.github.thetrouper.ultradupe.data.DupeBanStorage; -import io.github.thetrouper.ultradupe.data.GUIs.DupeBanGUI; -import io.github.thetrouper.ultradupe.server.functions.DupeBanCheck; -import io.github.thetrouper.ultradupe.server.sound.SoundPlayer; -import io.github.thetrouper.ultradupe.server.util.Text; -import net.kyori.adventure.text.Component; -import org.bukkit.Material; -import org.bukkit.Sound; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; - -@CommandRegistry(value = "dupebans", permission = @Permission("ultradupe.dupebans"), printStackTrace = true) -public class DupeBansCommand implements CustomCommand { - - @Override - public void dispatchCommand(CommandSender sender, Args args) { - Player p = (Player) sender; - switch (args.get(0).toString()) { - case "add" -> { - if (!p.hasPermission("ultradupe.dupebans.edit")) return; - Material m = p.getInventory().getItemInMainHand().getType(); - if (UltraDupe.dupeBanStorage.dupeBans.contains(m)) { - p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is already on the dupe ban listr.".formatted(Text.cleanName(m.toString()))))); - return; - } - UltraDupe.dupeBanStorage.dupeBans.add(m); - p.sendMessage(Component.text(Text.prefix("&7You have added &c%s&7 to the dupe ban list.".formatted(Text.cleanName(m.toString()))))); - UltraDupe.dupeBanStorage.save(); - } - case "remove" -> { - if (!p.hasPermission("ultradupe.dupebans.edit")) return; - Material m = p.getInventory().getItemInMainHand().getType(); - if (!UltraDupe.dupeBanStorage.dupeBans.contains(m)) { - p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is not on the dupe ban list.".formatted(Text.cleanName(m.toString()))))); - return; - } - UltraDupe.dupeBanStorage.dupeBans.remove(m); - p.sendMessage(Component.text(Text.prefix("&7You have removed &a%s&7 from the dupe ban list.".formatted(Text.cleanName(m.toString()))))); - UltraDupe.dupeBanStorage.save(); - } - default -> { - StringBuilder dupeBanList = new StringBuilder(Text.prefix("&7There are currently &e%s&7 dupe bans.".formatted(UltraDupe.dupeBanStorage.dupeBans.size()))); - for (Material dupeBan : UltraDupe.dupeBanStorage - .dupeBans) { - dupeBanList.append(Global.instance.color("\n&6 - &c%s".formatted(Text.cleanName(dupeBan.toString())))); - } - p.sendMessage(dupeBanList.toString()); - } - } - } - - @Override - public void dispatchCompletions(CompletionBuilder b) { - b.then(b.arg("add","remove")); - } -} diff --git a/src/main/java/io/github/thetrouper/ultradupe/UltraDupe.java b/src/main/java/me/trouper/ultradupe/UltraDupe.java similarity index 85% rename from src/main/java/io/github/thetrouper/ultradupe/UltraDupe.java rename to src/main/java/me/trouper/ultradupe/UltraDupe.java index 699cd1c..da70a76 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/UltraDupe.java +++ b/src/main/java/me/trouper/ultradupe/UltraDupe.java @@ -1,13 +1,14 @@ -package io.github.thetrouper.ultradupe; +package me.trouper.ultradupe; import io.github.itzispyder.pdk.PDK; import io.github.itzispyder.pdk.utils.misc.JsonSerializable; -import io.github.thetrouper.ultradupe.cmds.DupeBansCommand; -import io.github.thetrouper.ultradupe.cmds.DupeCommand; -import io.github.thetrouper.ultradupe.cmds.MultiplyCommand; -import io.github.thetrouper.ultradupe.data.DupeBanStorage; -import io.github.thetrouper.ultradupe.data.config.Config; -import io.github.thetrouper.ultradupe.events.GuiEvents; +import me.trouper.ultradupe.cmds.DupeBansCommand; +import me.trouper.ultradupe.cmds.DupeCommand; +import me.trouper.ultradupe.cmds.MultiplyCommand; +import me.trouper.ultradupe.cmds.UltraDupeCommand; +import me.trouper.ultradupe.data.DupeBanStorage; +import me.trouper.ultradupe.data.config.Config; +import me.trouper.ultradupe.events.GuiEvents; import org.bukkit.Bukkit; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; @@ -22,8 +23,6 @@ public final class UltraDupe extends JavaPlugin { private static final File dupeBans = new File("plugins/UltraDupe/dupebans.json"); public static Config config = JsonSerializable.load(cfgfile, Config.class, new Config()); public static DupeBanStorage dupeBanStorage = JsonSerializable.load(dupeBans, DupeBanStorage.class, new DupeBanStorage()); - public static final PluginManager manager = Bukkit.getPluginManager(); - public static final Logger log = Bukkit.getLogger(); /** @@ -53,6 +52,7 @@ public final class UltraDupe extends JavaPlugin { new DupeCommand().register(); new DupeBansCommand().register(); new MultiplyCommand().register(); + new UltraDupeCommand().register(); // Events new GuiEvents().register(); diff --git a/src/main/java/me/trouper/ultradupe/cmds/DupeBansCommand.java b/src/main/java/me/trouper/ultradupe/cmds/DupeBansCommand.java new file mode 100644 index 0000000..fb81acb --- /dev/null +++ b/src/main/java/me/trouper/ultradupe/cmds/DupeBansCommand.java @@ -0,0 +1,43 @@ +package me.trouper.ultradupe.cmds; + +import io.github.itzispyder.pdk.Global; +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CommandRegistry; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.Permission; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; +import me.trouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.server.util.Text; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +@CommandRegistry(value = "dupebans", permission = @Permission("ultradupe.dupebans"), printStackTrace = true) +public class DupeBansCommand implements CustomCommand { + + @Override + public void dispatchCommand(CommandSender sender, Args args) { + Player p = (Player) sender; + handleListBans(p); + + } + + @Override + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg("item") + .then(b.arg("add","remove")) + .then(b.arg("material") + .then(b.arg("add","remove")))); + } + + protected static void handleListBans(Player p) { + StringBuilder dupeBanList = new StringBuilder(Text.prefix("&7There are currently &e%s&7 dupe bans.".formatted(UltraDupe.dupeBanStorage.bannedMaterials.size()))); + for (Material dupeBan : UltraDupe.dupeBanStorage + .bannedMaterials) { + dupeBanList.append(Global.instance.color("\n&6 - &c%s".formatted(Text.cleanName(dupeBan.toString())))); + } + p.sendMessage(dupeBanList.toString()); + } +} diff --git a/src/main/java/io/github/thetrouper/ultradupe/cmds/DupeCommand.java b/src/main/java/me/trouper/ultradupe/cmds/DupeCommand.java similarity index 74% rename from src/main/java/io/github/thetrouper/ultradupe/cmds/DupeCommand.java rename to src/main/java/me/trouper/ultradupe/cmds/DupeCommand.java index df451e1..b019949 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/cmds/DupeCommand.java +++ b/src/main/java/me/trouper/ultradupe/cmds/DupeCommand.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.cmds; +package me.trouper.ultradupe.cmds; import io.github.itzispyder.pdk.commands.Args; import io.github.itzispyder.pdk.commands.CommandRegistry; @@ -6,18 +6,17 @@ import io.github.itzispyder.pdk.commands.CustomCommand; import io.github.itzispyder.pdk.commands.Permission; import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.itzispyder.pdk.utils.SchedulerUtils; -import io.github.thetrouper.ultradupe.server.functions.DupeBanCheck; -import io.github.thetrouper.ultradupe.server.sound.SoundPlayer; -import io.github.thetrouper.ultradupe.server.util.Text; +import me.trouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.server.functions.DupeBanCheck; +import me.trouper.ultradupe.server.sound.SoundPlayer; +import me.trouper.ultradupe.server.util.Text; import net.kyori.adventure.text.Component; import org.bukkit.Sound; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; -import java.util.concurrent.CompletableFuture; - -@CommandRegistry(value = "ultradupe", permission = @Permission("ultradupe.dupe"), printStackTrace = true) +@CommandRegistry(value = "duplicate", permission = @Permission("ultradupe.dupe"), printStackTrace = true) public class DupeCommand implements CustomCommand { DupeBanCheck check = new DupeBanCheck(); @@ -33,9 +32,15 @@ public class DupeCommand implements CustomCommand { return; } int factor = args.get(0).toInt(); + + if (factor > UltraDupe.config.plugin.maxDupe) { + p.sendMessage(Component.text(Text.prefix("&7You are not allowed to dupe with a factor greater than &c%s&7!".formatted(UltraDupe.config.plugin.maxDupe)))); + return; + } + ItemStack i = p.getInventory().getItemInMainHand().clone(); - if (check.itemPasses(i)) { + if (check.itemPasses(i) || (p.hasPermission("ultradupe.bypass.bans") && UltraDupeCommand.bypassingBans.contains(p.getUniqueId()))) { if (factor == 0) factor = i.getAmount(); SchedulerUtils.loop(1,factor,(time)->{ i.setAmount(1); diff --git a/src/main/java/io/github/thetrouper/ultradupe/cmds/MultiplyCommand.java b/src/main/java/me/trouper/ultradupe/cmds/MultiplyCommand.java similarity index 61% rename from src/main/java/io/github/thetrouper/ultradupe/cmds/MultiplyCommand.java rename to src/main/java/me/trouper/ultradupe/cmds/MultiplyCommand.java index 13ab6b7..96a8879 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/cmds/MultiplyCommand.java +++ b/src/main/java/me/trouper/ultradupe/cmds/MultiplyCommand.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.cmds; +package me.trouper.ultradupe.cmds; import io.github.itzispyder.pdk.commands.Args; import io.github.itzispyder.pdk.commands.CommandRegistry; @@ -6,9 +6,10 @@ import io.github.itzispyder.pdk.commands.CustomCommand; import io.github.itzispyder.pdk.commands.Permission; import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; import io.github.itzispyder.pdk.utils.SchedulerUtils; -import io.github.thetrouper.ultradupe.server.functions.DupeBanCheck; -import io.github.thetrouper.ultradupe.server.sound.SoundPlayer; -import io.github.thetrouper.ultradupe.server.util.Text; +import me.trouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.server.functions.DupeBanCheck; +import me.trouper.ultradupe.server.sound.SoundPlayer; +import me.trouper.ultradupe.server.util.Text; import net.kyori.adventure.text.Component; import org.bukkit.Sound; import org.bukkit.command.CommandSender; @@ -26,22 +27,29 @@ public class MultiplyCommand implements CustomCommand { SoundPlayer no = new SoundPlayer(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 10,1); if (p.getInventory().getItemInMainHand().isEmpty()) { - p.sendMessage(Component.text(Text.prefix("That was air... it was duped, but you still didn't get anything."))); + p.sendMessage(Component.text(Text.prefix("That was air... it was multiplied, but you still didn't get anything."))); no.play(p); return; } - int factor = args.get(0).toInt(); + + int exponent = args.get(0).toInt(); + + if (exponent > UltraDupe.config.plugin.maxMult) { + p.sendMessage(Component.text(Text.prefix("&7You are not allowed to multiply with an exponent greater than &c%s&7!".formatted(UltraDupe.config.plugin.maxMult)))); + return; + } + ItemStack i = p.getInventory().getItemInMainHand().clone(); - if (check.itemPasses(i)) { - if (factor == 0) factor = i.getAmount(); - SchedulerUtils.loop(1,factor,(time)->{ + if (check.itemPasses(i) || (p.hasPermission("ultradupe.bypass.bans") && UltraDupeCommand.bypassingBans.contains(p.getUniqueId()))) { + if (exponent == 0) exponent = i.getAmount(); + SchedulerUtils.loop(1,exponent,(time)->{ yes.play(p); p.getInventory().addItem(i); }); - p.sendMessage(Component.text(Text.prefix("&7You have duped &a%s %s&7.".formatted(factor, Text.cleanName(i.getType().toString()))))); + p.sendMessage(Component.text(Text.prefix("&7You have multiply &a%s %s&7.".formatted(exponent, Text.cleanName(i.getType().toString()))))); } else { - p.sendMessage(Component.text(Text.prefix("&cYou are not allowed to dupe &7%s&c.".formatted(Text.cleanName(i.getType().toString()))))); + p.sendMessage(Component.text(Text.prefix("&cYou are not allowed to multiply &7%s&c.".formatted(Text.cleanName(i.getType().toString()))))); no.play(p); } } diff --git a/src/main/java/me/trouper/ultradupe/cmds/UltraDupeCommand.java b/src/main/java/me/trouper/ultradupe/cmds/UltraDupeCommand.java new file mode 100644 index 0000000..96d55ba --- /dev/null +++ b/src/main/java/me/trouper/ultradupe/cmds/UltraDupeCommand.java @@ -0,0 +1,123 @@ +package me.trouper.ultradupe.cmds; + +import io.github.itzispyder.pdk.commands.Args; +import io.github.itzispyder.pdk.commands.CommandRegistry; +import io.github.itzispyder.pdk.commands.CustomCommand; +import io.github.itzispyder.pdk.commands.Permission; +import io.github.itzispyder.pdk.commands.completions.CompletionBuilder; +import io.github.itzispyder.pdk.utils.SchedulerUtils; +import me.trouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.server.functions.DupeBanCheck; +import me.trouper.ultradupe.server.sound.SoundPlayer; +import me.trouper.ultradupe.server.util.Text; +import net.kyori.adventure.text.Component; +import org.bukkit.Material; +import org.bukkit.Sound; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +@CommandRegistry(value = "ultradupe", permission = @Permission("ultradupe.admin"), printStackTrace = true) +public class UltraDupeCommand implements CustomCommand { + + public static List bypassingBans = new ArrayList<>(); + + @Override + public void dispatchCommand(CommandSender sender, Args args) { + Player p = (Player) sender; + + switch (args.get(0).toString()) { + case "dupebans" -> { + switch (args.get(1).toString()) { + case "item" -> handleItemEdit(p,args); + case "material" -> handleMaterialEdit(p,args); + default -> DupeBansCommand.handleListBans(p); + } + } + case "toggle" -> { + switch (args.get(1).toString()) { + case "debug" -> { + UltraDupe.config.debugMode = !UltraDupe.config.debugMode; + UltraDupe.config.save(); + } + case "bypass" -> { + if (!bypassingBans.contains(p.getUniqueId())) { + bypassingBans.add(p.getUniqueId()); + } else { + bypassingBans.remove(p.getUniqueId()); + } + p.sendMessage(Component.text(Text.prefix("&7You are now %s dupe bans".formatted(bypassingBans.contains(p.getUniqueId()) ? "&aBypassing&7" : "&cObeying&7")))); + } + } + } + } + } + + @Override + public void dispatchCompletions(CompletionBuilder b) { + b.then(b.arg("[]")); + } + + private void handleItemEdit(Player p, Args args) { + if (!p.hasPermission("ultradupe.dupebans.edit")) { + DupeBansCommand.handleListBans(p); + return; + } + switch (args.get(2).toString()) { + case "add" -> { + ItemStack i = p.getInventory().getItemInMainHand().clone(); + if (UltraDupe.dupeBanStorage.bannedItems.contains(i)) { + p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is already on the dupe ban list.".formatted(Text.cleanName(i.getType().toString()))))); + return; + } + UltraDupe.dupeBanStorage.bannedItems.add(i); + p.sendMessage(Component.text(Text.prefix("&7You have added &c%s&7 to the dupe ban list.".formatted(Text.cleanName(i.getType().toString()))))); + UltraDupe.dupeBanStorage.save(); + } + case "remove" -> { + ItemStack i = p.getInventory().getItemInMainHand().clone(); + if (!UltraDupe.dupeBanStorage.bannedItems.contains(i)) { + p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is not on the dupe ban list.".formatted(Text.cleanName(i.getType().toString()))))); + return; + } + UltraDupe.dupeBanStorage.bannedItems.remove(i); + p.sendMessage(Component.text(Text.prefix("&7You have removed &a%s&7 from the dupe ban list.".formatted(Text.cleanName(i.getType().toString()))))); + UltraDupe.dupeBanStorage.save(); + } + } + } + + private void handleMaterialEdit(Player p, Args args) { + if (!p.hasPermission("ultradupe.dupebans.edit")) { + DupeBansCommand.handleListBans(p); + return; + } + switch (args.get(2).toString()) { + case "add" -> { + + Material m = p.getInventory().getItemInMainHand().getType(); + if (UltraDupe.dupeBanStorage.bannedMaterials.contains(m)) { + p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is already on the dupe ban list.".formatted(Text.cleanName(m.toString()))))); + return; + } + UltraDupe.dupeBanStorage.bannedMaterials.add(m); + p.sendMessage(Component.text(Text.prefix("&7You have added &c%s&7 to the dupe ban list.".formatted(Text.cleanName(m.toString()))))); + UltraDupe.dupeBanStorage.save(); + } + case "remove" -> { + Material m = p.getInventory().getItemInMainHand().getType(); + if (!UltraDupe.dupeBanStorage.bannedMaterials.contains(m)) { + p.sendMessage(Component.text(Text.prefix("&7The material &c%s&7 is not on the dupe ban list.".formatted(Text.cleanName(m.toString()))))); + return; + } + UltraDupe.dupeBanStorage.bannedMaterials.remove(m); + p.sendMessage(Component.text(Text.prefix("&7You have removed &a%s&7 from the dupe ban list.".formatted(Text.cleanName(m.toString()))))); + UltraDupe.dupeBanStorage.save(); + } + } + } +} diff --git a/src/main/java/io/github/thetrouper/ultradupe/data/DupeBanStorage.java b/src/main/java/me/trouper/ultradupe/data/DupeBanStorage.java similarity index 52% rename from src/main/java/io/github/thetrouper/ultradupe/data/DupeBanStorage.java rename to src/main/java/me/trouper/ultradupe/data/DupeBanStorage.java index 98de15c..70450dc 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/data/DupeBanStorage.java +++ b/src/main/java/me/trouper/ultradupe/data/DupeBanStorage.java @@ -1,7 +1,9 @@ -package io.github.thetrouper.ultradupe.data; +package me.trouper.ultradupe.data; import io.github.itzispyder.pdk.utils.misc.JsonSerializable; +import me.trouper.ultradupe.data.GUIs.GuiItems; import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; import java.io.File; import java.util.Arrays; @@ -16,8 +18,13 @@ public class DupeBanStorage implements JsonSerializable { return file; } public int bannedModelData = 1111; - public List dupeBans = Arrays.asList( - Material.AZALEA, - Material.BIG_DRIPLEAF + public List bannedMaterials = Arrays.asList( + Material.ANCIENT_DEBRIS, + Material.NETHERITE_INGOT, + Material.TOTEM_OF_UNDYING + ); + public List bannedItems = Arrays.asList( + GuiItems.backArrow, + GuiItems.nextArrow ); } diff --git a/src/main/java/io/github/thetrouper/ultradupe/data/GUIs/DupeBanGUI.java b/src/main/java/me/trouper/ultradupe/data/GUIs/DupeBanGUI.java similarity index 86% rename from src/main/java/io/github/thetrouper/ultradupe/data/GUIs/DupeBanGUI.java rename to src/main/java/me/trouper/ultradupe/data/GUIs/DupeBanGUI.java index 5f7c715..75cc205 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/data/GUIs/DupeBanGUI.java +++ b/src/main/java/me/trouper/ultradupe/data/GUIs/DupeBanGUI.java @@ -1,15 +1,11 @@ -package io.github.thetrouper.ultradupe.data.GUIs; +package me.trouper.ultradupe.data.GUIs; import io.github.itzispyder.pdk.Global; -import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; import io.github.itzispyder.pdk.plugin.gui.CustomGui; import io.github.itzispyder.pdk.utils.misc.SoundPlayer; -import io.github.thetrouper.ultradupe.UltraDupe; -import io.github.thetrouper.ultradupe.data.DupeBanStorage; import org.bukkit.Material; import org.bukkit.Sound; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/io/github/thetrouper/ultradupe/data/GUIs/GuiItems.java b/src/main/java/me/trouper/ultradupe/data/GUIs/GuiItems.java similarity index 92% rename from src/main/java/io/github/thetrouper/ultradupe/data/GUIs/GuiItems.java rename to src/main/java/me/trouper/ultradupe/data/GUIs/GuiItems.java index 4154e13..ea5bc78 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/data/GUIs/GuiItems.java +++ b/src/main/java/me/trouper/ultradupe/data/GUIs/GuiItems.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.data.GUIs; +package me.trouper.ultradupe.data.GUIs; import io.github.itzispyder.pdk.Global; import io.github.itzispyder.pdk.plugin.builders.ItemBuilder; diff --git a/src/main/java/io/github/thetrouper/ultradupe/data/config/Config.java b/src/main/java/me/trouper/ultradupe/data/config/Config.java similarity index 82% rename from src/main/java/io/github/thetrouper/ultradupe/data/config/Config.java rename to src/main/java/me/trouper/ultradupe/data/config/Config.java index 058f1d6..567ca31 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/data/config/Config.java +++ b/src/main/java/me/trouper/ultradupe/data/config/Config.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.data.config; +package me.trouper.ultradupe.data.config; import io.github.itzispyder.pdk.utils.misc.JsonSerializable; @@ -18,6 +18,8 @@ public class Config implements JsonSerializable { public Plugin plugin = new Plugin(); public class Plugin { + public int dupeCooldown = 0; + public int multCooldown = 0; public int maxDupe = 128; public int maxMult = 10; } diff --git a/src/main/java/io/github/thetrouper/ultradupe/events/GuiEvents.java b/src/main/java/me/trouper/ultradupe/events/GuiEvents.java similarity index 68% rename from src/main/java/io/github/thetrouper/ultradupe/events/GuiEvents.java rename to src/main/java/me/trouper/ultradupe/events/GuiEvents.java index 0d53a11..32455a5 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/events/GuiEvents.java +++ b/src/main/java/me/trouper/ultradupe/events/GuiEvents.java @@ -1,10 +1,9 @@ -package io.github.thetrouper.ultradupe.events; +package me.trouper.ultradupe.events; import io.github.itzispyder.pdk.events.CustomListener; -import io.github.thetrouper.ultradupe.data.GUIs.DupeBanGUI; +import me.trouper.ultradupe.data.GUIs.DupeBanGUI; import org.bukkit.event.EventHandler; import org.bukkit.event.inventory.InventoryCloseEvent; -import org.bukkit.event.player.AsyncPlayerChatEvent; public class GuiEvents implements CustomListener { @EventHandler diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/functions/DupeBanCheck.java b/src/main/java/me/trouper/ultradupe/server/functions/DupeBanCheck.java similarity index 90% rename from src/main/java/io/github/thetrouper/ultradupe/server/functions/DupeBanCheck.java rename to src/main/java/me/trouper/ultradupe/server/functions/DupeBanCheck.java index 525f737..0e088f6 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/functions/DupeBanCheck.java +++ b/src/main/java/me/trouper/ultradupe/server/functions/DupeBanCheck.java @@ -1,15 +1,13 @@ -package io.github.thetrouper.ultradupe.server.functions; +package me.trouper.ultradupe.server.functions; -import io.github.thetrouper.ultradupe.UltraDupe; -import io.github.thetrouper.ultradupe.data.DupeBanStorage; -import io.github.thetrouper.ultradupe.server.util.ServerUtils; +import me.trouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.server.util.ServerUtils; import org.bukkit.Material; import org.bukkit.block.BlockState; import org.bukkit.block.Container; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BlockStateMeta; -import org.bukkit.inventory.meta.ItemMeta; public class DupeBanCheck { private boolean isContainer(ItemStack itemStack) { @@ -66,7 +64,7 @@ public class DupeBanCheck { return false; } } - if (UltraDupe.dupeBanStorage.dupeBans.contains(i.getType())) { + if (UltraDupe.dupeBanStorage.bannedMaterials.contains(i.getType())) { ServerUtils.verbose("DUPEBANS: No pass T"); return false; } diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/sound/SoundPlayer.java b/src/main/java/me/trouper/ultradupe/server/sound/SoundPlayer.java similarity index 98% rename from src/main/java/io/github/thetrouper/ultradupe/server/sound/SoundPlayer.java rename to src/main/java/me/trouper/ultradupe/server/sound/SoundPlayer.java index 9ed87d1..c30b7df 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/sound/SoundPlayer.java +++ b/src/main/java/me/trouper/ultradupe/server/sound/SoundPlayer.java @@ -6,9 +6,9 @@ */ -package io.github.thetrouper.ultradupe.server.sound; +package me.trouper.ultradupe.server.sound; -import io.github.thetrouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.UltraDupe; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Sound; diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/CipherUtils.java b/src/main/java/me/trouper/ultradupe/server/util/CipherUtils.java similarity index 96% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/CipherUtils.java rename to src/main/java/me/trouper/ultradupe/server/util/CipherUtils.java index f190b03..7d238d2 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/CipherUtils.java +++ b/src/main/java/me/trouper/ultradupe/server/util/CipherUtils.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/FileUtils.java b/src/main/java/me/trouper/ultradupe/server/util/FileUtils.java similarity index 82% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/FileUtils.java rename to src/main/java/me/trouper/ultradupe/server/util/FileUtils.java index c3d5c85..f2298b7 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/FileUtils.java +++ b/src/main/java/me/trouper/ultradupe/server/util/FileUtils.java @@ -1,6 +1,6 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; -import io.github.thetrouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.UltraDupe; import java.io.File; public class FileUtils { diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/MathUtils.java b/src/main/java/me/trouper/ultradupe/server/util/MathUtils.java similarity index 97% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/MathUtils.java rename to src/main/java/me/trouper/ultradupe/server/util/MathUtils.java index 3ba5bb5..ec1e31f 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/MathUtils.java +++ b/src/main/java/me/trouper/ultradupe/server/util/MathUtils.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/Randomizer.java b/src/main/java/me/trouper/ultradupe/server/util/Randomizer.java similarity index 97% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/Randomizer.java rename to src/main/java/me/trouper/ultradupe/server/util/Randomizer.java index 3fd03bd..b9b6c90 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/Randomizer.java +++ b/src/main/java/me/trouper/ultradupe/server/util/Randomizer.java @@ -1,4 +1,4 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; import java.text.SimpleDateFormat; import java.util.ArrayList; diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/ServerUtils.java b/src/main/java/me/trouper/ultradupe/server/util/ServerUtils.java similarity index 97% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/ServerUtils.java rename to src/main/java/me/trouper/ultradupe/server/util/ServerUtils.java index 37e42aa..0e3630a 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/ServerUtils.java +++ b/src/main/java/me/trouper/ultradupe/server/util/ServerUtils.java @@ -1,6 +1,6 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; -import io.github.thetrouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.UltraDupe; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.Bukkit; diff --git a/src/main/java/io/github/thetrouper/ultradupe/server/util/Text.java b/src/main/java/me/trouper/ultradupe/server/util/Text.java similarity index 95% rename from src/main/java/io/github/thetrouper/ultradupe/server/util/Text.java rename to src/main/java/me/trouper/ultradupe/server/util/Text.java index 01e84c7..629f45a 100644 --- a/src/main/java/io/github/thetrouper/ultradupe/server/util/Text.java +++ b/src/main/java/me/trouper/ultradupe/server/util/Text.java @@ -1,7 +1,7 @@ -package io.github.thetrouper.ultradupe.server.util; +package me.trouper.ultradupe.server.util; -import io.github.thetrouper.ultradupe.UltraDupe; +import me.trouper.ultradupe.UltraDupe; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7cc6596..5c34cdc 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,24 +1,35 @@ name: UltraDupe version: '${version}' -main: io.github.thetrouper.ultradupe.UltraDupe +main: me.trouper.ultradupe.UltraDupe api-version: 1.19 authors: [ TheTrouper ] -description: Detect Block and Ban players who attempt to grief your server. +description: The only acceptable dupe plugin. website: https://thetrouper.github.io/ -softdepend: [ ProtocolLib ] permissions: + ultradupe.multiply: + default: op + description: Access to the multiply/exponential dupe feature ultradupe.dupe: - description: Access to the dupe default: op - ultradupe.dupebans.edit: - description: edit the dupe ban list + description: Access to the dupe feature + ultradupe.bypass.mult-cooldown: default: op + description: Bypass the multiply cooldown + ultradupe.bypass.dupe-cooldown: + default: op + description: Bypass the dupe cooldown + ultradupe.bypass.bans: + default: op + description: Bypass all the dupe bans ultradupe.dupebans: - description: see the dupe ban list default: op + description: see the dupe ban list + ultradupe.dupebans.edit: + default: op + description: edit the dupe ban list commands: - ultradupe: + duplicate: description: A command for testing. usage: /ultradupe permission: ultradupe.info @@ -26,7 +37,6 @@ commands: aliases: - dupe - d - - ud multiply: description: A command for testing. usage: /ultradupe @@ -35,7 +45,6 @@ commands: aliases: - mult - m - - um dupebans: description: dupe bans usage: /dupebans [add|remove]