|
| 1 | +import json |
1 | 2 | import uuid |
2 | 3 | from typing import TYPE_CHECKING |
3 | 4 |
|
4 | 5 | from endstone import ColorFormat, Player |
5 | 6 | from endstone.command import Command, CommandSender |
6 | | -from endstone.form import MessageForm |
| 7 | +from endstone.form import MessageForm, ModalForm, Label, Dropdown |
7 | 8 |
|
8 | 9 | from endstone_essentials.commands.command_executor_base import CommandExecutorBase |
9 | 10 |
|
@@ -43,7 +44,34 @@ def on_command(self, sender: CommandSender, command: Command, args: list[str]) - |
43 | 44 | case ["tpdeny"]: |
44 | 45 | self.deny_teleport_request(sender) |
45 | 46 |
|
| 47 | + case ["tpa"]: |
| 48 | + self.open_form_selector(sender) |
| 49 | + |
46 | 50 | return True |
| 51 | + |
| 52 | + def open_form_selector(self, player: Player): |
| 53 | + online_players = [p for p in self.plugin.server.online_players if p.unique_id != player.unique_id] |
| 54 | + |
| 55 | + if len(online_players) == 0: |
| 56 | + player.send_error_message("There's no other in this server!") |
| 57 | + return |
| 58 | + |
| 59 | + form = ModalForm( |
| 60 | + title="Teleport request", |
| 61 | + submit_button="Request", |
| 62 | + on_submit=lambda _, data: self.handle_teleport_request(player, online_players[json.loads(data)[1]]), |
| 63 | + on_close=lambda _: player.send_message(ColorFormat.YELLOW + "Teleport request cancelled.") |
| 64 | + ) |
| 65 | + label = Label("Choose a online player who will you") |
| 66 | + selector = Dropdown( |
| 67 | + label="teleport to:", |
| 68 | + options=[p.name for p in online_players], |
| 69 | + default_index=0 |
| 70 | + ) |
| 71 | + form.add_control(label) |
| 72 | + form.add_control(selector) |
| 73 | + |
| 74 | + player.send_form(form) |
47 | 75 |
|
48 | 76 | def handle_teleport_request(self, player: Player, target: Player) -> None: |
49 | 77 | if target.unique_id in self.teleport_requests: |
|
0 commit comments