55import fr .maxlego08 .essentials .api .commands .Permission ;
66import fr .maxlego08 .essentials .api .messages .Message ;
77import fr .maxlego08 .essentials .api .user .TeleportRequest ;
8+ import fr .maxlego08 .essentials .api .user .User ;
89import fr .maxlego08 .essentials .module .modules .TeleportationModule ;
910import fr .maxlego08 .essentials .zutils .utils .commands .VCommand ;
11+ import org .bukkit .OfflinePlayer ;
12+ import org .bukkit .entity .Player ;
13+
14+ import java .util .ArrayList ;
15+ import java .util .Collection ;
1016
1117public class CommandTeleportAccept extends VCommand {
1218
@@ -15,26 +21,90 @@ public CommandTeleportAccept(EssentialsPlugin plugin) {
1521 this .setModule (TeleportationModule .class );
1622 this .setPermission (Permission .ESSENTIALS_TPA_ACCEPT );
1723 this .setDescription (Message .DESCRIPTION_TPA_ACCEPT );
24+ this .addOptionalArg ("player" );
1825 this .onlyPlayers ();
1926 }
2027
2128 @ Override
2229 protected CommandResultType perform (EssentialsPlugin plugin ) {
2330
24- TeleportRequest teleportRequest = this .user .getTeleportRequest ();
25- if (teleportRequest == null ) {
26- message (sender , Message .COMMAND_TPA_ERROR_TO_LATE );
27- return CommandResultType .DEFAULT ;
28- }
31+ String arg = this .argAsString (0 , null );
2932
30- if (!teleportRequest .isValid ()) {
31- this .user .setTeleportRequest (null );
32- message (sender , Message .COMMAND_TPA_ERROR_TO_LATE_2 );
33- return CommandResultType .DEFAULT ;
34- }
33+ if (arg == null ) {
34+ // accept latest request
35+ TeleportRequest teleportRequest = this .user .getTeleportRequest ();
36+ if (teleportRequest == null ) {
37+ message (sender , Message .COMMAND_TPA_ERROR_TO_LATE );
38+ return CommandResultType .DEFAULT ;
39+ }
40+
41+ if (!teleportRequest .isValid ()) {
42+ this .user .removeIncomingTeleportRequest (teleportRequest .getFromUser ());
43+ message (sender , Message .COMMAND_TPA_ERROR_TO_LATE_2 );
44+ return CommandResultType .DEFAULT ;
45+ }
46+
47+ teleportRequest .accept ();
48+ this .user .removeIncomingTeleportRequest (teleportRequest .getFromUser ());
49+
50+ } else if (arg .equals ("*" )) {
51+ // accept all pending requests
52+ Collection <TeleportRequest > requests = this .user .getIncomingTeleportRequests ();
53+ if (requests .isEmpty ()) {
54+ message (sender , Message .COMMAND_TPA_ERROR_TO_LATE );
55+ return CommandResultType .DEFAULT ;
56+ }
57+
58+ int count = 0 ;
59+ for (TeleportRequest request : new ArrayList <>(requests )) {
60+ if (request .isValid ()) {
61+ request .accept ();
62+ this .user .removeIncomingTeleportRequest (request .getFromUser ());
63+ count ++;
64+ }
65+ }
3566
36- teleportRequest .accept ();
37- this .user .setTeleportRequest (null );
67+ if (count > 0 ) {
68+ message (sender , Message .COMMAND_TPA_ACCEPT_ALL_SUCCESS , "%count%" , count );
69+ } else {
70+ message (sender , Message .COMMAND_TPA_ERROR_TO_LATE );
71+ return CommandResultType .DEFAULT ;
72+ }
73+
74+ } else {
75+ // accept request from that player
76+ Player targetPlayer = this .argAsPlayer (0 );
77+ User targetUser = null ;
78+
79+ if (targetPlayer != null ) {
80+ targetUser = plugin .getStorageManager ().getStorage ().getUser (targetPlayer .getUniqueId ());
81+ } else {
82+ OfflinePlayer offlinePlayer = this .argAsOfflinePlayer (0 );
83+ if (offlinePlayer != null && offlinePlayer .hasPlayedBefore ()) {
84+ targetUser = plugin .getStorageManager ().getStorage ().getUser (offlinePlayer .getUniqueId ());
85+ }
86+ }
87+
88+ if (targetUser == null ) {
89+ message (sender , Message .PLAYER_NOT_FOUND , "%player%" , arg );
90+ return CommandResultType .DEFAULT ;
91+ }
92+
93+ TeleportRequest teleportRequest = this .user .getTeleportRequestFrom (targetUser );
94+ if (teleportRequest == null ) {
95+ message (sender , Message .COMMAND_TPA_ERROR_NO_REQUEST_FROM_PLAYER , "%player%" , targetUser .getName ());
96+ return CommandResultType .DEFAULT ;
97+ }
98+
99+ if (!teleportRequest .isValid ()) {
100+ this .user .removeIncomingTeleportRequest (targetUser );
101+ message (sender , Message .COMMAND_TPA_ERROR_TO_LATE_2 );
102+ return CommandResultType .DEFAULT ;
103+ }
104+
105+ teleportRequest .accept ();
106+ this .user .removeIncomingTeleportRequest (targetUser );
107+ }
38108
39109 return CommandResultType .SUCCESS ;
40110 }
0 commit comments