DungeonCommand.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package me.lethunderhawk.dungeon.command;
  2. import me.lethunderhawk.bazaarflux.service.Services;
  3. import me.lethunderhawk.bazaarflux.util.command.CommandNode;
  4. import me.lethunderhawk.bazaarflux.util.command.CustomCommand;
  5. import me.lethunderhawk.dungeon.DungeonModule;
  6. import me.lethunderhawk.dungeon.generation.DungeonWorld;
  7. import me.lethunderhawk.dungeon.manager.DungeonManager;
  8. import me.lethunderhawk.main.Main;
  9. import org.bukkit.Bukkit;
  10. import org.bukkit.command.CommandSender;
  11. import org.bukkit.entity.Player;
  12. public class DungeonCommand extends CustomCommand {
  13. public DungeonCommand() {
  14. super(
  15. new CommandNode("dungeon", "Main Dungeon command", null),
  16. Services.get(DungeonModule.class)
  17. );
  18. }
  19. @Override
  20. public void createCommands() {
  21. registerCommand(
  22. "test",
  23. "creates a test instance of a dungeon and teleports you there",
  24. this::testDungeon
  25. );
  26. registerCommand(
  27. "cleanup",
  28. "Clears all dungeon worlds",
  29. this::clearDungeons
  30. );
  31. registerCommand(
  32. "back",
  33. "go back to the world you were previously in",
  34. this::backFromDungeon
  35. );
  36. }
  37. private void clearDungeons(CommandSender sender, String[] strings) {
  38. Services.get(DungeonManager.class).deleteAllDungeons();
  39. }
  40. private void testDungeon(CommandSender sender, String[] args) {
  41. if (!(sender instanceof Player player)) return;
  42. backFromDungeon(sender, args);
  43. DungeonWorld dungeon = Services.get(DungeonManager.class).createDungeon();
  44. dungeon.sendPlayerToDungeon(player);
  45. }
  46. private void backFromDungeon(CommandSender sender, String[] args) {
  47. if (!(sender instanceof Player player)) return;
  48. DungeonManager manager = Services.get(DungeonManager.class);
  49. DungeonWorld dungeon = manager.getDungeonByWorld(player.getWorld());
  50. if (dungeon == null) {
  51. player.sendMessage("§cYou are not in a dungeon.");
  52. return;
  53. }
  54. dungeon.returnPlayer(player);
  55. // Optional: auto-delete dungeon if empty
  56. Bukkit.getScheduler().runTaskLater(
  57. Services.get(Main.class),
  58. () -> {
  59. if (player.getWorld().getPlayers().isEmpty()) {
  60. manager.deleteDungeon(dungeon.getUUID());
  61. }
  62. },
  63. 1L
  64. );
  65. }
  66. }