From d0e6f470c852e4e654504b2a2a17d10169896f12 Mon Sep 17 00:00:00 2001 From: hex Date: Sat, 26 Apr 2025 19:04:41 +0200 Subject: [PATCH] feat: spawn command & fix version (2.1.1) --- build.gradle.kts | 2 +- src/main/java/rip/iwakura/civil/Core.java | 11 +++ .../rip/iwakura/civil/commands/Spawn.java | 72 +++++++++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/main/java/rip/iwakura/civil/commands/Spawn.java diff --git a/build.gradle.kts b/build.gradle.kts index 3a1fbe7..79c11f9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ group = "rip.iwakura" -version = "0.1.0" +version = "2.1.1" plugins { java diff --git a/src/main/java/rip/iwakura/civil/Core.java b/src/main/java/rip/iwakura/civil/Core.java index c2b5fd1..f31c471 100644 --- a/src/main/java/rip/iwakura/civil/Core.java +++ b/src/main/java/rip/iwakura/civil/Core.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.logging.Level; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -21,6 +22,7 @@ import net.kyori.adventure.text.format.TextDecoration; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import rip.iwakura.civil.events.ChatHandler; import rip.iwakura.civil.events.TeamChatHandler; +import rip.iwakura.civil.commands.Spawn; import rip.iwakura.civil.commands.Team; import rip.iwakura.civil.events.JoinHandler; import rip.iwakura.civil.types.CivilPlayer; @@ -71,6 +73,13 @@ public class Core extends JavaPlugin { } } + public Location getSpawn() { + return new Location(Bukkit.getWorld(getConfig().getString("spawn.world")), + getConfig().getDouble("spawn.x"), getConfig().getDouble("spawn.y"), + getConfig().getDouble("spawn.z"), (float) getConfig().getDouble("spawn.yaw"), + (float) getConfig().getDouble("spawn.pitch")); + }; + @Override public void onEnable() { getLogger().info("Hello world! We are booting up..."); @@ -90,9 +99,11 @@ public class Core extends JavaPlugin { discord.connect(getConfig().getString("discord.token")); Team teamCommand = new Team(this); + Spawn spawnCommand = new Spawn(this); this.getLifecycleManager().registerEventHandler(LifecycleEvents.COMMANDS, commands -> { commands.registrar().register(teamCommand.getCommand()); + commands.registrar().register(spawnCommand.getCommand()); }); getServer().getPluginManager().registerEvents(new JoinHandler(database), this); diff --git a/src/main/java/rip/iwakura/civil/commands/Spawn.java b/src/main/java/rip/iwakura/civil/commands/Spawn.java new file mode 100644 index 0000000..7ccbe63 --- /dev/null +++ b/src/main/java/rip/iwakura/civil/commands/Spawn.java @@ -0,0 +1,72 @@ +package rip.iwakura.civil.commands; + +import java.sql.SQLException; +import java.text.Format; + +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.checkerframework.common.reflection.qual.GetConstructor; + +import com.mojang.brigadier.Command; +import com.mojang.brigadier.arguments.LongArgumentType; +import com.mojang.brigadier.arguments.StringArgumentType; +import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import com.mojang.brigadier.tree.LiteralCommandNode; + +import io.papermc.paper.command.brigadier.CommandSourceStack; +import io.papermc.paper.command.brigadier.Commands; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.TextDecoration; +import net.kyori.adventure.text.minimessage.MiniMessage; +import net.kyori.adventure.text.minimessage.translation.MiniMessageTranslator; +import rip.iwakura.civil.Core; +import rip.iwakura.civil.Database; +import rip.iwakura.civil.exceptions.InvalidChannelException; +import rip.iwakura.civil.types.*; + +public class Spawn { + private Core core; + + public Spawn(Core core) { + this.core = core; + } + + public LiteralCommandNode getCommand() { + return Commands.literal("spawn") + .requires(ctx -> ctx.getSender() instanceof Player) + .executes(ctx -> { + Player p = (Player) ctx.getSource().getSender(); + + if (!core.getConfig().contains("spawn")) { + p.sendMessage(MiniMessage.miniMessage().deserialize("The spawn has not been set yet.")); + return 0; + } + + p.teleport(core.getSpawn()); + + return Command.SINGLE_SUCCESS; + }) + .then(Commands.literal("set").requires( + ctx -> ctx.getSender() instanceof Player && ctx.getSender().hasPermission("civil.spawn.set")) + .executes(ctx -> { + Player p = (Player) ctx.getSource().getSender(); + Location loc = p.getLocation(); + + core.getConfig().set("spawn.world", loc.getWorld().getName()); + core.getConfig().set("spawn.x", loc.x()); + core.getConfig().set("spawn.y", loc.y()); + core.getConfig().set("spawn.z", loc.z()); + core.getConfig().set("spawn.yaw", loc.getYaw()); + core.getConfig().set("spawn.pitch", loc.getPitch()); + + p.sendMessage(MiniMessage.miniMessage().deserialize("Set the server spawn to your current position.")); + + return Command.SINGLE_SUCCESS; + })) + .build(); + } + +}