1
- /**
2
- * MIT License
3
- * <p>
4
- * Copyright (c) 2021 TriumphTeam
5
- * Copyright (c) 2023 FlameyosFlow
6
- * <p>
7
- * Permission is hereby granted, free of charge, to any person obtaining a copy
8
- * of this software and associated documentation files (the "Software"), to deal
9
- * in the Software without restriction, including without limitation the rights
10
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- * copies of the Software, and to permit persons to whom the Software is
12
- * furnished to do so, subject to the following conditions:
13
- * <p>
14
- * The above copyright notice and this permission notice shall be included in all
15
- * copies or substantial portions of the Software.
16
- * <p>
17
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
- * SOFTWARE.
24
- */
25
-
26
1
package me .flame .menus .menu ;
27
2
28
3
import com .google .common .collect .ImmutableList ;
47
22
/**
48
23
* GUI that allows you to have multiple pages
49
24
*/
50
- @ SuppressWarnings ({ "unused" , "CodeBlock2Expr" } )
25
+ @ SuppressWarnings ("unused" )
51
26
public final class PaginatedMenu extends BaseMenu <PaginatedMenu > {
52
27
@ NotNull
53
28
final List <Page > pageList ;
@@ -57,8 +32,7 @@ public final class PaginatedMenu extends BaseMenu<PaginatedMenu> {
57
32
58
33
private int pageNum ;
59
34
60
- private final PageDecoration pageDecorator = PageDecoration .create (this );
61
- private final Pages pages ;
35
+ private final Decorator pageDecorator = PageDecoration .create (this );
62
36
63
37
private static final BukkitScheduler sch = Bukkit .getScheduler ();
64
38
@@ -68,8 +42,6 @@ public PaginatedMenu updateTitle(String title) {
68
42
? Bukkit .createInventory (this , size , colorizedTitle )
69
43
: Bukkit .createInventory (this , type .getType (), colorizedTitle );
70
44
this .title = colorizedTitle ;
71
- pages .setTitle (title );
72
-
73
45
this .inventory = updatedInventory ;
74
46
75
47
this .updating = true ;
@@ -79,28 +51,16 @@ public PaginatedMenu updateTitle(String title) {
79
51
return this ;
80
52
}
81
53
82
- public PageDecoration getPageDecorator () {
83
- return pageDecorator ;
54
+ public < T extends Decorator > T getPageDecorator (Class < T > pageClass ) {
55
+ return pageClass . cast ( pageDecorator ) ;
84
56
}
85
57
86
- /**
87
- * Retrieves Pages in the PaginatedMenu and the ability to set/add/remove items from every page.
88
- *
89
- * @return the Pages object
90
- */
91
- public Pages getPages () {
92
- return pages ;
58
+ public PageDecoration getPageDecorator () {
59
+ return getPageDecorator (PageDecoration .class );
93
60
}
94
61
95
- private PaginatedMenu (@ NotNull Pages pages , EnumSet <Modifier > modifiers ) {
96
- super (pages .rows , pages .getTitle (), modifiers );
97
- this .pages = pages ;
98
- this .pageList = pages .getPages ();
99
- for (int i = 0 ; i < size ; i ++) {
100
- pages .add (Page .of (this ));
101
- }
102
- pages .setCurrentPage (pages .get (pageNum ));
103
- this .currentPage = pages .getCurrentPage ();
62
+ public void addPage () {
63
+ pageList .add (Page .of (this ));
104
64
}
105
65
106
66
/**
@@ -115,10 +75,8 @@ private PaginatedMenu(final int pageRows, final int pageCount, String title, Enu
115
75
pageList .add (Page .of (this ));
116
76
}
117
77
this .currentPage = pageList .get (pageNum );
118
- this .pages = Pages .create (pageList , title , pageRows , pageCount , (pages ) -> {
119
- pages .setCurrentPage (pageList .get (pageNum ));
120
- });
121
78
}
79
+
122
80
/**
123
81
* Main constructor to provide a way to create PaginatedMenu
124
82
*/
@@ -129,19 +87,10 @@ private PaginatedMenu(MenuType type, final int pageCount, String title, EnumSet<
129
87
pageList .add (Page .of (this ));
130
88
}
131
89
this .currentPage = pageList .get (pageNum );
132
- this .pages = Pages .create (pageList , title , rows , pageCount , (pages ) -> {
133
- pages .setCurrentPage (pageList .get (pageNum ));
134
- });
135
90
}
136
91
137
- @ NotNull
138
- public static PaginatedMenu create (Pages pages ) {
139
- return new PaginatedMenu (pages , EnumSet .noneOf (Modifier .class ));
140
- }
141
-
142
- @ NotNull
143
- public static PaginatedMenu create (Pages pages , EnumSet <Modifier > modifiers ) {
144
- return new PaginatedMenu (pages , modifiers );
92
+ public List <Page > pages () {
93
+ return ImmutableList .copyOf (pageList );
145
94
}
146
95
147
96
@ NotNull
@@ -164,19 +113,6 @@ public static PaginatedMenu create(String title, MenuType type, int pages, EnumS
164
113
return new PaginatedMenu (type , pages , title , modifiers );
165
114
}
166
115
167
- public Iterator <Page > pages () {
168
- return pageList .iterator ();
169
- }
170
-
171
- public void recreateInventory () {
172
- this .rows ++;
173
- this .size = rows * 9 ;
174
-
175
- pages .rows = rows ;
176
- pages .size = size ;
177
- inventory = Bukkit .createInventory (this , size , title );
178
- }
179
-
180
116
/**
181
117
* Sets the next page item for the given slot with the provided item stack.
182
118
*
@@ -428,20 +364,31 @@ public void open(@NotNull final HumanEntity player, final int openPage) {
428
364
);
429
365
}
430
366
431
- pageNum = openPage ;
432
- currentPage = pageList .get (openPage );
367
+ this . pageNum = openPage ;
368
+ this . currentPage = pageList .get (openPage );
433
369
434
370
recreateItems ();
435
371
player .openInventory (inventory );
436
372
}
437
373
374
+ /**
375
+ * Opens the GUI to a specific page for the given player
376
+ *
377
+ * @param player The {@link HumanEntity} to open the GUI to
378
+ * @return the object
379
+ */
380
+ public PaginatedMenu open (@ NotNull final HumanEntity player ) {
381
+ this .open (player , 1 );
382
+ return this ;
383
+ }
384
+
438
385
/**
439
386
* Gets the current page number
440
387
*
441
388
* @return The current page number
442
389
*/
443
390
public int getCurrentPageNumber () {
444
- return pageNum ;
391
+ return pageNum + 1 ;
445
392
}
446
393
447
394
/**
@@ -472,10 +419,7 @@ public boolean next() {
472
419
if (pageNum + 1 >= pageList .size ()) return false ;
473
420
474
421
pageNum ++;
475
-
476
- Page page = pages .get (pageNum );
477
- pages .setCurrentPage (page );
478
- this .currentPage = page ;
422
+ this .currentPage = pageList .get (pageNum );
479
423
480
424
recreateItems ();
481
425
return true ;
@@ -490,10 +434,7 @@ public boolean previous() {
490
434
if (pageNum - 1 < 0 ) return false ;
491
435
492
436
pageNum --;
493
-
494
- Page page = pages .get (pageNum );
495
- pages .setCurrentPage (page );
496
- this .currentPage = page ;
437
+ this .currentPage = pageList .get (pageNum );
497
438
498
439
recreateItems ();
499
440
return true ;
@@ -505,18 +446,160 @@ public boolean previous() {
505
446
* @return False if there is no next page.
506
447
*/
507
448
public boolean page (int pageNum ) {
508
- if (pageNum > size || pageNum < 0 ) return false ;
449
+ if (pageNum > pageList . size () || pageNum < 0 ) return false ;
509
450
510
451
this .pageNum = pageNum ;
511
-
512
- Page page = pages .get (pageNum );
513
- pages .setCurrentPage (page );
514
- this .currentPage = page ;
452
+ this .currentPage = pageList .get (pageNum );
515
453
516
454
recreateItems ();
517
455
return true ;
518
456
}
519
457
458
+ public Page getPage (int index ) {
459
+ try {
460
+ return pageList .get (index );
461
+ } catch (IndexOutOfBoundsException e ) {
462
+ return null ;
463
+ }
464
+ }
465
+
466
+ public Optional <Page > getOptionalPage (int index ) {
467
+ try {
468
+ return Optional .ofNullable (pageList .get (index ));
469
+ } catch (IndexOutOfBoundsException e ) {
470
+ return Optional .empty ();
471
+ }
472
+ }
473
+
474
+ public void addPageItems (MenuItem ... items ) {
475
+ for (Page page : pageList ) {
476
+ page .addItem (items );
477
+ }
478
+ }
479
+
480
+ public void addPageItems (ItemStack ... items ) {
481
+ for (Page page : pageList ) {
482
+ page .addItem (items );
483
+ }
484
+ }
485
+
486
+ public void setPageItem (Slot slot , MenuItem item ) {
487
+ for (Page page : pageList ) {
488
+ page .setItem (slot , item );
489
+ }
490
+ }
491
+
492
+ public void setPageItem (int [] slots , MenuItem item ) {
493
+ for (Page page : pageList ) {
494
+ for (int slot : slots )
495
+ page .setItem (slot , item );
496
+ }
497
+ }
498
+
499
+ public void setPageItem (Slot [] slots , MenuItem item ) {
500
+ for (Page page : pageList ) {
501
+ for (Slot slot : slots )
502
+ page .setItem (slot , item );
503
+ }
504
+ }
505
+
506
+ public void removePageItem (Slot slot ) {
507
+ for (Page page : pageList ) {
508
+ page .removeItem (slot );
509
+ }
510
+ }
511
+
512
+ public void removePageItem (int slot ) {
513
+ for (Page page : pageList ) {
514
+ page .removeItem (slot );
515
+ }
516
+ }
517
+
518
+ public void removePageItem (ItemStack slot ) {
519
+ for (Page page : pageList ) {
520
+ page .removeItem (slot );
521
+ }
522
+ }
523
+
524
+ public void removePageItem (MenuItem slot ) {
525
+ for (Page page : pageList ) {
526
+ page .removeItem (slot );
527
+ }
528
+ }
529
+
530
+ public void removePageItem (ItemStack ... slot ) {
531
+ for (Page page : pageList ) {
532
+ page .removeItem (slot );
533
+ }
534
+ }
535
+
536
+ public void removePageItem (MenuItem ... slot ) {
537
+ for (Page page : pageList ) {
538
+ page .removeItem (slot );
539
+ }
540
+ }
541
+
542
+ public void setPageItem (int startingIndex , int [] slots , MenuItem items ) {
543
+ int size = slots .length ;
544
+ for (Page page : pageList ) {
545
+ for (int i = startingIndex ; i < size ; i ++) {
546
+ page .setItem (slots [i ], items );
547
+ }
548
+ }
549
+ }
550
+
551
+ public void setPageItem (int startingIndex , Slot [] slots , MenuItem items ) {
552
+ for (Page page : pageList ) {
553
+ for (int i = startingIndex ; i < size ; i ++) {
554
+ page .setItem (slots [i ], items );
555
+ }
556
+ }
557
+ }
558
+
559
+ public void setPageItem (int slot , ItemStack item ) {
560
+ for (Page page : pageList ) {
561
+ page .setItem (slot , item );
562
+ }
563
+ }
564
+
565
+ public void setPageItem (Slot slot , ItemStack item ) {
566
+ for (Page page : pageList ) {
567
+ page .setItem (slot , item );
568
+ }
569
+ }
570
+
571
+ public void setPageItem (int startingIndex , int [] slots , ItemStack items ) {
572
+ for (Page page : pageList ) {
573
+ for (int i = startingIndex ; i < size ; i ++) {
574
+ page .setItem (slots [i ], items );
575
+ }
576
+ }
577
+ }
578
+
579
+ public void setPageItem (int startingIndex , Slot [] slots , ItemStack ... items ) {
580
+ for (Page page : pageList ) {
581
+ for (int i = startingIndex ; i < size ; i ++) {
582
+ page .setItem (slots [i ], items [i ]);
583
+ }
584
+ }
585
+ }
586
+
587
+ public void setPageItem (Slot [] slots , ItemStack item ) {
588
+ for (Page page : pageList ) {
589
+ for (Slot slot : slots ) {
590
+ page .setItem (slot , item );
591
+ }
592
+ }
593
+ }
594
+
595
+ public void setPageItem (int [] slots , ItemStack item ) {
596
+ for (Page page : pageList ) {
597
+ for (int slot : slots ) {
598
+ page .setItem (slot , item );
599
+ }
600
+ }
601
+ }
602
+
520
603
@ NotNull
521
604
public Page getCurrentPage () {
522
605
return currentPage ;
0 commit comments