33import com .extendedclip .deluxemenus .DeluxeMenus ;
44import com .extendedclip .deluxemenus .menu .Menu ;
55import com .extendedclip .deluxemenus .utils .Messages ;
6- import com .google . common . primitives . Ints ;
6+ import com .extendedclip . deluxemenus . utils . PaginationUtils ;
77import net .kyori .adventure .text .Component ;
88import net .kyori .adventure .text .TextComponent ;
99import net .kyori .adventure .text .event .ClickEvent ;
@@ -32,7 +32,7 @@ public class ListCommand extends SubCommand {
3232
3333 private static final String LIST_PERMISSION = "deluxemenus.list" ;
3434
35- public ListCommand (final @ NotNull DeluxeMenus plugin ) {
35+ public ListCommand (@ NotNull final DeluxeMenus plugin ) {
3636 super (plugin );
3737 }
3838
@@ -42,7 +42,7 @@ public ListCommand(final @NotNull DeluxeMenus plugin) {
4242 }
4343
4444 @ Override
45- public void execute (final @ NotNull CommandSender sender , final @ NotNull List <String > arguments ) {
45+ public void execute (@ NotNull final CommandSender sender , @ NotNull final List <String > arguments ) {
4646 if (!sender .hasPermission (LIST_PERMISSION )) {
4747 plugin .sms (sender , Messages .NO_PERMISSION );
4848 return ;
@@ -71,7 +71,7 @@ public void execute(final @NotNull CommandSender sender, final @NotNull List<Str
7171 }
7272
7373 @ Override
74- public @ Nullable List <String > onTabComplete (final @ NotNull CommandSender sender , final @ NotNull List <String > arguments ) {
74+ public @ Nullable List <String > onTabComplete (@ NotNull final CommandSender sender , @ NotNull final List <String > arguments ) {
7575 if (!sender .hasPermission (LIST_PERMISSION )) {
7676 return null ;
7777 }
@@ -124,7 +124,7 @@ public void execute(final @NotNull CommandSender sender, final @NotNull List<Str
124124 .collect (Collectors .toList ());
125125 }
126126
127- private void sendSimpleMenuList (final @ NotNull CommandSender sender , final @ NotNull Collection <Menu > menus ) {
127+ private void sendSimpleMenuList (@ NotNull final CommandSender sender , @ NotNull final Collection <Menu > menus ) {
128128 final TextComponent .Builder list = text ();
129129 list .append (text ("The following " + menus .size () + " menus are loaded on the server:" , NamedTextColor .GOLD ).append (newline ()));
130130
@@ -156,37 +156,32 @@ private void sendSimpleMenuList(final @NotNull CommandSender sender, final @NotN
156156 plugin .sms (sender , list .build ());
157157 }
158158
159- private void sendPaginatedMenuList (final @ NotNull CommandSender sender , final @ NotNull Map <String , List <Menu >> menus ,
160- final @ NotNull List <Menu > configMenus , final @ NotNull List <String > args ) {
161- final int totalMenusCount = configMenus .size () + menus .values ().stream ().mapToInt (List ::size ).sum ();
162-
163- Integer page = null ;
164- if (totalMenusCount > plugin .getGeneralConfig ().menusListPageSize () && !args .isEmpty ()) {
165- page = Ints .tryParse (args .get (0 ));
166- }
159+ private void sendPaginatedMenuList (@ NotNull final CommandSender sender , @ NotNull final Map <String , List <Menu >> menus ,
160+ @ NotNull final List <Menu > configMenus , @ NotNull final List <String > args ) {
167161
168- final int maxPages = (int ) Math .ceil ((double ) totalMenusCount / plugin .getGeneralConfig ().menusListPageSize ());
169-
170- if (page == null || page < 1 ) {
171- page = 1 ;
172- }
162+ final int menusPerPage = plugin .getGeneralConfig ().menusListPageSize ();
163+ final int totalMenusCount = configMenus .size () + menus .values ().stream ().mapToInt (List ::size ).sum ();
164+ final int pagesCount = PaginationUtils .getPagesCount (menusPerPage , totalMenusCount );
173165
174- if (page > maxPages ) {
175- page = maxPages ;
176- }
166+ final int page = PaginationUtils .parsePage (
167+ menusPerPage ,
168+ totalMenusCount ,
169+ pagesCount ,
170+ args .isEmpty () ? null : args .get (0 )
171+ );
177172
178173 final Map <String , List <Menu >> paginatedMenus = getPaginatedMenus (
179174 menus ,
180175 configMenus .stream ().collect (TreeMap ::new , (map , menu ) -> map .put (menu .options ().name (), menu ), TreeMap ::putAll ),
181176 page ,
182- plugin . getGeneralConfig (). menusListPageSize ()
177+ menusPerPage
183178 );
184179
185180 final int pageMenusCount = paginatedMenus .values ().stream ().mapToInt (List ::size ).sum ();
186181 final Map <String , Object > pageMenusTree = convertMenusToTree (paginatedMenus );
187182
188183 final TextComponent .Builder list = text ();
189- list .append (text ("Page " + page + "/" + maxPages + " - " + pageMenusCount + " menus:" , NamedTextColor .GOLD ).append (newline ()));
184+ list .append (text ("Page " + page + "/" + pagesCount + " - " + pageMenusCount + " menus:" , NamedTextColor .GOLD ).append (newline ()));
190185
191186 if (sender instanceof ConsoleCommandSender ) {
192187 final var menuList = createMenuListForConsole (pageMenusTree , 0 );
@@ -203,7 +198,7 @@ private void sendPaginatedMenuList(final @NotNull CommandSender sender, final @N
203198
204199 list .append (menuList );
205200
206- if (page > 1 || page < maxPages ) {
201+ if (page > 1 || page < pagesCount ) {
207202 list .append (newline ());
208203
209204 if (page > 1 ) {
@@ -214,12 +209,12 @@ private void sendPaginatedMenuList(final @NotNull CommandSender sender, final @N
214209 .append (text ("Executes: /dm list " + (page - 1 ), NamedTextColor .GRAY ))
215210 ))
216211 .clickEvent (ClickEvent .runCommand ("/dm list " + (page - 1 ))));
217- if (page < maxPages ) {
212+ if (page < pagesCount ) {
218213 list .append (text (" | " , NamedTextColor .GREEN ));
219214 }
220215 }
221216
222- if (page < maxPages ) {
217+ if (page < pagesCount ) {
223218 list .append (text ("Next >>" , NamedTextColor .GOLD )
224219 .hoverEvent (HoverEvent .showText (
225220 text ("Click to go to the next page" , NamedTextColor .GRAY )
@@ -234,7 +229,7 @@ private void sendPaginatedMenuList(final @NotNull CommandSender sender, final @N
234229 }
235230
236231 private Map <String , List <Menu >> getPaginatedMenus (final Map <String , List <Menu >> menus ,
237- final @ NotNull Map <String , Menu > configMenus ,
232+ @ NotNull final Map <String , Menu > configMenus ,
238233 final int page ,
239234 final int pageSize
240235 ) {
@@ -367,7 +362,7 @@ private void addMenuToTreeRecursively(final Map<String, Object> tree, final List
367362 * If the config option to use admin commands in menus list is enabled, the admin "/dm open" command will be returned.
368363 * @return The command that can be used to open this menu.
369364 */
370- public @ Nullable String getMenuDisplayCommand (final @ NotNull Menu menu ) {
365+ public @ Nullable String getMenuDisplayCommand (@ NotNull final Menu menu ) {
371366 final boolean useAdminCommand = this .plugin .getGeneralConfig ().useAdminCommandsInMenusList ();
372367
373368 if (useAdminCommand ) {
0 commit comments