From 1863fe3164b47e8d571af5268fbf06a3debe46c3 Mon Sep 17 00:00:00 2001 From: Lncvrt Date: Mon, 7 Apr 2025 23:57:10 -0700 Subject: [PATCH] Apply a bunch of changes (read description of commit) - Replace essentials mute check with BanManager mute check - Compact listeners - Add @NotNull to String[] args in commands - Add a /sky message - Add a /skyrtp command - Fix admins breaking floor in box - Improve furnace place message - Compact listener code - Disable withers & delete wither skull land listener - Fix players going above 319 Y level in sky - Optimize listener registration - Add %galaxyboxpvp_hearts% placceholder --- pom.xml | 20 ++++---- .../xyz/lncvrt/galaxyboxpvp/GalaxyBoxPvP.java | 47 ++++++++--------- .../galaxyboxpvp/PlaceholderAPIExpansion.java | 2 + .../galaxyboxpvp/commands/Autocompress.java | 2 +- .../xyz/lncvrt/galaxyboxpvp/commands/Sky.java | 4 +- .../lncvrt/galaxyboxpvp/commands/Skyrtp.java | 51 +++++++++++++++++++ .../events/BlockBreakListener.java | 3 ++ .../events/BlockPlaceListener.java | 28 ++++------ .../events/EntityPickupItemListener.java | 4 +- .../events/EntitySpawnListener.java | 13 +++++ .../events/FurnaceBurnListener.java | 5 +- .../events/FurnaceSmeltListener.java | 5 +- .../events/PlayerJoinListener.java | 5 +- .../events/PlayerMoveListener.java | 20 ++++++++ .../events/PrepareItemEnchantListener.java | 4 +- .../events/SignChangeListener.java | 4 +- src/main/resources/plugin.yml | 3 ++ 17 files changed, 143 insertions(+), 77 deletions(-) create mode 100644 src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java create mode 100644 src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntitySpawnListener.java create mode 100644 src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerMoveListener.java diff --git a/pom.xml b/pom.xml index c0b2871..7685997 100644 --- a/pom.xml +++ b/pom.xml @@ -36,14 +36,14 @@ placeholderapi-repo https://repo.extendedclip.com/content/repositories/placeholderapi/ - - essentials-releases - https://repo.essentialsx.net/releases/ - jitpack.io https://jitpack.io + + confuser-repo + https://ci.frostcast.net/plugin/repository/everything + @@ -58,18 +58,18 @@ 2.11.6 provided - - net.essentialsx - EssentialsX - 2.21.0 - provided - com.github.booksaw BetterTeams 4.11.0 provided + + me.confuser.banmanager + BanManagerCommon + 7.9.0 + provided + 21 diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/GalaxyBoxPvP.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/GalaxyBoxPvP.java index 9ad9409..42ed530 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/GalaxyBoxPvP.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/GalaxyBoxPvP.java @@ -2,6 +2,8 @@ package xyz.lncvrt.galaxyboxpvp; import com.earth2me.essentials.Essentials; import com.earth2me.essentials.User; +import me.confuser.banmanager.common.BanManagerPlugin; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.TabExecutor; @@ -9,12 +11,14 @@ import org.bukkit.entity.Player; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import xyz.lncvrt.galaxyboxpvp.commands.Autocompress; import xyz.lncvrt.galaxyboxpvp.commands.Sky; +import xyz.lncvrt.galaxyboxpvp.commands.Skyrtp; import xyz.lncvrt.galaxyboxpvp.events.*; import java.io.File; @@ -29,21 +33,12 @@ import java.util.logging.Level; public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor { public final Map autoCompressStatus = new HashMap<>(); - private Essentials essentials; + public final Map skyRTPDelays = new HashMap<>(); private final PlaceholderAPIExpansion placeholderAPIExpansion = new PlaceholderAPIExpansion(); + public final MiniMessage miniMessage = MiniMessage.miniMessage(); @Override public void onEnable() { - Plugin essentialsPlugin = Bukkit.getServer().getPluginManager().getPlugin("Essentials"); - getLogger().info("Essentials detected. Attempting to hook..."); - if (essentialsPlugin instanceof Essentials) { - essentials = (Essentials) essentialsPlugin; - getLogger().info("Essentials hooked successfully."); - } else { - getLogger().info("Essentials failed to hook. Disabling plugin"); - getServer().getPluginManager().disablePlugin(this); - } - if (placeholderAPIExpansion.register()) { getLogger().info("Successfully registered PlaceholderAPIExpansion!"); } else { @@ -65,23 +60,26 @@ public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor { } private void registerEvents() { - getServer().getPluginManager().registerEvents(new BlockBreakListener(this), this); - getServer().getPluginManager().registerEvents(new BlockPlaceListener(), this); - getServer().getPluginManager().registerEvents(new CraftItemListener(), this); - getServer().getPluginManager().registerEvents(new EntityPickupItemListener(this), this); - getServer().getPluginManager().registerEvents(new FurnaceBurnListener(this), this); - getServer().getPluginManager().registerEvents(new FurnaceSmeltListener(this), this); - getServer().getPluginManager().registerEvents(new PlayerDropItemListener(this), this); - getServer().getPluginManager().registerEvents(new PlayerJoinListener(this), this); - getServer().getPluginManager().registerEvents(new PrepareAnvilListener(), this); - getServer().getPluginManager().registerEvents(new PrepareItemEnchantListener(), this); - getServer().getPluginManager().registerEvents(new ProjectileHitListener(), this); - getServer().getPluginManager().registerEvents(new SignChangeListener(this), this); + PluginManager pluginManager = getServer().getPluginManager(); + pluginManager.registerEvents(new BlockBreakListener(this), this); + pluginManager.registerEvents(new BlockPlaceListener(this), this); + pluginManager.registerEvents(new CraftItemListener(), this); + pluginManager.registerEvents(new EntityPickupItemListener(this), this); + pluginManager.registerEvents(new EntitySpawnListener(), this); + pluginManager.registerEvents(new FurnaceBurnListener(this), this); + pluginManager.registerEvents(new FurnaceSmeltListener(this), this); + pluginManager.registerEvents(new PlayerDropItemListener(this), this); + pluginManager.registerEvents(new PlayerJoinListener(this), this); + pluginManager.registerEvents(new PlayerMoveListener(), this); + pluginManager.registerEvents(new PrepareAnvilListener(), this); + pluginManager.registerEvents(new PrepareItemEnchantListener(), this); + pluginManager.registerEvents(new SignChangeListener(this), this); } private void registerCommands() { Objects.requireNonNull(getCommand("autocompress")).setExecutor(new Autocompress(this)); Objects.requireNonNull(getCommand("sky")).setExecutor(new Sky()); + Objects.requireNonNull(getCommand("skyrtp")).setExecutor(new Skyrtp(this)); } public boolean isRestrictedMaterial(Material material) { @@ -194,7 +192,6 @@ public final class GalaxyBoxPvP extends JavaPlugin implements TabExecutor { } public boolean isMuted(Player player) { - User user = essentials.getUser(player); - return user.isMuted(); + return BanManagerPlugin.getInstance().getPlayerMuteStorage().isMuted(player.getUniqueId()); } } \ No newline at end of file diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/PlaceholderAPIExpansion.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/PlaceholderAPIExpansion.java index 4e4af5a..d7ad427 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/PlaceholderAPIExpansion.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/PlaceholderAPIExpansion.java @@ -37,6 +37,8 @@ public final class PlaceholderAPIExpansion extends PlaceholderExpansion { @Override public @Nullable String onPlaceholderRequest(Player player, @NotNull String identifier) { switch (identifier) { + case "hearts": + return String.format("%.1f", player.getHealth() / 2); case "kills": return String.valueOf(player.getStatistic(Statistic.PLAYER_KILLS)); case "deaths": diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Autocompress.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Autocompress.java index 620e569..45d25ae 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Autocompress.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Autocompress.java @@ -15,7 +15,7 @@ import static org.bukkit.ChatColor.RED; public record Autocompress(GalaxyBoxPvP plugin) implements CommandExecutor { @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) { if (!(sender instanceof Player player)) { sender.sendMessage(RED + "This command can only be executed by a player."); return true; diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Sky.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Sky.java index 693c9cb..c4d6aaf 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Sky.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Sky.java @@ -1,5 +1,6 @@ package xyz.lncvrt.galaxyboxpvp.commands; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; @@ -8,9 +9,10 @@ import org.jetbrains.annotations.NotNull; public class Sky implements CommandExecutor { @Override - public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) { if (sender instanceof Player player) { player.performCommand("warp sky"); + player.sendMessage(MiniMessage.miniMessage().deserialize("You can do /skyrtp (click the bold text) to randomly teleport around here!")); } return true; } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java new file mode 100644 index 0000000..f4c7d7b --- /dev/null +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/commands/Skyrtp.java @@ -0,0 +1,51 @@ +package xyz.lncvrt.galaxyboxpvp.commands; + +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; +import xyz.lncvrt.galaxyboxpvp.GalaxyBoxPvP; + +import java.util.concurrent.ThreadLocalRandom; + +public class Skyrtp implements CommandExecutor { + private final GalaxyBoxPvP plugin; + + public Skyrtp(GalaxyBoxPvP plugin) { + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String @NotNull [] args) { + if (sender instanceof Player player) { + Long last = plugin.skyRTPDelays.get(player.getUniqueId()); + Long time = System.currentTimeMillis(); + if (last != null && time - last < 30000) { + Long timeLeft = (30000 - (System.currentTimeMillis() - last)) / 1000; + player.sendMessage(plugin.miniMessage.deserialize("You can't RTP in the sky world so often, please wait %s second(s)!".formatted(timeLeft))); + return true; + } + World world = plugin.getServer().getWorld("sky"); + if (world == null) { + player.sendMessage(plugin.miniMessage.deserialize("Failed, please try again!")); + return true; + } + int randomX = ThreadLocalRandom.current().nextInt(100, 15000); + int randomZ = ThreadLocalRandom.current().nextInt(100, 15000); + Location location = new Location(world, randomX, 100, randomZ); + Block block = world.getBlockAt(location); + if (block.getType() == Material.AIR) { + block.setType(Material.GRASS_BLOCK); + } + player.teleport(location.add(0.5f, 1, 0.5f)); + player.sendMessage(plugin.miniMessage.deserialize("You have been randomly teleported to %s 100 %s".formatted(randomX, randomZ))); + plugin.skyRTPDelays.put(player.getUniqueId(), time); + } + return true; + } +} diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockBreakListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockBreakListener.java index a468403..8a1f08c 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockBreakListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockBreakListener.java @@ -17,5 +17,8 @@ public class BlockBreakListener implements Listener { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); plugin.convertInventoryItemsPrep(player, player.getUniqueId()); + if (event.getBlock().getLocation().getY() == 100 && event.getBlock().getWorld().getName().equals("world")) { + event.setCancelled(true); + } } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockPlaceListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockPlaceListener.java index b21cf24..9e2dec3 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockPlaceListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/BlockPlaceListener.java @@ -1,36 +1,26 @@ package xyz.lncvrt.galaxyboxpvp.events; -import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.event.ClickEvent; -import net.kyori.adventure.text.format.NamedTextColor; -import net.kyori.adventure.text.format.TextDecoration; import org.bukkit.Material; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; +import xyz.lncvrt.galaxyboxpvp.GalaxyBoxPvP; public class BlockPlaceListener implements Listener { + private final GalaxyBoxPvP plugin; + + public BlockPlaceListener(GalaxyBoxPvP plugin) { + this.plugin = plugin; + } + @EventHandler public void onBlockPlace(BlockPlaceEvent event) { if (event.getBlockPlaced().getType() == Material.POLISHED_BLACKSTONE_BUTTON) { if (event.getItemInHand().hasItemMeta() && event.getItemInHand().getItemMeta().hasDisplayName()) { event.setCancelled(true); //temp fix } - } else if (event.getBlockPlaced().getType() == Material.FURNACE || - event.getBlockPlaced().getType() == Material.FURNACE_MINECART || - event.getBlockPlaced().getType() == Material.BLAST_FURNACE) { - Player player = event.getPlayer(); - - Component message = Component.text("[TIP] ", NamedTextColor.GREEN) - .decorate(TextDecoration.BOLD) - .append(Component.text("If you are trying to smelt iron, gold, etc you can use the Smelter Shop. Click ", NamedTextColor.GREEN)) - .append(Component.text("[HERE]", NamedTextColor.GREEN) - .decorate(TextDecoration.UNDERLINED) - .clickEvent(ClickEvent.runCommand("/warp smelter"))) - .append(Component.text(" to teleport to the smelter shop!", NamedTextColor.GREEN)); - - player.sendMessage(message); + } else if (event.getBlockPlaced().getType() == Material.FURNACE || event.getBlockPlaced().getType() == Material.FURNACE_MINECART || event.getBlockPlaced().getType() == Material.BLAST_FURNACE) { + event.getPlayer().sendMessage(plugin.miniMessage.deserialize("[TIP] If you are trying to smelt iron, gold, etc you can use the Smelter Shop. Click [HERE] to teleport to the smelter shop!")); } } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntityPickupItemListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntityPickupItemListener.java index ced0ac6..fee8d9f 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntityPickupItemListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntityPickupItemListener.java @@ -16,8 +16,6 @@ public class EntityPickupItemListener implements Listener { @EventHandler(priority = EventPriority.LOWEST) public void onItemPickup(EntityPickupItemEvent event) { - if (event.getEntity() instanceof Player player) { - plugin.convertInventoryItemsPrep(player, player.getUniqueId()); - } + if (event.getEntity() instanceof Player player) plugin.convertInventoryItemsPrep(player, player.getUniqueId()); } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntitySpawnListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntitySpawnListener.java new file mode 100644 index 0000000..c5ba51d --- /dev/null +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/EntitySpawnListener.java @@ -0,0 +1,13 @@ +package xyz.lncvrt.galaxyboxpvp.events; + +import org.bukkit.entity.EntityType; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntitySpawnEvent; + +public class EntitySpawnListener implements Listener { + @EventHandler + public void onEntitySpawnEvent(EntitySpawnEvent event) { + if (event.getEntityType() == EntityType.WITHER) event.setCancelled(true); + } +} diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceBurnListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceBurnListener.java index df4af45..bba6697 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceBurnListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceBurnListener.java @@ -20,9 +20,6 @@ public class FurnaceBurnListener implements Listener { public void onFurnaceBurn(FurnaceBurnEvent event) { Furnace furnace = (Furnace) event.getBlock().getState(); Material smelting = Objects.requireNonNull(furnace.getInventory().getSmelting()).getType(); - - if (plugin.isRestrictedMaterial(smelting)) { - event.setCancelled(true); - } + if (plugin.isRestrictedMaterial(smelting)) event.setCancelled(true); } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceSmeltListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceSmeltListener.java index 0a8b33d..9575e1f 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceSmeltListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/FurnaceSmeltListener.java @@ -16,9 +16,6 @@ public class FurnaceSmeltListener implements Listener { @EventHandler public void onFurnaceSmelt(FurnaceSmeltEvent event) { Material smelted = event.getSource().getType(); - - if (plugin.isRestrictedMaterial(smelted)) { - event.setCancelled(true); - } + if (plugin.isRestrictedMaterial(smelted)) event.setCancelled(true); } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerJoinListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerJoinListener.java index 9e7cf84..cfc8dad 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerJoinListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerJoinListener.java @@ -22,10 +22,7 @@ public class PlayerJoinListener implements Listener { Player player = event.getPlayer(); UUID playerId = player.getUniqueId(); - if (!plugin.autoCompressStatus.containsKey(playerId)) { - plugin.autoCompressStatus.put(playerId, false); - } - + if (!plugin.autoCompressStatus.containsKey(playerId)) plugin.autoCompressStatus.put(playerId, false); player.sendMessage("%sWelcome to LncvrtBox, %s! This is a PvP arena gamemode that was originally called LncvrtBox, and is almost a year old! We reset the server for GalaxyNetwork and a fresh start".formatted(GREEN, player.getName())); } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerMoveListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerMoveListener.java new file mode 100644 index 0000000..c215222 --- /dev/null +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PlayerMoveListener.java @@ -0,0 +1,20 @@ +package xyz.lncvrt.galaxyboxpvp.events; + +import org.bukkit.Location; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerMoveEvent; + +public class PlayerMoveListener implements Listener { + @EventHandler + private void onSignPlace(PlayerMoveEvent event) { + Player player = event.getPlayer(); + int maxY = player.getWorld().getMaxHeight(); + if (player.getLocation().getY() >= maxY) { + Location newLocation = player.getLocation().clone(); + newLocation.setY(maxY - 1); + player.teleport(newLocation); + } + } +} diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PrepareItemEnchantListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PrepareItemEnchantListener.java index a67d403..f873f96 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PrepareItemEnchantListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/PrepareItemEnchantListener.java @@ -10,8 +10,6 @@ public class PrepareItemEnchantListener implements Listener { @EventHandler public void onPrepareItemEnchant(PrepareItemEnchantEvent event) { ItemStack item = event.getItem(); - if (item.getType() == Material.DIAMOND_PICKAXE || item.getType() == Material.NETHERITE_PICKAXE) { - event.setCancelled(true); - } + if (item.getType() == Material.DIAMOND_PICKAXE || item.getType() == Material.NETHERITE_PICKAXE) event.setCancelled(true); } } diff --git a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/SignChangeListener.java b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/SignChangeListener.java index e91c2b2..3ed4c68 100644 --- a/src/main/java/xyz/lncvrt/galaxyboxpvp/events/SignChangeListener.java +++ b/src/main/java/xyz/lncvrt/galaxyboxpvp/events/SignChangeListener.java @@ -14,8 +14,6 @@ public class SignChangeListener implements Listener { @EventHandler private void onSignPlace(SignChangeEvent event) { - if (plugin.isMuted(event.getPlayer())) { - event.setCancelled(true); - } + if (plugin.isMuted(event.getPlayer())) event.setCancelled(true); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 639f4eb..f9ecad6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -12,4 +12,7 @@ commands: usage: /autocompress sky: description: Teleports you to sky world + usage: /sky + skyrtp: + description: Teleports you to a random location in sky world usage: /sky \ No newline at end of file