@@ -55,6 +55,7 @@ public boolean run(
5555 return switch (args [0 ]) {
5656 case "citizens" -> citizens (member .orElse (null ), nation .orElse (null ), sender , command , argsSubset );
5757 case "join" -> join (member .orElse (null ), sender , command , argsSubset );
58+ case "leave" -> leave (member .orElse (null ), nation .orElse (null ), sender );
5859 default -> helpSubCommands (member .orElse (null ), nation .orElse (null ), sender , label );
5960 };
6061 }
@@ -91,6 +92,10 @@ public boolean helpSubCommands(
9192 ) || hasAnyPermission (sender , Permission .NATION_CITIZENS_LIST_OTHER , Permission .NATION_CITIZENS_KICK_OTHER ))
9293 subCommandBuilder .append (Component .newline ())
9394 .append (SMPCore .messages ().subCommandEntry (command + " citizens " , "citizens" ));
95+
96+ if (sender .hasPermission (Permission .NATION_LEAVE ) && member != null && nation .id .equals (member .nationID ) && !nation .leaderUUID .equals (member .uuid ))
97+ subCommandBuilder .append (Component .newline ())
98+ .append (SMPCore .messages ().subCommandEntry (command + " leave " , "leave" , "Leave the nation." ));
9499 }
95100
96101 if (hasAnyPermission (sender , Permission .NATION_JOIN_REQUEST ) && (
@@ -327,4 +332,23 @@ public boolean join(
327332 request .get ().accept ();
328333 return true ;
329334 }
335+
336+ public boolean leave (
337+ final @ Nullable Member member ,
338+ final @ Nullable Nation nation ,
339+ final @ NotNull CommandSender sender
340+ ) {
341+ if (!sender .hasPermission (Permission .NATION_LEAVE ))
342+ return sendMessage (sender , SMPCore .messages ().errorNoPermission ());
343+ if (member == null )
344+ return sendMessage (sender , SMPCore .messages ().errorNotMember ());
345+ if (nation == null )
346+ return sendMessage (sender , SMPCore .messages ().errorNotCitizen ());
347+ if (!nation .id .equals (member .nationID ))
348+ return sendMessage (sender , SMPCore .messages ().errorNoPermission ());
349+ if (nation .leaderUUID .equals (member .uuid ))
350+ return sendMessage (sender , SMPCore .messages ().errorLeaderLeave ());
351+ nation .remove (member );
352+ return true ;
353+ }
330354}
0 commit comments