2
2
3
3
import java .util .ArrayList ;
4
4
import java .util .List ;
5
+ import java .util .Objects ;
5
6
import java .util .Optional ;
6
7
import java .util .UUID ;
7
8
8
9
import org .bukkit .Location ;
9
10
import org .bukkit .Material ;
11
+ import org .eclipse .jdt .annotation .Nullable ;
10
12
11
13
import world .bentobox .bentobox .api .commands .CompositeCommand ;
12
14
import world .bentobox .bentobox .api .commands .ConfirmableCommand ;
19
21
20
22
public class AdminRegisterCommand extends ConfirmableCommand {
21
23
24
+ private Island island ;
25
+ private Location closestIsland ;
26
+ private @ Nullable UUID targetUUID ;
27
+
22
28
public AdminRegisterCommand (CompositeCommand parent ) {
23
29
super (parent , "register" );
24
30
}
@@ -32,104 +38,108 @@ public void setup() {
32
38
}
33
39
34
40
@ Override
35
- public boolean execute (User user , String label , List <String > args ) {
41
+ public boolean canExecute (User user , String label , List <String > args ) {
36
42
// If args are not right, show help
37
43
if (args .size () != 1 ) {
38
44
showHelp (this , user );
39
45
return false ;
40
46
}
47
+ // Check world
48
+ if (!getWorld ().equals (user .getWorld ())) {
49
+ user .sendMessage ("general.errors.wrong-world" );
50
+ return false ;
51
+ }
41
52
// Get target
42
- UUID targetUUID = Util .getUUID (args .get (0 ));
53
+ targetUUID = Util .getUUID (args .get (0 ));
43
54
if (targetUUID == null ) {
44
55
user .sendMessage ("general.errors.unknown-player" , TextVariables .NAME , args .get (0 ));
45
56
return false ;
46
57
}
47
- if (getIslands ().hasIsland (getWorld (), targetUUID )) {
48
- user .sendMessage ("general.errors.player-has-island" );
49
- return false ;
50
- }
51
- if (getIslands ().inTeam (getWorld (), targetUUID )) {
52
- user .sendMessage ("commands.admin.register.cannot-register-team-player" );
53
- return false ;
54
- }
55
-
56
58
// Check if this spot is still being deleted
57
- Location closestIsland = Util .getClosestIsland (user .getLocation ());
59
+ closestIsland = Util .getClosestIsland (user .getLocation ());
58
60
if (getPlugin ().getIslandDeletionManager ().inDeletion (closestIsland )) {
59
61
user .sendMessage ("commands.admin.register.in-deletion" );
60
62
return false ;
61
63
}
62
64
// Check if island is owned
63
- Optional <Island > island = getIslands ().getIslandAt (user .getLocation ());
64
- if (island .filter (Island ::isOwned )
65
- .filter (i -> !i .getOwner ().equals (targetUUID ))
66
- .isPresent ()) {
65
+ Optional <Island > opIsland = getIslands ().getIslandAt (user .getLocation ());
66
+ if (opIsland .isEmpty ()) {
67
+ // Reserve spot
68
+ this .askConfirmation (user , user .getTranslation ("commands.admin.register.no-island-here" ),
69
+ () -> reserve (user , args .get (0 )));
70
+ return false ;
71
+ }
72
+ island = opIsland .get ();
73
+ if (targetUUID .equals (island .getOwner ())) {
67
74
user .sendMessage ("commands.admin.register.already-owned" );
68
75
return false ;
69
76
}
70
77
// Check if island is spawn
71
- if (island .map (Island ::isSpawn ).orElse (false )) {
72
- askConfirmation (user , user .getTranslation ("commands.admin.register.island-is-spawn" ), () -> register (user , args .get (0 ), targetUUID , island , closestIsland ));
78
+ if (island .isSpawn ()) {
79
+ askConfirmation (user , user .getTranslation ("commands.admin.register.island-is-spawn" ),
80
+ () -> register (user , args .get (0 )));
73
81
return false ;
74
82
}
75
- return register (user , args .get (0 ),targetUUID , island , closestIsland );
83
+
84
+ return true ;
76
85
}
77
86
78
- private boolean register (User user , String targetName , UUID targetUUID , Optional <Island > island , Location closestIsland ) {
79
- // Register island if it exists
80
- if (!island .map (i -> {
81
- // Island exists
82
- getIslands ().setOwner (user , targetUUID , i , RanksManager .VISITOR_RANK );
83
- if (i .isSpawn ()) {
84
- getIslands ().clearSpawn (i .getWorld ());
85
- }
86
- user .sendMessage ("commands.admin.register.registered-island" , TextVariables .XYZ , Util .xyz (i .getCenter ().toVector ()),
87
- TextVariables .NAME , targetName );
88
- user .sendMessage ("general.success" );
89
- // Build and call event
90
- IslandEvent .builder ()
91
- .island (i )
92
- .location (i .getCenter ())
93
- .reason (IslandEvent .Reason .REGISTERED )
94
- .involvedPlayer (targetUUID )
95
- .admin (true )
96
- .build ();
97
- IslandEvent .builder ()
98
- .island (i )
99
- .involvedPlayer (targetUUID )
100
- .admin (true )
101
- .reason (IslandEvent .Reason .RANK_CHANGE )
102
- .rankChange (RanksManager .VISITOR_RANK , RanksManager .OWNER_RANK )
103
- .build ();
104
- return true ;
105
- }).orElse (false )) {
106
- // Island does not exist - this is a reservation
107
- this .askConfirmation (user , user .getTranslation ("commands.admin.register.no-island-here" ), () -> {
108
- // Make island here
109
- Island i = getIslands ().createIsland (closestIsland , targetUUID );
110
- if (i == null ) {
111
- user .sendMessage ("commands.admin.register.cannot-make-island" );
112
- return ;
113
- }
114
- getIslands ().setOwner (user , targetUUID , i , RanksManager .VISITOR_RANK );
115
- i .setReserved (true );
116
- i .getCenter ().getBlock ().setType (Material .BEDROCK );
117
- user .sendMessage ("commands.admin.register.reserved-island" , TextVariables .XYZ , Util .xyz (i .getCenter ().toVector ()),
118
- TextVariables .NAME , targetName );
119
- // Build and fire event
120
- IslandEvent .builder ()
121
- .island (i )
122
- .location (i .getCenter ())
123
- .reason (IslandEvent .Reason .RESERVED )
124
- .involvedPlayer (targetUUID )
125
- .admin (true )
126
- .build ();
127
- });
128
- return false ;
129
- }
87
+ @ Override
88
+ public boolean execute (User user , String label , List <String > args ) {
89
+ register (user , args .get (0 ));
130
90
return true ;
131
91
}
132
92
93
+ /**
94
+ * Reserve a spot for a target
95
+ * @param user user doing the reserving
96
+ * @param targetName target name
97
+ */
98
+ void reserve (User user , String targetName ) {
99
+ Objects .requireNonNull (closestIsland );
100
+ Objects .requireNonNull (targetUUID );
101
+ // Island does not exist - this is a reservation
102
+ // Make island here
103
+ Island i = getIslands ().createIsland (closestIsland , targetUUID );
104
+ if (i == null ) {
105
+ user .sendMessage ("commands.admin.register.cannot-make-island" );
106
+ return ;
107
+ }
108
+ getIslands ().setOwner (user , targetUUID , i , RanksManager .VISITOR_RANK );
109
+ i .setReserved (true );
110
+ i .getCenter ().getBlock ().setType (Material .BEDROCK );
111
+ user .sendMessage ("commands.admin.register.reserved-island" , TextVariables .XYZ ,
112
+ Util .xyz (i .getCenter ().toVector ()), TextVariables .NAME , targetName );
113
+ // Build and fire event
114
+ IslandEvent .builder ().island (i ).location (i .getCenter ()).reason (IslandEvent .Reason .RESERVED )
115
+ .involvedPlayer (targetUUID ).admin (true ).build ();
116
+ }
117
+
118
+ /**
119
+ * Register the island to a target
120
+ * @param user user doing the registering
121
+ * @param targetName name of target
122
+ */
123
+ void register (User user , String targetName ) {
124
+ Objects .requireNonNull (closestIsland );
125
+ Objects .requireNonNull (targetUUID );
126
+ Objects .requireNonNull (island );
127
+ // Island exists
128
+ getIslands ().setOwner (user , targetUUID , island , RanksManager .VISITOR_RANK );
129
+ if (island .isSpawn ()) {
130
+ getIslands ().clearSpawn (island .getWorld ());
131
+ }
132
+ user .sendMessage ("commands.admin.register.registered-island" , TextVariables .XYZ ,
133
+ Util .xyz (island .getCenter ().toVector ()), TextVariables .NAME , targetName );
134
+ user .sendMessage ("general.success" );
135
+ // Build and call event
136
+ IslandEvent .builder ().island (island ).location (island .getCenter ()).reason (IslandEvent .Reason .REGISTERED )
137
+ .involvedPlayer (targetUUID ).admin (true ).build ();
138
+ IslandEvent .builder ().island (island ).involvedPlayer (targetUUID ).admin (true )
139
+ .reason (IslandEvent .Reason .RANK_CHANGE ).rankChange (RanksManager .VISITOR_RANK , RanksManager .OWNER_RANK )
140
+ .build ();
141
+ }
142
+
133
143
@ Override
134
144
public Optional <List <String >> tabComplete (User user , String alias , List <String > args ) {
135
145
String lastArg = !args .isEmpty () ? args .get (args .size ()-1 ) : "" ;
0 commit comments