From d86f859b3a74305bf84e9ca70f0930d71c369b6f Mon Sep 17 00:00:00 2001 From: JeremyStarTM Date: Tue, 8 Oct 2024 14:14:06 +0200 Subject: [PATCH] Implement /troll command --- .../api/translation/LanguageString.java | 10 ++ .../command/general/TrollCommand.java | 127 +++++++++++++++++- .../src/main/resources/translations/de.json | 9 ++ .../src/main/resources/translations/en.json | 9 ++ 4 files changed, 152 insertions(+), 3 deletions(-) diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/LanguageString.java b/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/LanguageString.java index b679d7e..4de1780 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/LanguageString.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/api/translation/LanguageString.java @@ -80,6 +80,16 @@ public enum LanguageString { // Command /toggledownfall TOGGLEDOWNFALL, + // Command /troll + TROLL_CRASH, + TROLL_CREDITS, + TROLL_CREEPER, + TROLL_DEMO, + TROLL_GUARDIAN, + TROLL_HACK, + TROLL_HACK_COMPLETE, + TROLL_HEAVENS, + // Event for chat messages CHATMESSAGE_SERVER, diff --git a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/TrollCommand.java b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/TrollCommand.java index 1107dcb..7eeea1a 100644 --- a/extension/src/main/java/de/jeremystartm/pickshadow/command/general/TrollCommand.java +++ b/extension/src/main/java/de/jeremystartm/pickshadow/command/general/TrollCommand.java @@ -19,15 +19,30 @@ package de.jeremystartm.pickshadow.command.general; +import de.jeremystartm.pickshadow.Extension; import de.jeremystartm.pickshadow.api.command.CommandBase; import de.jeremystartm.pickshadow.api.command.completion.StaticTabCompletion; import de.jeremystartm.pickshadow.api.command.TabCompletion; -import de.jeremystartm.pickshadow.api.command.completion.StubTabCompletion; +import de.jeremystartm.pickshadow.api.translation.LanguageString; +import de.jeremystartm.pickshadow.api.translation.TranslationManager; import lombok.Getter; +import net.kyori.adventure.key.Key; +import net.kyori.adventure.sound.Sound; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.title.Title; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.Particle; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; +import java.time.Duration; + +import static java.util.Map.entry; + /** * Handles the {@code /troll} command. * @@ -46,7 +61,15 @@ public final class TrollCommand extends CommandBase { * @return tab completion * @since v1-release0 */ - private final @NotNull TabCompletion completion = StubTabCompletion.completion(); + private final @NotNull TabCompletion completion = new StaticTabCompletion() + .players("", 0) + .add("", 1, "crash", "pickshadow.command.troll.action.crash") + .add("", 1, "credits", "pickshadow.command.troll.action.credits") + .add("", 1, "creeper", "pickshadow.command.troll.action.creeper") + .add("", 1, "demo", "pickshadow.command.troll.action.demo") + .add("", 1, "guardian", "pickshadow.command.troll.action.guardian") + .add("", 1, "hack", "pickshadow.command.troll.action.hack") + .add("", 1, "heavens", "pickshadow.command.troll.action.heavens"); /** * Creates and initializes an instance of @@ -60,5 +83,103 @@ public final class TrollCommand extends CommandBase { /** {@inheritDoc} */ @Override - public void invoke(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] arguments) {} + public void invoke(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, @NotNull String[] arguments) { + if (checkPermission(sender, "pickshadow.command.troll")) + return; + + if (arguments.length < 2) { + sender.sendRichMessage(TranslationManager.get(LanguageString.ERROR_TOO_FEW_ARGUMENTS, sender, true)); + return; + } + + Player target = Bukkit.getPlayer(arguments[0]); + if (target == null) { + sender.sendRichMessage(TranslationManager.get(LanguageString.ERROR_PLAYER_NOT_FOUND, sender, true, entry("player", arguments[0]))); + return; + } + + switch (arguments[1]) { + case "crash" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_CRASH, sender, true, entry("target", target.getName()))); + for (int i = 0; i < 10000; i++) + target.spawnParticle(Particle.EXPLOSION, target.getLocation(), 100000); + } + case "credits" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_CREDITS, sender, true, entry("target", target.getName()))); + target.showWinScreen(); + } + case "creeper" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_CREEPER, sender, true, entry("target", target.getName()))); + target.playSound(Sound.sound(Key.key("minecraft:entity.creeper.primed"), Sound.Source.MASTER, 1f, 1f)); + } + case "demo" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_DEMO, sender, true, entry("target", target.getName()))); + target.showDemoScreen(); + } + case "guardian" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_GUARDIAN, sender, true, entry("target", target.getName()))); + target.showElderGuardian(); + } + case "hack" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_HACK, sender, true, entry("target", target.getName()))); + String format = ""; + + // Ugly but it works + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + ":/45v.8r9(VU$R)w.9ruv"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 20); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "tI=)$t0,ivAEr9+"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 60); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "(U$T98vtiIÜ$)TU9i"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 100); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "L.f-.3_F:_34-,ldMVams"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 140); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + ")$u095u921,EFJKDA"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 180); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "joIV;;0p98v"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 220); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "IV)=RI(VT=)l9re"), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 260); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize(format + "$KL%98vu9485u20k8lü="), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(0)) + )), null, 300); + target.getScheduler().execute(Extension.getInstance(), () -> target.showTitle(Title.title( + MiniMessage.miniMessage().deserialize("" + TranslationManager.get(LanguageString.TROLL_HACK_COMPLETE, target, false)), + Component.empty(), + Title.Times.times(Duration.ofMillis(0), Duration.ofSeconds(5), Duration.ofMillis(500)) + )), null, 340); + } + case "heavens" -> { + sender.sendRichMessage(TranslationManager.get(LanguageString.TROLL_HEAVENS, sender, true, entry("target", target.getName()))); + + Location location = target.getLocation(); + location.setY(10000); + + target.teleport(location); + } + default -> sender.sendRichMessage(TranslationManager.get(LanguageString.ERROR_INVALID_ARGUMENT, sender, true, entry("argument", arguments[1]))); + } + } } diff --git a/extension/src/main/resources/translations/de.json b/extension/src/main/resources/translations/de.json index 9011844..f10faca 100644 --- a/extension/src/main/resources/translations/de.json +++ b/extension/src/main/resources/translations/de.json @@ -31,5 +31,14 @@ "TOGGLEDOWNFALL": "Niederschlag umgestellt", + "TROLL_CRASH": "%target%'s Minecraft Client sollte nun in der Zeit stehen bleiben...", + "TROLL_CREDITS": "%target% hat's geschafft! Angeblich...", + "TROLL_CREEPER": "%target% erlebt jetzt den Ton eines grünes Geschenks.", + "TROLL_DEMO": "%target% wird nun dazu gezwungen das Spiel zu kaufen.", + "TROLL_GUARDIAN": "%target% wurde von einem Elder Guardian gejumpscared.", + "TROLL_HACK": "%target% wird nun gehackt. OoOoOoOo...", + "TROLL_HACK_COMPLETE": "Zugang gewährt.", + "TROLL_HEAVENS": "%target% glaubt nun fliegen zu können.", + "CHATCOMMAND_ERROR_NAMESPACE": "Namespaces zu verwenden ist nicht erlaubt, da es verwendet werden kann um Sicherheitsmaßnahmen zu umgehen." } diff --git a/extension/src/main/resources/translations/en.json b/extension/src/main/resources/translations/en.json index 429b0a7..2d8b306 100644 --- a/extension/src/main/resources/translations/en.json +++ b/extension/src/main/resources/translations/en.json @@ -44,6 +44,15 @@ "TOGGLEDOWNFALL": "Toggled downfall", + "TROLL_CRASH": "%target%'s Minecraft Client should now be stuck in time...", + "TROLL_CREDITS": "%target% made it! Supposedly...", + "TROLL_CREEPER": "%target% now experiences the sound of a green gift.", + "TROLL_DEMO": "%target% is now required to buy the game.", + "TROLL_GUARDIAN": "%target% has been jumpscared by an Elder Guardian.", + "TROLL_HACK": "%target% is now being hacked. OoOoOoOo...", + "TROLL_HACK_COMPLETE": "Access granted.", + "TROLL_HEAVENS": "%target% believes that they can fly.", + "CHATMESSAGE_SERVER": "%sender% <#d60532>» ", "CHATCOMMAND_ERROR_NAMESPACE": "Using namespaces is not allowed, as it may be used to circumvent security measures."